From 7edae307bdcfb71acfcea13806c2ef9e90b526ac Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Sun, 18 Jun 2023 04:40:53 +0400 Subject: [PATCH] [devkit] Use top-level definitions instead of *Util objects IJ-CR-105402 GitOrigin-RevId: 7fbf7fe02a4e3d2a9b003c796486dc4c1ff78b89 --- .../LightServiceMigrationCodeInspection.kt | 6 +- .../inspections/LightServiceMigrationUtil.kt | 84 +++++++++---------- .../LightServiceMigrationXMLInspection.kt | 6 +- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationCodeInspection.kt b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationCodeInspection.kt index fb29aac064f6..31220ca8b66e 100644 --- a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationCodeInspection.kt +++ b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationCodeInspection.kt @@ -23,12 +23,12 @@ internal class LightServiceMigrationCodeInspection : DevKitUastInspectionBase(UC aClass.isAnonymousOrLocal()) { return ProblemDescriptor.EMPTY_ARRAY } - if (LightServiceMigrationUtil.isVersion193OrHigher(psiClass) || + if (isVersion193OrHigher(psiClass) || ApplicationManager.getApplication().isUnitTestMode) { if (isLightService(aClass)) return ProblemDescriptor.EMPTY_ARRAY for (candidate in locateExtensionsByPsiClass(psiClass)) { val extension = DomUtil.findDomElement(candidate.pointer.element, Extension::class.java, false) ?: continue - val (serviceImplementation, level) = LightServiceMigrationUtil.getServiceImplementation(extension) ?: continue + val (serviceImplementation, level) = getServiceImplementation(extension) ?: continue if (level == Service.Level.APP && JvmInheritanceUtil.isInheritor(aClass, PersistentStateComponent::class.java.canonicalName)) { continue @@ -45,7 +45,7 @@ internal class LightServiceMigrationCodeInspection : DevKitUastInspectionBase(UC level: Service.Level, manager: InspectionManager, isOnTheFly: Boolean): Array { - val message = LightServiceMigrationUtil.getMessage(level) + val message = getMessage(level) val holder = createProblemsHolder(aClass, manager, isOnTheFly) holder.registerUProblem(aClass, message) return holder.resultsArray diff --git a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationUtil.kt b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationUtil.kt index 9147dae67752..58313d108c83 100644 --- a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationUtil.kt +++ b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationUtil.kt @@ -1,4 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +@file:JvmName("LightServiceMigrationUtil") + package org.jetbrains.idea.devkit.inspections import com.intellij.openapi.components.Service @@ -14,54 +17,51 @@ import org.jetbrains.idea.devkit.util.DevKitDomUtil import org.jetbrains.idea.devkit.util.PluginPlatformInfo import org.jetbrains.idea.devkit.util.PsiUtil -internal object LightServiceMigrationUtil { +internal data class ServiceInfo(val aClass: PsiClass, val level: Service.Level) - data class ServiceInfo(val aClass: PsiClass, val level: Service.Level) - - fun getServiceImplementation(extension: Extension): ServiceInfo? { - val level = when (extension.extensionPoint?.effectiveQualifiedName) { - "com.intellij.projectService" -> Service.Level.PROJECT - "com.intellij.applicationService" -> Service.Level.APP - else -> return null - } - val extensionPoint = extension.extensionPoint - if (extensionPoint == null || !DomUtil.hasXml(extensionPoint.beanClass)) return null - if (ServiceDescriptor::class.java.name != extensionPoint.beanClass.stringValue) return null - if (hasDisallowedAttributes(extension)) return null - val serviceImplementation = DevKitDomUtil.getAttribute(extension, "serviceImplementation") ?: return null - if (!DomUtil.hasXml(serviceImplementation)) return null - val aClass = serviceImplementation.value as? PsiClass ?: return null - return ServiceInfo(aClass, level) +internal fun getServiceImplementation(extension: Extension): ServiceInfo? { + val level = when (extension.extensionPoint?.effectiveQualifiedName) { + "com.intellij.projectService" -> Service.Level.PROJECT + "com.intellij.applicationService" -> Service.Level.APP + else -> return null } + val extensionPoint = extension.extensionPoint + if (extensionPoint == null || !DomUtil.hasXml(extensionPoint.beanClass)) return null + if (ServiceDescriptor::class.java.name != extensionPoint.beanClass.stringValue) return null + if (hasDisallowedAttributes(extension)) return null + val serviceImplementation = DevKitDomUtil.getAttribute(extension, "serviceImplementation") ?: return null + if (!DomUtil.hasXml(serviceImplementation)) return null + val aClass = serviceImplementation.value as? PsiClass ?: return null + return ServiceInfo(aClass, level) +} - private fun hasDisallowedAttributes(extension: Extension): Boolean { - for (attributeName in disallowedAttributes) { - val attribute = DevKitDomUtil.getAttribute(extension, attributeName) - if (attribute != null && DomUtil.hasXml(attribute)) return true - } - return false +private fun hasDisallowedAttributes(extension: Extension): Boolean { + for (attributeName in disallowedAttributes) { + val attribute = DevKitDomUtil.getAttribute(extension, attributeName) + if (attribute != null && DomUtil.hasXml(attribute)) return true } + return false +} - @Nls(capitalization = Nls.Capitalization.Sentence) - fun getMessage(level: Service.Level): String { - return when (level) { - Service.Level.APP -> DevKitBundle.message("inspection.light.service.migration.app.level.message") - Service.Level.PROJECT -> DevKitBundle.message("inspection.light.service.migration.project.level.message") - } - } - - fun isVersion193OrHigher(element: DomElement): Boolean { - if (PsiUtil.isIdeaProject(element.module?.project)) return true - val buildNumber = PluginPlatformInfo.forDomElement(element).sinceBuildNumber - return buildNumber != null && buildNumber.baselineVersion >= 193 - } - - fun isVersion193OrHigher(aClass: PsiClass): Boolean { - if (PsiUtil.isIdeaProject(aClass.project)) return true - val module = ModuleUtilCore.findModuleForPsiElement(aClass) ?: return false - val buildNumber = PluginPlatformInfo.forModule(module).sinceBuildNumber - return buildNumber != null && buildNumber.baselineVersion >= 193 +@Nls(capitalization = Nls.Capitalization.Sentence) +internal fun getMessage(level: Service.Level): String { + return when (level) { + Service.Level.APP -> DevKitBundle.message("inspection.light.service.migration.app.level.message") + Service.Level.PROJECT -> DevKitBundle.message("inspection.light.service.migration.project.level.message") } } +internal fun isVersion193OrHigher(element: DomElement): Boolean { + if (PsiUtil.isIdeaProject(element.module?.project)) return true + val buildNumber = PluginPlatformInfo.forDomElement(element).sinceBuildNumber + return buildNumber != null && buildNumber.baselineVersion >= 193 +} + +internal fun isVersion193OrHigher(aClass: PsiClass): Boolean { + if (PsiUtil.isIdeaProject(aClass.project)) return true + val module = ModuleUtilCore.findModuleForPsiElement(aClass) ?: return false + val buildNumber = PluginPlatformInfo.forModule(module).sinceBuildNumber + return buildNumber != null && buildNumber.baselineVersion >= 193 +} + private val disallowedAttributes = setOf("serviceInterface", "os", "client", "overrides", "id", "preload") diff --git a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationXMLInspection.kt b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationXMLInspection.kt index b95088bb2321..ef79bb0d582f 100644 --- a/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationXMLInspection.kt +++ b/plugins/devkit/devkit-core/src/inspections/LightServiceMigrationXMLInspection.kt @@ -22,9 +22,9 @@ internal class LightServiceMigrationXMLInspection : DevKitPluginXmlInspectionBas if (element !is Extension) return if (!isAllowed(holder)) return - if (LightServiceMigrationUtil.isVersion193OrHigher(element) || + if (isVersion193OrHigher(element) || ApplicationManager.getApplication().isUnitTestMode) { - val (aClass, level) = LightServiceMigrationUtil.getServiceImplementation(element) ?: return + val (aClass, level) = getServiceImplementation(element) ?: return if (!aClass.hasModifier(JvmModifier.FINAL) || isLibraryClass(aClass)) return if (level == Service.Level.APP && JvmInheritanceUtil.isInheritor(aClass, PersistentStateComponent::class.java.canonicalName)) { @@ -35,7 +35,7 @@ internal class LightServiceMigrationXMLInspection : DevKitPluginXmlInspectionBas holder.createProblem(element, ProblemHighlightType.ERROR, message, null) } else { - val message = LightServiceMigrationUtil.getMessage(level) + val message = getMessage(level) holder.createProblem(element, message) } }