From 2975cda4d6f148db61f537e057488af27bbfb90f Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 29 Jun 2012 21:32:54 +0400 Subject: [PATCH] Fix a bug which caused class object's visibility to be ignored --- .../jet/lang/psi/JetDeclarationImpl.java | 11 ++++++++++ .../tests/ClassObjectVisibility.jet | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/ClassObjectVisibility.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDeclarationImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDeclarationImpl.java index 4137aeed119..96898d9b956 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDeclarationImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDeclarationImpl.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; @@ -33,9 +34,19 @@ abstract class JetDeclarationImpl extends JetExpressionImpl implements JetDeclar @Override @Nullable public JetModifierList getModifierList() { + PsiElement parent = getParent(); + if (isClassObject(parent)) { + assert parent instanceof JetDeclaration; + return ((JetDeclaration)parent).getModifierList(); + } return (JetModifierList) findChildByType(JetNodeTypes.MODIFIER_LIST); } + + private static boolean isClassObject(@NotNull PsiElement parent) { + return parent.getNode().getElementType().equals(JetNodeTypes.CLASS_OBJECT); + } + @Override public boolean hasModifier(JetToken modifier) { JetModifierList modifierList = getModifierList(); diff --git a/compiler/testData/diagnostics/tests/ClassObjectVisibility.jet b/compiler/testData/diagnostics/tests/ClassObjectVisibility.jet new file mode 100644 index 00000000000..d40d2c88932 --- /dev/null +++ b/compiler/testData/diagnostics/tests/ClassObjectVisibility.jet @@ -0,0 +1,22 @@ +package foo + +fun test() { + A.d + A.f + B.c +} + +class A() { + public class object { + val d = 3 + private object f { + + } + } +} + +class B() { + private class object { + val c = 3 + } +} \ No newline at end of file