From 3a06b8fe3b9765e0403bee4d3ef2fad67dcd6aa9 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Fri, 27 Oct 2017 18:41:09 +0300 Subject: [PATCH] SpringKotlinAutowiringInspection: getting rid of `SpringJavaInjectionPointsAutowiringInspection` --- .../SpringKotlinAutowiringInspection.kt | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt b/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt index 60c48347c02..ad96206bb2f 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt @@ -16,7 +16,8 @@ import com.intellij.spring.CommonSpringModel import com.intellij.spring.SpringBundle import com.intellij.spring.model.SpringBeanPointer import com.intellij.spring.model.converters.SpringConverterUtil -import com.intellij.spring.model.highlighting.autowire.SpringJavaInjectionPointsAutowiringInspection +import com.intellij.spring.model.highlighting.autowire.SpringJavaConstructorAutowiringInspection +import com.intellij.spring.model.highlighting.autowire.SpringUastInjectionPointsAutowiringInspection import com.intellij.spring.model.utils.SpringAutowireUtil import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -28,6 +29,10 @@ import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.idea.inspections.registerWithElementsUnwrapped import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* +import org.jetbrains.kotlin.utils.SmartList +import org.jetbrains.uast.UClass +import org.jetbrains.uast.UDeclaration +import org.jetbrains.uast.toUElementOfType class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { // Based on SpringJavaInjectionPointsAutowiringInspection.AddSpringBeanQualifierFix @@ -86,7 +91,8 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { } } - private val javaInspection by lazy { SpringJavaInjectionPointsAutowiringInspection() } + private val uastInspection by lazy { SpringUastInjectionPointsAutowiringInspection() } + private val nonUastInspection by lazy { SpringJavaConstructorAutowiringInspection() } override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = object : KtVisitorVoid() { // TODO: SpringJavaInjectionPointsAutowiringInspection.checkAutowiredMethod() is not accessible here @@ -95,7 +101,9 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { when { resourceAnnotation != null -> { val propertyType = PropertyUtil.getPropertyType(psiMethod) ?: return - SpringJavaInjectionPointsAutowiringInspection.checkInjectionPoint(psiMethod, propertyType, holder, springModel, required) + psiMethod.toUElementOfType()?.let { uMethod -> + SpringUastInjectionPointsAutowiringInspection.checkInjectionPoint(uMethod, propertyType, holder, springModel, required) + } } psiMethod.parameterList.parametersCount == 0 && SpringAutowireUtil.isAutowiredByAnnotation(psiMethod) -> { @@ -107,7 +115,9 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { else -> { for (parameter in psiMethod.parameterList.parameters) { if (AnnotationUtil.isAnnotated(parameter, "org.springframework.beans.factory.annotation.Value", true)) continue - SpringJavaInjectionPointsAutowiringInspection.checkInjectionPoint(parameter, parameter.type, holder, springModel, required) + parameter.toUElementOfType()?.let { uParameter -> + SpringUastInjectionPointsAutowiringInspection.checkInjectionPoint(uParameter, parameter.type, holder, springModel, required) + } } } } @@ -153,12 +163,19 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { private fun PsiField.processLightField() { if (!SpringAutowireUtil.isAutowiredByAnnotation(this)) return processLightMember { holder, model, required -> - SpringJavaInjectionPointsAutowiringInspection.checkInjectionPoint(this, type, holder, model, required) + this.toUElementOfType()?.let { uDeclaration -> + SpringUastInjectionPointsAutowiringInspection.checkInjectionPoint(uDeclaration, type, holder, model, required) + } } } private fun PsiClass.processLightClass() { - javaInspection.checkClass(this, holder.manager, isOnTheFly)?.registerAdjustedProblems() + val reports = SmartList() + this.toUElementOfType()?.let { uClass -> + uastInspection.checkClass(uClass, holder.manager, isOnTheFly)?.let { reports.addAll(it) } + } + nonUastInspection.checkClass(this, holder.manager, isOnTheFly)?.let { reports.addAll(it) } + reports.toTypedArray().registerAdjustedProblems() } override fun visitNamedFunction(function: KtNamedFunction) {