Fix class object visibility check
ExpressionTypingContext now has a scope for visibility checking, which isn't replaced on replaceScope()
This commit is contained in:
+1
-1
@@ -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));
|
||||
}
|
||||
|
||||
+7
-4
@@ -69,12 +69,12 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull CallResolverExtension callResolverExtension,
|
||||
boolean isAnnotationContext
|
||||
) {
|
||||
return new ExpressionTypingContext(expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||
return new ExpressionTypingContext(expressionTypingServices, labelResolver, trace, scope, scope, dataFlowInfo, expectedType,
|
||||
contextDependency, resolutionResultsCache, callResolverExtension, isAnnotationContext);
|
||||
}
|
||||
|
||||
public final ExpressionTypingServices expressionTypingServices;
|
||||
|
||||
public final JetScope scopeForVisibility;
|
||||
private CompileTimeConstantResolver compileTimeConstantResolver;
|
||||
|
||||
private ExpressionTypingContext(
|
||||
@@ -82,6 +82,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull LabelResolver labelResolver,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull JetScope scope,
|
||||
@NotNull JetScope scopeForVisibility,
|
||||
@NotNull DataFlowInfo dataFlowInfo,
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@@ -92,6 +93,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, labelResolver, callResolverExtension,
|
||||
isAnnotationContext);
|
||||
this.expressionTypingServices = expressionTypingServices;
|
||||
this.scopeForVisibility = scopeForVisibility;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,8 +106,9 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return new ExpressionTypingContext(expressionTypingServices, this.labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||
contextDependency, resolutionResultsCache, callResolverExtension, isAnnotationContext);
|
||||
return new ExpressionTypingContext(expressionTypingServices, this.labelResolver, trace, scope, scopeForVisibility, dataFlowInfo,
|
||||
expectedType, contextDependency, resolutionResultsCache, callResolverExtension,
|
||||
isAnnotationContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,6 @@ class A {
|
||||
}
|
||||
}
|
||||
|
||||
fun f1() = <!INVISIBLE_MEMBER!>A<!>.B.C
|
||||
fun f1() = <!INVISIBLE_MEMBER!>A<!>.B.<!INVISIBLE_MEMBER!>C<!>
|
||||
|
||||
fun f2() = <!INVISIBLE_MEMBER!>A<!>.B.C.<!INVISIBLE_MEMBER!>foo<!>()
|
||||
fun f2() = <!INVISIBLE_MEMBER!>A<!>.B.<!INVISIBLE_MEMBER!>C<!>.<!INVISIBLE_MEMBER!>foo<!>()
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// FILE: 1.kt
|
||||
package a
|
||||
|
||||
private enum class E { ENTRY }
|
||||
|
||||
// FILE: 2.kt
|
||||
package b
|
||||
|
||||
val e = a.<!INVISIBLE_MEMBER!>E<!>
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user