From 9d62baf06a076bd81ca41c419a9c54edef14dde2 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Fri, 5 Mar 2021 20:12:11 +0900 Subject: [PATCH] Don't report when inner class is in anonymous object GitOrigin-RevId: 8b966d428717fa1e0f6ef0b317b28d44ae9c7811 --- .../RedundantInnerClassModifierInspection.kt | 2 ++ .../inAnonymousObject.kt | 14 ++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/inAnonymousObject.kt diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantInnerClassModifierInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantInnerClassModifierInspection.kt index 97c52dc53f50..f9248f537824 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantInnerClassModifierInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantInnerClassModifierInspection.kt @@ -28,10 +28,12 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.isSubclassOf import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class RedundantInnerClassModifierInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = classVisitor(fun(targetClass) { val innerModifier = targetClass.modifierList?.getModifier(KtTokens.INNER_KEYWORD) ?: return + if (targetClass.containingClassOrObject.safeAs()?.isObjectLiteral() == true) return val outerClasses = targetClass.parentsOfType().dropWhile { it == targetClass }.toSet() if (outerClasses.isEmpty() || outerClasses.any { it.isLocal || it.isInner() }) return if (targetClass.hasOuterClassMemberReference(outerClasses)) return diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/inAnonymousObject.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/inAnonymousObject.kt new file mode 100644 index 000000000000..b411f1ccb664 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/inAnonymousObject.kt @@ -0,0 +1,14 @@ +// PROBLEM: none +class Foo { + fun foo() { + object { + private val x = "foo" + + inner class Foo { + fun foo() { + x + } + } + } + } +} \ No newline at end of file