KT-2228 Open and final trait members are loaded as abstract from binary Kotlin classes.
Added storing modality for trait members in @JetMethod annotations. #KT-2228 Fixed
This commit is contained in:
+16
-11
@@ -1340,19 +1340,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
isVar = members.setter != null;
|
||||
}
|
||||
|
||||
Modality modality;
|
||||
if (isFinal) {
|
||||
modality = Modality.FINAL;
|
||||
}
|
||||
else {
|
||||
modality = anyMember.getMember().isAbstract() ? Modality.ABSTRACT : Modality.OPEN;
|
||||
}
|
||||
|
||||
|
||||
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
||||
owner,
|
||||
resolveAnnotations(anyMember.getMember().psiMember),
|
||||
modality,
|
||||
resolveModality(anyMember.getMember(), isFinal),
|
||||
resolveVisibilityFromPsiModifiers(anyMember.getMember().psiMember),
|
||||
isVar,
|
||||
false,
|
||||
@@ -1658,7 +1649,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
methodTypeParameters,
|
||||
valueParameterDescriptors.descriptors,
|
||||
returnType,
|
||||
Modality.convertFromFlags(method.getPsiMethod().hasModifierProperty(PsiModifier.ABSTRACT), !method.isFinal()),
|
||||
resolveModality(method, method.isFinal()),
|
||||
resolveVisibilityFromPsiModifiers(method.getPsiMethod()),
|
||||
/*isInline = */ false
|
||||
);
|
||||
@@ -1845,6 +1836,20 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
}
|
||||
}
|
||||
|
||||
private static Modality resolveModality(PsiMemberWrapper memberWrapper, boolean isFinal) {
|
||||
if (memberWrapper instanceof PsiMethodWrapper) {
|
||||
PsiMethodWrapper method = (PsiMethodWrapper) memberWrapper;
|
||||
if (method.getJetMethod().flags().get(JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT)) {
|
||||
return Modality.OPEN;
|
||||
}
|
||||
if (method.getJetMethod().flags().get(JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT)) {
|
||||
return Modality.FINAL;
|
||||
}
|
||||
}
|
||||
|
||||
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
|
||||
}
|
||||
|
||||
private static Visibility resolveVisibilityFromPsiModifiers(PsiModifierListOwner modifierListOwner) {
|
||||
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
|
||||
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
|
||||
|
||||
@@ -49,8 +49,10 @@ public class JvmStdlibNames {
|
||||
public static final String JET_METHOD_PROPERTY_TYPE_FIELD = "propertyType";
|
||||
|
||||
public static final int JET_METHOD_FLAGS_DEFAULT_VALUE = 0;
|
||||
public static final int JET_METHOD_FLAGS_BITS = 1;
|
||||
public static final int JET_METHOD_FLAGS_BITS = 3;
|
||||
public static final int JET_METHOD_FLAG_PROPERTY_BIT = 0;
|
||||
public static final int JET_METHOD_FLAG_FORCE_OPEN_BIT = 1;
|
||||
public static final int JET_METHOD_FLAG_FORCE_FINAL_BIT = 2;
|
||||
|
||||
public static final JvmClassName JET_CONSTRUCTOR = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetConstructor");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user