KT-1973 Added class kind to JetClass annotations to distinguish object declarations and regular classes.
#KT-1973 in progress
This commit is contained in:
@@ -112,6 +112,10 @@ public class CodegenUtil {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int getFlagsForClassKind(@NotNull ClassDescriptor descriptor) {
|
||||
return descriptor.getKind() == ClassKind.OBJECT ? JvmStdlibNames.FLAG_CLASS_KIND_OBJECT : JvmStdlibNames.FLAG_CLASS_KIND_DEFAULT;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JvmClassName getInternalClassName(FunctionDescriptor descriptor) {
|
||||
final int paramCount = descriptor.getValueParameters().size();
|
||||
|
||||
@@ -250,7 +250,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
if (signature.getKotlinGenericSignature() != null || descriptor.getVisibility() != Visibilities.PUBLIC) {
|
||||
AnnotationVisitor annotationVisitor = v.newAnnotation(JvmStdlibNames.JET_CLASS.getDescriptor(), true);
|
||||
annotationVisitor.visit(JvmStdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature());
|
||||
int flags = getFlagsForVisibility(descriptor.getVisibility());
|
||||
int flags = getFlagsForVisibility(descriptor.getVisibility()) | getFlagsForClassKind(descriptor);
|
||||
if (JvmStdlibNames.FLAGS_DEFAULT_VALUE != flags) {
|
||||
annotationVisitor.visit(JvmStdlibNames.JET_FLAGS_FIELD, flags);
|
||||
}
|
||||
|
||||
@@ -57,6 +57,10 @@ public class JvmStdlibNames {
|
||||
public static final int FLAG_METHOD_KIND_DELEGATION = 2 << 5;
|
||||
public static final int FLAG_METHOD_KIND_SYNTHESIZED = 3 << 5;
|
||||
|
||||
public static final int FLAG_CLASS_KIND_MASK = 7 << 5;
|
||||
public static final int FLAG_CLASS_KIND_DEFAULT = 0 << 5;
|
||||
public static final int FLAG_CLASS_KIND_OBJECT = 1 << 5;
|
||||
|
||||
public static final JvmClassName JET_CONSTRUCTOR = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetConstructor");
|
||||
|
||||
/**
|
||||
|
||||
+4
@@ -50,6 +50,10 @@ public class JetClassAnnotation extends PsiAnnotationWithFlags {
|
||||
return signature;
|
||||
}
|
||||
|
||||
public int kind() {
|
||||
return flags() & JvmStdlibNames.FLAG_CLASS_KIND_MASK;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JetClassAnnotation get(PsiClass psiClass) {
|
||||
final PsiAnnotation annotation = JavaDescriptorResolver.findAnnotation(psiClass, JvmStdlibNames.JET_CLASS.getFqName().getFqName());
|
||||
|
||||
Reference in New Issue
Block a user