diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 2a5e0833172..362faef8010 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -426,7 +426,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes if (classData.classDescriptor.getKind() == ClassKind.OBJECT) { // TODO: wrong: class objects do not need visible constructors ConstructorDescriptorImpl constructor = new ConstructorDescriptorImpl(classData.classDescriptor, new ArrayList(0), true); - constructor.initialize(new ArrayList(0), new ArrayList(0), Visibilities.PUBLIC); + Visibility visibility = psiConstructors.length != 0 + ? resolveVisibility(psiConstructors[0], new PsiMethodWrapper(psiConstructors[0]).getJetConstructor()) + : Visibilities.PUBLIC; + constructor.initialize(new ArrayList(0), new ArrayList(0), visibility); constructors.add(constructor); } else if (psiConstructors.length == 0) { @@ -521,7 +524,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } constructorDescriptor.initialize(classData.classDescriptor.getTypeConstructor().getParameters(), valueParameterDescriptors.descriptors, - resolveVisibility(psiConstructor, constructor.getJetMethod()), aStatic); + resolveVisibility(psiConstructor, constructor.getJetConstructor()), aStatic); trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor); return constructorDescriptor; } @@ -1314,7 +1317,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } Visibility visibility = resolveVisibility(anyMember.getMember().psiMember, null); - if (members.getter.getMember() instanceof PsiMethodWrapper) { + if (members.getter != null && members.getter.getMember() instanceof PsiMethodWrapper) { visibility = resolveVisibility(anyMember.getMember().psiMember, ((PsiMethodWrapper) members.getter.getMember()).getJetMethod()); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetConstructorAnnotation.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetConstructorAnnotation.java index efececbde06..e96749d1f9e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetConstructorAnnotation.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetConstructorAnnotation.java @@ -18,13 +18,17 @@ package org.jetbrains.jet.lang.resolve.java.kt; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiMethod; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; +import org.jetbrains.jet.utils.BitSetUtils; + +import java.util.BitSet; /** * @author Stepan Koltsov */ -public class JetConstructorAnnotation extends PsiAnnotationWrapper { +public class JetConstructorAnnotation extends PsiAnnotationWithFlags { public JetConstructorAnnotation(@Nullable PsiAnnotation psiAnnotation) { super(psiAnnotation); @@ -40,6 +44,16 @@ public class JetConstructorAnnotation extends PsiAnnotationWrapper { } return hidden; } + + private BitSet flags; + @NotNull + @Override + public BitSet flags() { + if (flags == null) { + flags = BitSetUtils.toBitSet(getIntAttribute(JvmStdlibNames.JET_CONSTRUCTOR_FLAGS_FIELD, JvmStdlibNames.FLAGS_DEFAULT_VALUE)); + } + return flags; + } public static JetConstructorAnnotation get(PsiMethod constructor) { return new JetConstructorAnnotation(constructor.getModifierList().findAnnotation(JvmStdlibNames.JET_CONSTRUCTOR.getFqName().getFqName()));