Minor cleanup in FieldOwnerContext
This commit is contained in:
@@ -30,7 +30,7 @@ import org.jetbrains.jet.codegen.bridges.BridgesPackage;
|
|||||||
import org.jetbrains.jet.codegen.context.ClassContext;
|
import org.jetbrains.jet.codegen.context.ClassContext;
|
||||||
import org.jetbrains.jet.codegen.context.ConstructorContext;
|
import org.jetbrains.jet.codegen.context.ConstructorContext;
|
||||||
import org.jetbrains.jet.codegen.context.MethodContext;
|
import org.jetbrains.jet.codegen.context.MethodContext;
|
||||||
import org.jetbrains.jet.codegen.signature.*;
|
import org.jetbrains.jet.codegen.signature.BothSignatureWriter;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.jet.descriptors.serialization.BitEncoding;
|
import org.jetbrains.jet.descriptors.serialization.BitEncoding;
|
||||||
@@ -1034,7 +1034,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
|
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
|
||||||
PropertyDescriptor property = info.descriptor;
|
PropertyDescriptor property = info.descriptor;
|
||||||
|
|
||||||
FieldVisitor fv = v.newField(null, ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property),
|
FieldVisitor fv = v.newField(null, ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false),
|
||||||
typeMapper.mapType(property).getDescriptor(), null, info.defaultValue);
|
typeMapper.mapType(property).getDescriptor(), null, info.defaultValue);
|
||||||
|
|
||||||
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property);
|
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property);
|
||||||
@@ -1177,7 +1177,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
iv.load(codegen.myFrameMap.getIndex(descriptor), type);
|
iv.load(codegen.myFrameMap.getIndex(descriptor), type);
|
||||||
PropertyDescriptor propertyDescriptor = bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter);
|
PropertyDescriptor propertyDescriptor = bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter);
|
||||||
assert propertyDescriptor != null : "Property descriptor is not found for primary constructor parameter: " + parameter;
|
assert propertyDescriptor != null : "Property descriptor is not found for primary constructor parameter: " + parameter;
|
||||||
iv.putfield(classAsmType.getInternalName(), context.getFieldName(propertyDescriptor), type.getDescriptor());
|
iv.putfield(classAsmType.getInternalName(), context.getFieldName(propertyDescriptor, false), type.getDescriptor());
|
||||||
}
|
}
|
||||||
curParam++;
|
curParam++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,16 +20,17 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.codegen.OwnerKind;
|
import org.jetbrains.jet.codegen.OwnerKind;
|
||||||
import org.jetbrains.jet.codegen.binding.MutableClosure;
|
import org.jetbrains.jet.codegen.binding.MutableClosure;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends CodegenContext<T> {
|
public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends CodegenContext<T> {
|
||||||
|
|
||||||
//default property name -> map<property descriptor -> bytecode name>
|
//default property name -> map<property descriptor -> bytecode name>
|
||||||
private Map<String, Map<PropertyDescriptor, String>> fieldNames = new HashMap<String, Map<PropertyDescriptor, String>>();
|
private final Map<String, Map<PropertyDescriptor, String>> fieldNames = new HashMap<String, Map<PropertyDescriptor, String>>();
|
||||||
|
|
||||||
public FieldOwnerContext(
|
public FieldOwnerContext(
|
||||||
@NotNull T contextDescriptor,
|
@NotNull T contextDescriptor,
|
||||||
@@ -42,19 +43,16 @@ public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends
|
|||||||
super(contextDescriptor, contextKind, parentContext, closure, thisDescriptor, expressionCodegen);
|
super(contextDescriptor, contextKind, parentContext, closure, thisDescriptor, expressionCodegen);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFieldName(PropertyDescriptor descriptor) {
|
@NotNull
|
||||||
return getFieldName(descriptor, false);
|
public String getFieldName(@NotNull PropertyDescriptor descriptor, boolean isDelegated) {
|
||||||
}
|
assert descriptor.getKind().isReal() : "Only declared properties can have backing fields: " + descriptor;
|
||||||
|
|
||||||
public String getFieldName(PropertyDescriptor descriptor, boolean isDelegated) {
|
|
||||||
assert descriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
|
||||||
boolean isExtension = descriptor.getReceiverParameter() != null;
|
boolean isExtension = descriptor.getReceiverParameter() != null;
|
||||||
|
|
||||||
return getFieldName(descriptor, isDelegated, isExtension);
|
return getFieldName(descriptor.getOriginal(), isDelegated, isExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getFieldName(PropertyDescriptor descriptor, boolean isDelegated, boolean isExtension) {
|
@NotNull
|
||||||
descriptor = descriptor.getOriginal();
|
private String getFieldName(@NotNull PropertyDescriptor descriptor, boolean isDelegated, boolean isExtension) {
|
||||||
String defaultPropertyName = JvmAbi.getDefaultPropertyName(descriptor.getName(), isDelegated, isExtension);
|
String defaultPropertyName = JvmAbi.getDefaultPropertyName(descriptor.getName(), isDelegated, isExtension);
|
||||||
|
|
||||||
Map<PropertyDescriptor, String> descriptor2Name = fieldNames.get(defaultPropertyName);
|
Map<PropertyDescriptor, String> descriptor2Name = fieldNames.get(defaultPropertyName);
|
||||||
@@ -64,10 +62,10 @@ public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
String actualName = descriptor2Name.get(descriptor);
|
String actualName = descriptor2Name.get(descriptor);
|
||||||
if (actualName == null) {
|
if (actualName != null) return actualName;
|
||||||
actualName = descriptor2Name.isEmpty() ? defaultPropertyName : defaultPropertyName + "$" + descriptor2Name.size();
|
|
||||||
descriptor2Name.put(descriptor, actualName);
|
String newName = descriptor2Name.isEmpty() ? defaultPropertyName : defaultPropertyName + "$" + descriptor2Name.size();
|
||||||
}
|
descriptor2Name.put(descriptor, newName);
|
||||||
return actualName;
|
return newName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user