Added reading constructor visibility from compiled code.

This commit is contained in:
Evgeny Gerashchenko
2012-06-15 19:22:13 +04:00
parent b027e260a9
commit 177d6adb30
2 changed files with 21 additions and 4 deletions
@@ -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<AnnotationDescriptor>(0), true);
constructor.initialize(new ArrayList<TypeParameterDescriptor>(0), new ArrayList<ValueParameterDescriptor>(0), Visibilities.PUBLIC);
Visibility visibility = psiConstructors.length != 0
? resolveVisibility(psiConstructors[0], new PsiMethodWrapper(psiConstructors[0]).getJetConstructor())
: Visibilities.PUBLIC;
constructor.initialize(new ArrayList<TypeParameterDescriptor>(0), new ArrayList<ValueParameterDescriptor>(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());
}
@@ -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()));