From e7e56ab85cf7b54e9ba53a06569868d9200b8f04 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 24 Oct 2016 16:47:45 +0300 Subject: [PATCH] KT-8442 related: destructuring declarations aren't taken into account during light classes generation, fixes EA-81204 --- .../compilationErrors/TopLevelDestructuring.java | 5 +++++ .../compilationErrors/TopLevelDestructuring.kt | 7 +++++++ .../asJava/CompilerLightClassTestGenerated.java | 15 +++++++++++++++ .../kotlin/generators/tests/GenerateTests.kt | 2 +- .../resolve/IDELightClassGenerationSupport.kt | 5 +++-- .../IdeCompiledLightClassTestGenerated.java | 2 +- .../resolve/IdeLightClassTestGenerated.java | 15 +++++++++++++++ 7 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.java create mode 100644 compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.java b/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.java new file mode 100644 index 00000000000..a2fcbb64d4d --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.java @@ -0,0 +1,5 @@ +public final class TopLevelDestructuringKt { + private static final int z = 3; + + public static final int getZ() { /* compiled code */ } +} diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt b/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt new file mode 100644 index 00000000000..40522a5eaa1 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt @@ -0,0 +1,7 @@ +// TopLevelDestructuringKt + +data class Pair(val x: Int, val y: Int) + +val (x, y) = Pair(1, 2) + +val z = 3 diff --git a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java index 006ae235aa0..0340959a5b8 100644 --- a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java @@ -59,6 +59,21 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT doTest(fileName); } + @TestMetadata("compiler/testData/asJava/lightClasses/compilationErrors") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class CompilationErrors extends AbstractCompilerLightClassTest { + public void testAllFilesPresentInCompilationErrors() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses/compilationErrors"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("TopLevelDestructuring.kt") + public void testTopLevelDestructuring() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt"); + doTest(fileName); + } + } + @TestMetadata("compiler/testData/asJava/lightClasses/delegation") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 3b569f18292..06cb8812d22 100755 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -931,7 +931,7 @@ fun main(args: Array) { } testClass { - model("asJava/lightClasses", excludeDirs = listOf("local"), pattern = KT_WITHOUT_DOTS_IN_NAME) + model("asJava/lightClasses", excludeDirs = listOf("local", "compilationErrors"), pattern = KT_WITHOUT_DOTS_IN_NAME) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 61455fb7e3b..b08f6b0c50b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -282,8 +282,9 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG ForceResolveUtil.forceResolveAllContents(descriptor) } } - else if (declaration is KtClassOrObject || declaration is KtTypeAlias) { - // Do nothing: we are not interested in classes or type aliases + else if (declaration is KtClassOrObject || declaration is KtTypeAlias || declaration is KtDestructuringDeclaration) { + // Do nothing: we are not interested in classes or type aliases, + // and all destructuring declarations are erroneous at top level } else { LOG.error("Unsupported declaration kind: " + declaration + " in file " + file.name + "\n" + file.text) diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java index 14cc180d120..efb88f95c89 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java @@ -32,7 +32,7 @@ import java.util.regex.Pattern; @RunWith(JUnit3RunnerWithInners.class) public class IdeCompiledLightClassTestGenerated extends AbstractIdeCompiledLightClassTest { public void testAllFilesPresentInLightClasses() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.kt$"), true, "local"); + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.kt$"), true, "local", "compilationErrors"); } @TestMetadata("AnnotationClass.kt") diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java index fd38f064002..54e95b344bf 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java @@ -59,6 +59,21 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest { doTest(fileName); } + @TestMetadata("compiler/testData/asJava/lightClasses/compilationErrors") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class CompilationErrors extends AbstractIdeLightClassTest { + public void testAllFilesPresentInCompilationErrors() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses/compilationErrors"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("TopLevelDestructuring.kt") + public void testTopLevelDestructuring() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/TopLevelDestructuring.kt"); + doTest(fileName); + } + } + @TestMetadata("compiler/testData/asJava/lightClasses/facades") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)