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) { if (classData.classDescriptor.getKind() == ClassKind.OBJECT) {
// TODO: wrong: class objects do not need visible constructors // TODO: wrong: class objects do not need visible constructors
ConstructorDescriptorImpl constructor = new ConstructorDescriptorImpl(classData.classDescriptor, new ArrayList<AnnotationDescriptor>(0), true); 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); constructors.add(constructor);
} }
else if (psiConstructors.length == 0) { else if (psiConstructors.length == 0) {
@@ -521,7 +524,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
constructorDescriptor.initialize(classData.classDescriptor.getTypeConstructor().getParameters(), constructorDescriptor.initialize(classData.classDescriptor.getTypeConstructor().getParameters(),
valueParameterDescriptors.descriptors, valueParameterDescriptors.descriptors,
resolveVisibility(psiConstructor, constructor.getJetMethod()), aStatic); resolveVisibility(psiConstructor, constructor.getJetConstructor()), aStatic);
trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
return constructorDescriptor; return constructorDescriptor;
} }
@@ -1314,7 +1317,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
Visibility visibility = resolveVisibility(anyMember.getMember().psiMember, null); 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, visibility = resolveVisibility(anyMember.getMember().psiMember,
((PsiMethodWrapper) members.getter.getMember()).getJetMethod()); ((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.PsiAnnotation;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiMethod;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
import org.jetbrains.jet.utils.BitSetUtils;
import java.util.BitSet;
/** /**
* @author Stepan Koltsov * @author Stepan Koltsov
*/ */
public class JetConstructorAnnotation extends PsiAnnotationWrapper { public class JetConstructorAnnotation extends PsiAnnotationWithFlags {
public JetConstructorAnnotation(@Nullable PsiAnnotation psiAnnotation) { public JetConstructorAnnotation(@Nullable PsiAnnotation psiAnnotation) {
super(psiAnnotation); super(psiAnnotation);
@@ -41,6 +45,16 @@ public class JetConstructorAnnotation extends PsiAnnotationWrapper {
return hidden; 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) { public static JetConstructorAnnotation get(PsiMethod constructor) {
return new JetConstructorAnnotation(constructor.getModifierList().findAnnotation(JvmStdlibNames.JET_CONSTRUCTOR.getFqName().getFqName())); return new JetConstructorAnnotation(constructor.getModifierList().findAnnotation(JvmStdlibNames.JET_CONSTRUCTOR.getFqName().getFqName()));
} }