Added reading constructor visibility from compiled code.
This commit is contained in:
+6
-3
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-1
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user