Don't report when inner class is in anonymous object

GitOrigin-RevId: 8b966d428717fa1e0f6ef0b317b28d44ae9c7811
This commit is contained in:
Toshiaki Kameyama
2021-05-19 12:14:07 +00:00
committed by intellij-monorepo-bot
parent 818837fc2f
commit 9d62baf06a
2 changed files with 16 additions and 0 deletions
@@ -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<KtObjectDeclaration>()?.isObjectLiteral() == true) return
val outerClasses = targetClass.parentsOfType<KtClass>().dropWhile { it == targetClass }.toSet()
if (outerClasses.isEmpty() || outerClasses.any { it.isLocal || it.isInner() }) return
if (targetClass.hasOuterClassMemberReference(outerClasses)) return
@@ -0,0 +1,14 @@
// PROBLEM: none
class Foo {
fun foo() {
object {
private val x = "foo"
<caret>inner class Foo {
fun foo() {
x
}
}
}
}
}