SpringKotlinAutowiringInspection: getting rid of SpringJavaInjectionPointsAutowiringInspection
This commit is contained in:
committed by
Nikolay Krasko
parent
bef100b46e
commit
3a06b8fe3b
+23
-6
@@ -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<UDeclaration>()?.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<UDeclaration>()?.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<UDeclaration>()?.let { uDeclaration ->
|
||||
SpringUastInjectionPointsAutowiringInspection.checkInjectionPoint(uDeclaration, type, holder, model, required)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun PsiClass.processLightClass() {
|
||||
javaInspection.checkClass(this, holder.manager, isOnTheFly)?.registerAdjustedProblems()
|
||||
val reports = SmartList<ProblemDescriptor>()
|
||||
this.toUElementOfType<UClass>()?.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) {
|
||||
|
||||
Reference in New Issue
Block a user