Class objects are statics. I guess top level classes shall be static as well
This commit is contained in:
@@ -8,6 +8,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
|||||||
import org.jetbrains.jet.lang.resolve.OverridingUtil;
|
import org.jetbrains.jet.lang.resolve.OverridingUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.StdlibNames;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeProjection;
|
import org.jetbrains.jet.lang.types.TypeProjection;
|
||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
@@ -48,6 +49,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
boolean isAbstract = false;
|
boolean isAbstract = false;
|
||||||
boolean isInterface = false;
|
boolean isInterface = false;
|
||||||
boolean isFinal = false;
|
boolean isFinal = false;
|
||||||
|
boolean isStatic = false;
|
||||||
|
|
||||||
if(myClass instanceof JetClass) {
|
if(myClass instanceof JetClass) {
|
||||||
JetClass jetClass = (JetClass) myClass;
|
JetClass jetClass = (JetClass) myClass;
|
||||||
if (jetClass.hasModifier(JetTokens.ABSTRACT_KEYWORD))
|
if (jetClass.hasModifier(JetTokens.ABSTRACT_KEYWORD))
|
||||||
@@ -60,6 +63,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
isFinal = true;
|
isFinal = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (myClass.getParent() instanceof JetClassObject) {
|
||||||
|
isStatic = true;
|
||||||
|
}
|
||||||
|
|
||||||
int access = 0;
|
int access = 0;
|
||||||
access |= Opcodes.ACC_PUBLIC;
|
access |= Opcodes.ACC_PUBLIC;
|
||||||
@@ -72,6 +78,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (isFinal) {
|
if (isFinal) {
|
||||||
access |= Opcodes.ACC_FINAL;
|
access |= Opcodes.ACC_FINAL;
|
||||||
}
|
}
|
||||||
|
if (isStatic) {
|
||||||
|
access |= Opcodes.ACC_STATIC;
|
||||||
|
}
|
||||||
v.defineClass(myClass, Opcodes.V1_6,
|
v.defineClass(myClass, Opcodes.V1_6,
|
||||||
access,
|
access,
|
||||||
signature.getName(),
|
signature.getName(),
|
||||||
@@ -81,8 +90,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
);
|
);
|
||||||
v.visitSource(myClass.getContainingFile().getName(), null);
|
v.visitSource(myClass.getContainingFile().getName(), null);
|
||||||
|
|
||||||
if(descriptor.getContainingDeclaration() instanceof ClassDescriptor) {
|
ClassDescriptor container = getContainingClassDescriptor(descriptor);
|
||||||
v.visitOuterClass(typeMapper.mapType(((ClassDescriptor) descriptor.getContainingDeclaration()).getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), null, null);
|
if(container != null) {
|
||||||
|
v.visitOuterClass(typeMapper.mapType(container.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) {
|
if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) {
|
||||||
@@ -92,6 +102,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ClassDescriptor getContainingClassDescriptor(ClassDescriptor decl) {
|
||||||
|
DeclarationDescriptor container = decl.getContainingDeclaration();
|
||||||
|
while (container != null && !(container instanceof NamespaceDescriptor)) {
|
||||||
|
if (container instanceof ClassDescriptor) return (ClassDescriptor) container;
|
||||||
|
container = container.getContainingDeclaration();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private JvmClassSignature signature() {
|
private JvmClassSignature signature() {
|
||||||
List<String> superInterfaces;
|
List<String> superInterfaces;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user