From 600d135786d679db88457b12ea19fa5b62107f3b Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 25 Jun 2018 02:11:49 +0300 Subject: [PATCH] Fix internal compiler error on importing invisible fake reference Note that this is not relevant for LOCAL/INHERITED visibilities: - for LOCAL visibility it's impossible to have a qualifier - INHERITED is an intermediate visibility, we enhance it later (see resolveUnknownVisibilityForMember) #KT-20356 Fixed --- .../imports/invisibleFakeReferenceInImport.kt | 16 ++++++++++++++++ .../invisibleFakeReferenceInImport.txt | 19 +++++++++++++++++++ .../checkers/DiagnosticsTestGenerated.java | 5 +++++ .../DiagnosticsUsingJavacTestGenerated.java | 5 +++++ .../kotlin/descriptors/Visibilities.java | 2 +- 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt create mode 100644 compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.txt diff --git a/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt b/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt new file mode 100644 index 00000000000..575c053a893 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt @@ -0,0 +1,16 @@ +// FILE: A.kt + +import B.foo + +fun test() { + foo +} + +// FILE: B.kt +object B : C() + +// FILE: C.kt + +open class C { + private var foo: String = "abc" +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.txt b/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.txt new file mode 100644 index 00000000000..03040447e33 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.txt @@ -0,0 +1,19 @@ +package + +public fun test(): kotlin.Unit + +public object B : C { + private constructor B() + invisible_fake final override /*1*/ /*fake_override*/ var foo: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class C { + public constructor C() + private final var foo: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index cee7409614c..8e4f2e8ab4f 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -8765,6 +8765,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/imports/InaccessiblePrivateClass.kt"); } + @TestMetadata("invisibleFakeReferenceInImport.kt") + public void testInvisibleFakeReferenceInImport() throws Exception { + runTest("compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt"); + } + @TestMetadata("JavaPackageLocalClassNotImported.kt") public void testJavaPackageLocalClassNotImported() throws Exception { runTest("compiler/testData/diagnostics/tests/imports/JavaPackageLocalClassNotImported.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 6720fd1f329..55f26124b07 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -8765,6 +8765,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/imports/InaccessiblePrivateClass.kt"); } + @TestMetadata("invisibleFakeReferenceInImport.kt") + public void testInvisibleFakeReferenceInImport() throws Exception { + runTest("compiler/testData/diagnostics/tests/imports/invisibleFakeReferenceInImport.kt"); + } + @TestMetadata("JavaPackageLocalClassNotImported.kt") public void testJavaPackageLocalClassNotImported() throws Exception { runTest("compiler/testData/diagnostics/tests/imports/JavaPackageLocalClassNotImported.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java index 17db93a6bda..6db5f39d570 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java @@ -263,7 +263,7 @@ public class Visibilities { public static final Visibility INVISIBLE_FAKE = new Visibility("invisible_fake", false) { @Override public boolean mustCheckInImports() { - throw new IllegalStateException("This method shouldn't be invoked for INVISIBLE_FAKE visibility"); + return true; } @Override