Minor cleanup in FieldOwnerContext

This commit is contained in:
Alexander Udalov
2014-05-22 21:23:28 +04:00
parent 69ef648005
commit 4ec8000121
2 changed files with 18 additions and 20 deletions
@@ -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;
}
}