From da92c844a6b3c5492ea463bf89af8adc8360d2ab Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 1 May 2018 16:08:38 +0300 Subject: [PATCH] Might be 'const': fix false positive in object literal #KT-23756 Fixed --- .../kotlin/idea/inspections/MayBeConstantInspection.kt | 3 +++ .../inspectionsLocal/mayBeConstant/objectLiteral.kt | 7 +++++++ .../idea/inspections/LocalInspectionTestGenerated.java | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 idea/testData/inspectionsLocal/mayBeConstant/objectLiteral.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MayBeConstantInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MayBeConstantInspection.kt index 6525360df55..954bcf8fc74 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MayBeConstantInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MayBeConstantInspection.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.propertyVisitor import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.isObjectLiteral import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.constants.ErrorValue import org.jetbrains.kotlin.resolve.constants.NullValue @@ -62,7 +63,9 @@ class MayBeConstantInspection : AbstractKotlinInspection() { ) { return NONE } + val containingClassOrObject = this.containingClassOrObject if (!isTopLevel && containingClassOrObject !is KtObjectDeclaration) return NONE + if (containingClassOrObject?.isObjectLiteral() == true) return NONE val initializer = initializer // For some reason constant evaluation does not work for property.analyze() diff --git a/idea/testData/inspectionsLocal/mayBeConstant/objectLiteral.kt b/idea/testData/inspectionsLocal/mayBeConstant/objectLiteral.kt new file mode 100644 index 00000000000..6099bbf537f --- /dev/null +++ b/idea/testData/inspectionsLocal/mayBeConstant/objectLiteral.kt @@ -0,0 +1,7 @@ +// PROBLEM: none + +interface Foo + +val foo = object : Foo { + val x = 1 +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index e816cabda9e..ca59ffaf2d4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2327,6 +2327,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/mayBeConstant/object.kt"); } + @TestMetadata("objectLiteral.kt") + public void testObjectLiteral() throws Exception { + runTest("idea/testData/inspectionsLocal/mayBeConstant/objectLiteral.kt"); + } + @TestMetadata("override.kt") public void testOverride() throws Exception { runTest("idea/testData/inspectionsLocal/mayBeConstant/override.kt");