Refactor EnumEncodedValue to use a field reference

This commit is contained in:
Ben Gruver 2012-11-10 17:36:16 -08:00
parent b76e75c8bc
commit e27e44bee3
4 changed files with 10 additions and 6 deletions

View File

@ -60,7 +60,7 @@ public abstract class EncodedValueAdaptor {
return;
case ValueType.ENUM:
writer.write(".enum ");
writer.write(((EnumEncodedValue)encodedValue).getValue());
ReferenceUtil.writeFieldDescriptor(writer, ((EnumEncodedValue)encodedValue).getValue());
return;
case ValueType.FIELD:
ReferenceUtil.writeFieldDescriptor(writer, ((FieldEncodedValue)encodedValue).getValue());

View File

@ -92,7 +92,8 @@ public abstract class DexBackedEncodedValue {
reader.readSizedSmallUint(valueArg + 1)));
case ValueType.ENUM:
Preconditions.checkValueArg(valueArg, 3);
return new ImmutableEnumEncodedValue(reader.getField(reader.readSizedSmallUint(valueArg + 1)));
return new ImmutableEnumEncodedValue(new DexBackedFieldReference(reader.getDexBuffer(),
reader.readSizedSmallUint(valueArg + 1)));
case ValueType.ARRAY:
Preconditions.checkValueArg(valueArg, 0);
return new DexBackedArrayEncodedValue(reader);

View File

@ -31,8 +31,10 @@
package org.jf.dexlib2.iface.value;
import org.jf.dexlib2.iface.reference.FieldReference;
import javax.annotation.Nonnull;
public interface EnumEncodedValue extends EncodedValue {
@Nonnull String getValue();
@Nonnull FieldReference getValue();
}

View File

@ -32,15 +32,16 @@
package org.jf.dexlib2.immutable.value;
import org.jf.dexlib2.base.value.BaseEnumEncodedValue;
import org.jf.dexlib2.iface.reference.FieldReference;
import org.jf.dexlib2.iface.value.EnumEncodedValue;
import javax.annotation.Nonnull;
public class ImmutableEnumEncodedValue extends BaseEnumEncodedValue
implements ImmutableEncodedValue, EnumEncodedValue {
@Nonnull public final String value;
@Nonnull public final FieldReference value;
public ImmutableEnumEncodedValue(@Nonnull String value) {
public ImmutableEnumEncodedValue(@Nonnull FieldReference value) {
this.value = value;
}
@ -51,5 +52,5 @@ public class ImmutableEnumEncodedValue extends BaseEnumEncodedValue
return new ImmutableEnumEncodedValue(enumEncodedValue.getValue());
}
@Nonnull @Override public String getValue() { return value; }
@Nonnull @Override public FieldReference getValue() { return value; }
}