diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java index d61523c3852..0dd5f522dfc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java @@ -20,6 +20,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.Mutable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -486,9 +487,10 @@ public class QualifiedExpressionResolver { @NotNull JetScope scopeToCheckVisibility ) { if (!Visibilities.isVisible(ReceiverValue.IRRELEVANT_RECEIVER, descriptor, scopeToCheckVisibility.getContainingDeclaration())) { + Visibility visibility = descriptor.getVisibility(); + if (PsiTreeUtil.getParentOfType(referenceExpression, JetImportDirective.class) != null && !visibility.mustCheckInImports()) return; //noinspection ConstantConditions - trace.report(INVISIBLE_REFERENCE.on(referenceExpression, descriptor, descriptor.getVisibility(), - descriptor.getContainingDeclaration())); + trace.report(INVISIBLE_REFERENCE.on(referenceExpression, descriptor, visibility, descriptor.getContainingDeclaration())); } } diff --git a/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.kt b/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.kt new file mode 100644 index 00000000000..aff11271935 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.kt @@ -0,0 +1,13 @@ +package p + +import p.Foo.Nested + +open class Foo { + protected class Nested +} + +class Bar: Foo() { + fun foo(): Nested? = null +} + +fun foo(): Nested? = null \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.txt b/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.txt new file mode 100644 index 00000000000..5e5895f1473 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/ImportProtectedClass.txt @@ -0,0 +1,27 @@ +package + +package p { + internal fun foo(): p.Foo.Nested? + + internal final class Bar : p.Foo { + public constructor Bar() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + internal final fun foo(): p.Foo.Nested? + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + internal open class Foo { + public constructor Foo() + 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 + + protected final class Nested { + public constructor Nested() + 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/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 27ba582338c..a910329476a 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -4811,6 +4811,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("ImportProtectedClass.kt") + public void testImportProtectedClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/imports/ImportProtectedClass.kt"); + doTest(fileName); + } + @TestMetadata("ImportResolutionOrder.kt") public void testImportResolutionOrder() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/imports/ImportResolutionOrder.kt");