From 818837fc2f656343889f254fafee90ff96f292e6 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 4 Mar 2021 18:08:35 +0900 Subject: [PATCH] Redundant 'inner' modifier: report when call objects declared in the containing class GitOrigin-RevId: 32446eba5a14ef77028c5bb82bef4225b28da1f3 --- .../inspections/RedundantInnerClassModifierInspection.kt | 4 ++++ .../hasOuterClassCompanionObjectReference.kt | 9 +++++++++ .../hasOuterClassCompanionObjectReference.kt.after | 9 +++++++++ .../hasOuterClassObjectReference.kt | 9 +++++++++ .../hasOuterClassObjectReference.kt.after | 9 +++++++++ 5 files changed, 40 insertions(+) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt.after 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 e0d46b3d0d4e..97c52dc53f50 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 @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.containingClass +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.isSubclassOf @@ -61,6 +62,9 @@ class RedundantInnerClassModifierInspection : AbstractKotlinInspection() { if (reference is PsiClass && reference.parent is PsiClass) { return@anyDescendantOfType reference.getJavaClassDescriptor()?.isInner == true } + if (reference is KtObjectDeclaration || (reference as? KtDeclaration)?.containingClassOrObject is KtObjectDeclaration) { + return@anyDescendantOfType false + } val referenceContainingClass = reference?.getStrictParentOfType() if (referenceContainingClass != null) { if (referenceContainingClass == targetClass) return@anyDescendantOfType false diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt new file mode 100644 index 000000000000..164220885acc --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt @@ -0,0 +1,9 @@ +class Test { + inner class InnerM { + val v = Test + val foo = Test.foo + } + companion object { + const val foo = 1 + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt.after new file mode 100644 index 000000000000..47ec5f53b131 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassCompanionObjectReference.kt.after @@ -0,0 +1,9 @@ +class Test { + class InnerM { + val v = Test + val foo = Test.foo + } + companion object { + const val foo = 1 + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt new file mode 100644 index 000000000000..4d31eaa4ae3a --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt @@ -0,0 +1,9 @@ +class Test { + inner class InnerM { + val o = O + val foo = O.foo + } + object O { + const val foo = 1 + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt.after new file mode 100644 index 000000000000..0c68d1d2ac25 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/redundantInnerClassModifier/hasOuterClassObjectReference.kt.after @@ -0,0 +1,9 @@ +class Test { + class InnerM { + val o = O + val foo = O.foo + } + object O { + const val foo = 1 + } +} \ No newline at end of file