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.ConstructorContext;
|
||||
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.JetTypeMapper;
|
||||
import org.jetbrains.jet.descriptors.serialization.BitEncoding;
|
||||
@@ -1034,7 +1034,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
|
||||
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);
|
||||
|
||||
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property);
|
||||
@@ -1177,7 +1177,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
iv.load(codegen.myFrameMap.getIndex(descriptor), type);
|
||||
PropertyDescriptor propertyDescriptor = bindingContext.get(BindingContext.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++;
|
||||
}
|
||||
|
||||
@@ -20,16 +20,17 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.codegen.OwnerKind;
|
||||
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 java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends CodegenContext<T> {
|
||||
|
||||
//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(
|
||||
@NotNull T contextDescriptor,
|
||||
@@ -42,19 +43,16 @@ public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends
|
||||
super(contextDescriptor, contextKind, parentContext, closure, thisDescriptor, expressionCodegen);
|
||||
}
|
||||
|
||||
public String getFieldName(PropertyDescriptor descriptor) {
|
||||
return getFieldName(descriptor, false);
|
||||
}
|
||||
|
||||
public String getFieldName(PropertyDescriptor descriptor, boolean isDelegated) {
|
||||
assert descriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
||||
@NotNull
|
||||
public String getFieldName(@NotNull PropertyDescriptor descriptor, boolean isDelegated) {
|
||||
assert descriptor.getKind().isReal() : "Only declared properties can have backing fields: " + descriptor;
|
||||
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) {
|
||||
descriptor = descriptor.getOriginal();
|
||||
@NotNull
|
||||
private String getFieldName(@NotNull PropertyDescriptor descriptor, boolean isDelegated, boolean isExtension) {
|
||||
String defaultPropertyName = JvmAbi.getDefaultPropertyName(descriptor.getName(), isDelegated, isExtension);
|
||||
|
||||
Map<PropertyDescriptor, String> descriptor2Name = fieldNames.get(defaultPropertyName);
|
||||
@@ -64,10 +62,10 @@ public abstract class FieldOwnerContext<T extends DeclarationDescriptor> extends
|
||||
}
|
||||
|
||||
String actualName = descriptor2Name.get(descriptor);
|
||||
if (actualName == null) {
|
||||
actualName = descriptor2Name.isEmpty() ? defaultPropertyName : defaultPropertyName + "$" + descriptor2Name.size();
|
||||
descriptor2Name.put(descriptor, actualName);
|
||||
}
|
||||
return actualName;
|
||||
if (actualName != null) return actualName;
|
||||
|
||||
String newName = descriptor2Name.isEmpty() ? defaultPropertyName : defaultPropertyName + "$" + descriptor2Name.size();
|
||||
descriptor2Name.put(descriptor, newName);
|
||||
return newName;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user