JavaDescriptorResolver is processing visibility flags from annotations (so 'JVM public' members which are actually internal are loaded correctly).
This commit is contained in:
+28
-7
@@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.constants.*;
|
import org.jetbrains.jet.lang.resolve.constants.*;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.kt.PsiAnnotationWithFlags;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -379,7 +380,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
classData.classDescriptor.setTypeParameterDescriptors(typeParameters);
|
classData.classDescriptor.setTypeParameterDescriptors(typeParameters);
|
||||||
classData.classDescriptor.setSupertypes(supertypes);
|
classData.classDescriptor.setSupertypes(supertypes);
|
||||||
classData.classDescriptor.setVisibility(resolveVisibilityFromPsiModifiers(psiClass));
|
classData.classDescriptor.setVisibility(resolveVisibility(psiClass, JetClassAnnotation.get(psiClass)));
|
||||||
Modality modality;
|
Modality modality;
|
||||||
if (classData.classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
|
if (classData.classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
|
||||||
modality = Modality.FINAL;
|
modality = Modality.FINAL;
|
||||||
@@ -520,7 +521,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
constructorDescriptor.initialize(classData.classDescriptor.getTypeConstructor().getParameters(),
|
constructorDescriptor.initialize(classData.classDescriptor.getTypeConstructor().getParameters(),
|
||||||
valueParameterDescriptors.descriptors,
|
valueParameterDescriptors.descriptors,
|
||||||
resolveVisibilityFromPsiModifiers(psiConstructor), aStatic);
|
resolveVisibility(psiConstructor, constructor.getJetMethod()), aStatic);
|
||||||
trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
||||||
return constructorDescriptor;
|
return constructorDescriptor;
|
||||||
}
|
}
|
||||||
@@ -1312,11 +1313,16 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
isVar = members.setter != null;
|
isVar = members.setter != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Visibility visibility = resolveVisibility(anyMember.getMember().psiMember, null);
|
||||||
|
if (members.getter.getMember() instanceof PsiMethodWrapper) {
|
||||||
|
visibility = resolveVisibility(anyMember.getMember().psiMember,
|
||||||
|
((PsiMethodWrapper) members.getter.getMember()).getJetMethod());
|
||||||
|
}
|
||||||
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
||||||
owner,
|
owner,
|
||||||
resolveAnnotations(anyMember.getMember().psiMember),
|
resolveAnnotations(anyMember.getMember().psiMember),
|
||||||
resolveModality(anyMember.getMember(), isFinal),
|
resolveModality(anyMember.getMember(), isFinal),
|
||||||
resolveVisibilityFromPsiModifiers(anyMember.getMember().psiMember),
|
visibility,
|
||||||
isVar,
|
isVar,
|
||||||
false,
|
false,
|
||||||
propertyName,
|
propertyName,
|
||||||
@@ -1329,17 +1335,22 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
propertyDescriptor,
|
propertyDescriptor,
|
||||||
resolveAnnotations(members.getter.getMember().psiMember),
|
resolveAnnotations(members.getter.getMember().psiMember),
|
||||||
Modality.OPEN,
|
Modality.OPEN,
|
||||||
Visibilities.PUBLIC,
|
visibility,
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
CallableMemberDescriptor.Kind.DECLARATION);
|
CallableMemberDescriptor.Kind.DECLARATION);
|
||||||
}
|
}
|
||||||
if (members.setter != null) {
|
if (members.setter != null) {
|
||||||
|
Visibility setterVisibility = resolveVisibility(members.setter.getMember().psiMember, null);
|
||||||
|
if (members.setter.getMember() instanceof PsiMethodWrapper) {
|
||||||
|
setterVisibility = resolveVisibility(members.setter.getMember().psiMember,
|
||||||
|
((PsiMethodWrapper) members.setter.getMember()).getJetMethod());
|
||||||
|
}
|
||||||
setterDescriptor = new PropertySetterDescriptor(
|
setterDescriptor = new PropertySetterDescriptor(
|
||||||
propertyDescriptor,
|
propertyDescriptor,
|
||||||
resolveAnnotations(members.setter.getMember().psiMember),
|
resolveAnnotations(members.setter.getMember().psiMember),
|
||||||
Modality.OPEN,
|
Modality.OPEN,
|
||||||
Visibilities.PUBLIC,
|
setterVisibility,
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
CallableMemberDescriptor.Kind.DECLARATION);
|
CallableMemberDescriptor.Kind.DECLARATION);
|
||||||
@@ -1616,7 +1627,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
valueParameterDescriptors.descriptors,
|
valueParameterDescriptors.descriptors,
|
||||||
returnType,
|
returnType,
|
||||||
resolveModality(method, method.isFinal()),
|
resolveModality(method, method.isFinal()),
|
||||||
resolveVisibilityFromPsiModifiers(method.getPsiMethod()),
|
resolveVisibility(method.getPsiMethod(), method.getJetMethod()),
|
||||||
/*isInline = */ false
|
/*isInline = */ false
|
||||||
);
|
);
|
||||||
trace.record(BindingContext.FUNCTION, method.getPsiMethod(), functionDescriptorImpl);
|
trace.record(BindingContext.FUNCTION, method.getPsiMethod(), functionDescriptorImpl);
|
||||||
@@ -1854,7 +1865,17 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
|
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Visibility resolveVisibilityFromPsiModifiers(PsiModifierListOwner modifierListOwner) {
|
private static Visibility resolveVisibility(PsiModifierListOwner modifierListOwner,
|
||||||
|
@Nullable PsiAnnotationWithFlags annotation) {
|
||||||
|
if (annotation != null) {
|
||||||
|
BitSet flags = annotation.flags();
|
||||||
|
if (flags.get(JvmStdlibNames.FLAG_PRIVATE_BIT)) {
|
||||||
|
return Visibilities.PRIVATE;
|
||||||
|
}
|
||||||
|
else if (flags.get(JvmStdlibNames.FLAG_INTERNAL_BIT)) {
|
||||||
|
return Visibilities.INTERNAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
|
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
|
||||||
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
|
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
|
||||||
(modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED :
|
(modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED :
|
||||||
|
|||||||
Reference in New Issue
Block a user