From 4d3767280994355405013366076fe7f5b4a4c467 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 2 Apr 2012 15:37:02 +0400 Subject: [PATCH] added classes visibility check --- .../jet/lang/diagnostics/Errors.java | 1 + .../jet/lang/resolve/TypeResolver.java | 5 +++++ .../diagnostics/tests/scopes/visibility2.jet | 19 ++++++++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 1150da8e7c6..bfecce4b3ca 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -56,6 +56,7 @@ public interface Errors { }); UnresolvedReferenceDiagnosticFactory UNRESOLVED_REFERENCE = UnresolvedReferenceDiagnosticFactory.create("Unresolved reference"); + DiagnosticFactory2 INVISIBLE_MEMBER = DiagnosticFactory2.create(ERROR, "''{0}'' has private access in ''{1}''", NAME, NAME); RedeclarationDiagnosticFactory REDECLARATION = RedeclarationDiagnosticFactory.REDECLARATION; RedeclarationDiagnosticFactory NAME_SHADOWING = RedeclarationDiagnosticFactory.NAME_SHADOWING; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index b98d0492e12..369b6d168a3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -274,6 +274,11 @@ public class TypeResolver { .lookupDescriptorsForUserType(userType, scope, trace); for (DeclarationDescriptor descriptor : descriptors) { if (descriptor instanceof ClassifierDescriptor) { + if (descriptor instanceof ClassDescriptor && !Visibilities.isVisible((ClassDescriptor)descriptor, scope.getContainingDeclaration())) { + JetSimpleNameExpression referenceExpression = userType.getReferenceExpression(); + assert referenceExpression != null; + trace.report(INVISIBLE_MEMBER.on(referenceExpression, descriptor, ((ClassDescriptor)descriptor).getContainingDeclaration())); + } return (ClassifierDescriptor) descriptor; } } diff --git a/compiler/testData/diagnostics/tests/scopes/visibility2.jet b/compiler/testData/diagnostics/tests/scopes/visibility2.jet index af2385e32a0..3517adab1b3 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility2.jet +++ b/compiler/testData/diagnostics/tests/scopes/visibility2.jet @@ -1,7 +1,7 @@ //FILE:a.kt package a -private class A { +private open class A { fun bar() {} } @@ -9,7 +9,10 @@ private fun foo() {} fun makeA() = A() +private object PO {} + //FILE:b.kt +//+JDK package a.b import a.* @@ -18,14 +21,20 @@ fun test() { val y = makeA() y.bar() foo() + + val u : A = A() + val a : java.util.Arrays.ArrayList; + + val po = PO() } -class A { - class B { +class B : A() {} + +class Q { + class W { fun foo() { - val y = makeA() //assure that 'makeA' is visible + val y = makeA() //assure that 'makeA' is visible } } } -