From 1b2e28d467a8a5fc31522ae5471ea7d6d14697d7 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Thu, 27 Jul 2017 19:25:18 +0300 Subject: [PATCH] SpringKotlinAutowiringInspection: workaround for nameless property (EA-104960) --- .../SpringKotlinAutowiringInspection.kt | 17 +++++++------ .../spring/autowiring/incompleteAutowired.kt | 25 +++++++++++++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 ultimate/testData/inspections/spring/autowiring/incompleteAutowired.kt 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 7c38e363aa0..2d7f9ff7c38 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/SpringKotlinAutowiringInspection.kt @@ -69,7 +69,7 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { override fun applyFix(project: Project, descriptor: ProblemDescriptor) { val modifierListOwner = elementPointer.element ?: return - if(!FileModificationService.getInstance().preparePsiElementForWrite(modifierListOwner)) return + if (!FileModificationService.getInstance().preparePsiElementForWrite(modifierListOwner)) return if (beanPointers.isEmpty()) return val defaultBeanName = with(beanPointers.first().name) { if (isNullOrBlank()) "Unknown" else this } @@ -129,13 +129,13 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { ?: return@registerWithElementsUnwrapped qf AddQualifierFix(modifierListOwner, beanPointers, annotationFqName) } - catch(e: Exception) { + catch (e: Exception) { return@registerWithElementsUnwrapped null } } } - private fun T.processLightMember( + private fun T.processLightMember( action: T.(holder: ProblemsHolder, model: CommonSpringModel, required: Boolean) -> Unit ) { val model = SpringAutowireUtil.getProcessingSpringModel(containingClass) ?: return @@ -166,12 +166,13 @@ class SpringKotlinAutowiringInspection : AbstractKotlinInspection() { } override fun visitProperty(property: KtProperty) { - for (lightElement in property.toLightElements()) { - when (lightElement) { - is KtLightMethod -> lightElement.processLightMethod() - is KtLightField -> lightElement.processLightField() + if (property.name != null) // It is here because `lightElement.name` returns `` instead of `null` suddenly + for (lightElement in property.toLightElements()) { + when (lightElement) { + is KtLightMethod -> lightElement.processLightMethod() + is KtLightField -> lightElement.processLightField() + } } - } } override fun visitClassOrObject(classOrObject: KtClassOrObject) { diff --git a/ultimate/testData/inspections/spring/autowiring/incompleteAutowired.kt b/ultimate/testData/inspections/spring/autowiring/incompleteAutowired.kt new file mode 100644 index 00000000000..949a0d878e3 --- /dev/null +++ b/ultimate/testData/inspections/spring/autowiring/incompleteAutowired.kt @@ -0,0 +1,25 @@ + +// WITH_RUNTIME + +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Component +import org.springframework.context.annotation.ComponentScan +import org.springframework.context.annotation.Configuration +import org.springframework.beans.factory.annotation.Qualifier + +@Configuration +@ComponentScan +open class InvalidAutowiredByTypeQualifiers + +abstract class AbstractBarBean +@Component +open class BarBean1 : AbstractBarBean() +@Component +open class BarBean2 : AbstractBarBean() + +@Component +open class IncompleteClassAutowiring() { + @Autowired + lateinit var : String + +} \ No newline at end of file