Support updated object hierarchy in JVM codegen
This commit is contained in:
@@ -1643,9 +1643,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (descriptor instanceof VariableDescriptorForObject) {
|
if (descriptor instanceof VariableDescriptorForObject) {
|
||||||
VariableDescriptorForObject variableDescriptor = (VariableDescriptorForObject) descriptor;
|
return genObjectClassInstance((VariableDescriptorForObject) descriptor);
|
||||||
ClassDescriptor objectClassDescriptor = variableDescriptor.getObjectClass();
|
|
||||||
return genObjectClassInstance(variableDescriptor, objectClassDescriptor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = lookupLocalIndex(descriptor);
|
int index = lookupLocalIndex(descriptor);
|
||||||
@@ -1674,7 +1672,11 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (descriptor instanceof ClassDescriptor) {
|
if (descriptor instanceof ClassDescriptor) {
|
||||||
ClassDescriptor classObjectDescriptor = ((ClassDescriptor) descriptor).getClassObjectDescriptor();
|
ClassDescriptor classDescriptor = (ClassDescriptor) descriptor;
|
||||||
|
if (classDescriptor.getKind() == ClassKind.OBJECT) {
|
||||||
|
return StackValue.singleton(classDescriptor, typeMapper);
|
||||||
|
}
|
||||||
|
ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor();
|
||||||
assert classObjectDescriptor != null : "Class object is not found for " + descriptor;
|
assert classObjectDescriptor != null : "Class object is not found for " + descriptor;
|
||||||
return StackValue.singleton(classObjectDescriptor, typeMapper);
|
return StackValue.singleton(classObjectDescriptor, typeMapper);
|
||||||
}
|
}
|
||||||
@@ -1723,7 +1725,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
throw new UnsupportedOperationException("don't know how to generate reference " + descriptor);
|
throw new UnsupportedOperationException("don't know how to generate reference " + descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private StackValue genObjectClassInstance(VariableDescriptor variableDescriptor, ClassDescriptor objectClassDescriptor) {
|
@NotNull
|
||||||
|
private StackValue genObjectClassInstance(@NotNull VariableDescriptorForObject variableDescriptor) {
|
||||||
boolean isEnumEntry = DescriptorUtils.isEnumClassObject(variableDescriptor.getContainingDeclaration());
|
boolean isEnumEntry = DescriptorUtils.isEnumClassObject(variableDescriptor.getContainingDeclaration());
|
||||||
if (isEnumEntry) {
|
if (isEnumEntry) {
|
||||||
ClassDescriptor containing = (ClassDescriptor) variableDescriptor.getContainingDeclaration().getContainingDeclaration();
|
ClassDescriptor containing = (ClassDescriptor) variableDescriptor.getContainingDeclaration().getContainingDeclaration();
|
||||||
@@ -1732,7 +1735,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
return StackValue.field(type, type, variableDescriptor.getName().asString(), true);
|
return StackValue.field(type, type, variableDescriptor.getName().asString(), true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return StackValue.singleton(objectClassDescriptor, typeMapper);
|
return StackValue.singleton(variableDescriptor.getObjectClass(), typeMapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,10 @@ package org.jetbrains.jet.codegen;
|
|||||||
import jet.KotlinPackage;
|
import jet.KotlinPackage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.ConfigurationKind;
|
import org.jetbrains.jet.ConfigurationKind;
|
||||||
import org.jetbrains.jet.descriptors.serialization.*;
|
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.PackageData;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
@@ -59,7 +62,7 @@ public class KotlinPackageAnnotationTest extends CodegenTestCase {
|
|||||||
"data"));
|
"data"));
|
||||||
|
|
||||||
Set<String> callableNames = collectCallableNames(data.getPackageProto().getMemberList(), data.getNameResolver());
|
Set<String> callableNames = collectCallableNames(data.getPackageProto().getMemberList(), data.getNameResolver());
|
||||||
assertSameElements(Arrays.asList("foo", "bar", "C"), callableNames);
|
assertSameElements(callableNames, Arrays.asList("foo", "bar"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user