diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index d23a48a42f6..0e984eef72a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -165,9 +165,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor); - if (signature.getKotlinGenericSignature() != null) { + if (signature.getKotlinGenericSignature() != null || descriptor.getVisibility() != Visibilities.PUBLIC) { AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, JvmStdlibNames.JET_CLASS.getDescriptor(), true); annotationVisitor.visit(JvmStdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature()); + if (descriptor.getVisibility() == Visibilities.INTERNAL) { + annotationVisitor.visit(JvmStdlibNames.JET_CLASS_FLAGS_FIELD, 1 << JvmStdlibNames.FLAG_INTERNAL_BIT); + } + else if (descriptor.getVisibility() == Visibilities.PRIVATE) { + annotationVisitor.visit(JvmStdlibNames.JET_CLASS_FLAGS_FIELD, 1 << JvmStdlibNames.FLAG_PRIVATE_BIT); + } annotationVisitor.visitEnd(); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetClassAnnotation.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetClassAnnotation.java index dd9600e33f2..bbb73583374 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetClassAnnotation.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetClassAnnotation.java @@ -22,6 +22,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; +import java.util.BitSet; + /** * @author Stepan Koltsov */ @@ -38,6 +40,20 @@ public class JetClassAnnotation extends PsiAnnotationWrapper { } return signature; } + + + private BitSet flags = null; + public BitSet flags() { + if (flags == null) { + int flagsValue = getIntAttribute(JvmStdlibNames.JET_CLASS_FLAGS_FIELD, JvmStdlibNames.FLAGS_DEFAULT_VALUE); + + flags = new BitSet(JvmStdlibNames.FLAGS_BITS); + for (int bit = 0; bit < JvmStdlibNames.FLAGS_BITS; bit++) { + flags.set(bit, (flagsValue & (1 << bit)) != 0); + } + } + return flags; + } @NotNull public static JetClassAnnotation get(PsiClass psiClass) {