From c2598faa4ee7f9ae7a3036d83d1ac0cb09ef91a5 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 22 Nov 2013 17:03:34 +0400 Subject: [PATCH] Fix class object visibility check ExpressionTypingContext now has a scope for visibility checking, which isn't replaced on replaceScope() --- .../lang/resolve/calls/CallExpressionResolver.java | 2 +- .../types/expressions/ExpressionTypingContext.java | 11 +++++++---- .../classObjects/nestedClassInPrivateClassObject.kt | 4 ++-- .../tests/enum/classObjectOfPrivateEnum.kt | 9 +++++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 5 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/enum/classObjectOfPrivateEnum.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java index 92639707826..315b68fda55 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java @@ -139,7 +139,7 @@ public class CallExpressionResolver { if (!(classifier instanceof ClassDescriptor)) return; ClassDescriptor classObject = ((ClassDescriptor) classifier).getClassObjectDescriptor(); assert classObject != null : "This check should be done only for classes with class objects: " + classifier; - DeclarationDescriptor from = context.scope.getContainingDeclaration(); + DeclarationDescriptor from = context.scopeForVisibility.getContainingDeclaration(); if (!Visibilities.isVisible(classObject, from)) { context.trace.report(INVISIBLE_MEMBER.on(expression, classObject, classObject.getVisibility(), from)); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java index 754788d59a4..1487a06d97b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java @@ -69,12 +69,12 @@ public class ExpressionTypingContext extends ResolutionContextA.B.C +fun f1() = A.B.C -fun f2() = A.B.C.foo() +fun f2() = A.B.C.foo() diff --git a/compiler/testData/diagnostics/tests/enum/classObjectOfPrivateEnum.kt b/compiler/testData/diagnostics/tests/enum/classObjectOfPrivateEnum.kt new file mode 100644 index 00000000000..959b09adc52 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/classObjectOfPrivateEnum.kt @@ -0,0 +1,9 @@ +// FILE: 1.kt +package a + +private enum class E { ENTRY } + +// FILE: 2.kt +package b + +val e = a.E diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index d499806d223..dc25ba44ecc 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2532,6 +2532,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/enum"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("classObjectOfPrivateEnum.kt") + public void testClassObjectOfPrivateEnum() throws Exception { + doTest("compiler/testData/diagnostics/tests/enum/classObjectOfPrivateEnum.kt"); + } + @TestMetadata("dontCreateNamespaceTypeForEnumEntry.kt") public void testDontCreateNamespaceTypeForEnumEntry() throws Exception { doTest("compiler/testData/diagnostics/tests/enum/dontCreateNamespaceTypeForEnumEntry.kt");