From 03ea8603cebd0616166afcc65c28a1b19e2354c0 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 17 Sep 2018 01:21:34 +0300 Subject: [PATCH] Do not try building light classes for inline classes in dumb mode Generation of inline classes is quite complicated: we mangle methods, add stubs and synthesized methods. So, for simplicity, to avoid logic duplication in dummy resolve and in the backend, currently we will use only the latter for light classes generation #KT-26843 Fixed --- .../idea/caches/lightClasses/IDELightClassContexts.kt | 6 ++++-- .../inlineClassesImplInterface/after/iFace.kt | 3 +++ .../inlineClassesImplInterface/after/test.kt | 3 +++ .../inlineClassesImplInterface/before/iFace.kt | 3 +++ .../inlineClassesImplInterface/before/test.kt | 3 +++ .../inlineClassesImplInterface.test | 5 +++++ .../formatter/TypingIndentationTestBaseGenerated.java | 9 +-------- .../MultiFileLocalInspectionTestGenerated.java | 5 +++++ 8 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/iFace.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/test.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/iFace.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/test.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt index 3a859754b83..39b07dbee6b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt @@ -34,10 +34,10 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.configureModule -import org.jetbrains.kotlin.idea.caches.project.getModuleInfo -import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.lightClasses.IDELightClassConstructionContext.Mode.EXACT import org.jetbrains.kotlin.idea.caches.lightClasses.IDELightClassConstructionContext.Mode.LIGHT +import org.jetbrains.kotlin.idea.caches.project.getModuleInfo +import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.ResolveElementCache @@ -173,6 +173,8 @@ internal object IDELightClassContexts { } private fun isDummyResolveApplicable(classOrObject: KtClassOrObject): Boolean { + if (classOrObject.hasModifier(KtTokens.INLINE_KEYWORD)) return false + if (classOrObject.hasLightClassMatchingErrors) return false if (hasDelegatedSupertypes(classOrObject)) return false diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/iFace.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/iFace.kt new file mode 100644 index 00000000000..e278e3241a8 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/iFace.kt @@ -0,0 +1,3 @@ +interface IFace { + fun foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/test.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/test.kt new file mode 100644 index 00000000000..0dc55a46a14 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/after/test.kt @@ -0,0 +1,3 @@ +inline class InlineClass(val x: Int) : IFace { + override fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/iFace.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/iFace.kt new file mode 100644 index 00000000000..e278e3241a8 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/iFace.kt @@ -0,0 +1,3 @@ +interface IFace { + fun foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/test.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/test.kt new file mode 100644 index 00000000000..4a403af2d85 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/before/test.kt @@ -0,0 +1,3 @@ +inline class InlineClass(val x: Int) : IFace { + override fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test new file mode 100644 index 00000000000..c2bdad89914 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test @@ -0,0 +1,5 @@ +{ + "inspectionClass": "org.jetbrains.kotlin.idea.inspections.UnusedSymbolInspection", + "problem": "none", + "mainFile": "test.kt" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java index fdac1eac895..8b230a272fc 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java @@ -236,16 +236,9 @@ public class TypingIndentationTestBaseGenerated extends AbstractTypingIndentatio runTest("idea/testData/indentationOnNewline/KT20783.after.kt"); } - @TestMetadata("LambdaInCallWithAllightMultilineParameters.after.kt") - public void testLambdaInCallWithAllightMultilineParameters() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/indentationOnNewline/LambdaInCallWithAllightMultilineParameters.after.kt"); - doNewlineTest(fileName); - } - @TestMetadata("ModifierListInUnfinishedDeclaration.after.kt") public void testModifierListInUnfinishedDeclaration() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/indentationOnNewline/ModifierListInUnfinishedDeclaration.after.kt"); - doNewlineTest(fileName); + runTest("idea/testData/indentationOnNewline/ModifierListInUnfinishedDeclaration.after.kt"); } @TestMetadata("MultideclarationAfterEq.after.kt") diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java index af6d9fbe6ce..c0f6c7c16e3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java @@ -88,4 +88,9 @@ public class MultiFileLocalInspectionTestGenerated extends AbstractMultiFileLoca public void testUnusedSymbol_fromKotlinTestClass_FromKotlinTestClass() throws Exception { runTest("idea/testData/multiFileLocalInspections/unusedSymbol/fromKotlinTestClass/fromKotlinTestClass.test"); } + + @TestMetadata("unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test") + public void testUnusedSymbol_inlineClassesImplInterface_InlineClassesImplInterface() throws Exception { + runTest("idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test"); + } }