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.SpringBundle
|
||||||
import com.intellij.spring.model.SpringBeanPointer
|
import com.intellij.spring.model.SpringBeanPointer
|
||||||
import com.intellij.spring.model.converters.SpringConverterUtil
|
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 com.intellij.spring.model.utils.SpringAutowireUtil
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
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.idea.inspections.registerWithElementsUnwrapped
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
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() {
|
class SpringKotlinAutowiringInspection : AbstractKotlinInspection() {
|
||||||
// Based on SpringJavaInjectionPointsAutowiringInspection.AddSpringBeanQualifierFix
|
// 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() {
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = object : KtVisitorVoid() {
|
||||||
// TODO: SpringJavaInjectionPointsAutowiringInspection.checkAutowiredMethod() is not accessible here
|
// TODO: SpringJavaInjectionPointsAutowiringInspection.checkAutowiredMethod() is not accessible here
|
||||||
@@ -95,7 +101,9 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() {
|
|||||||
when {
|
when {
|
||||||
resourceAnnotation != null -> {
|
resourceAnnotation != null -> {
|
||||||
val propertyType = PropertyUtil.getPropertyType(psiMethod) ?: return
|
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 &&
|
psiMethod.parameterList.parametersCount == 0 &&
|
||||||
SpringAutowireUtil.isAutowiredByAnnotation(psiMethod) -> {
|
SpringAutowireUtil.isAutowiredByAnnotation(psiMethod) -> {
|
||||||
@@ -107,7 +115,9 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() {
|
|||||||
else -> {
|
else -> {
|
||||||
for (parameter in psiMethod.parameterList.parameters) {
|
for (parameter in psiMethod.parameterList.parameters) {
|
||||||
if (AnnotationUtil.isAnnotated(parameter, "org.springframework.beans.factory.annotation.Value", true)) continue
|
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() {
|
private fun PsiField.processLightField() {
|
||||||
if (!SpringAutowireUtil.isAutowiredByAnnotation(this)) return
|
if (!SpringAutowireUtil.isAutowiredByAnnotation(this)) return
|
||||||
processLightMember { holder, model, required ->
|
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() {
|
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) {
|
override fun visitNamedFunction(function: KtNamedFunction) {
|
||||||
|
|||||||
Reference in New Issue
Block a user