Always use one of 2 pre-built ImmutableBooleanEncodedValue instances
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java
index 2710f83..e086e6e 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java
@@ -101,7 +101,7 @@
return ImmutableNullEncodedValue.INSTANCE;
case ValueType.BOOLEAN:
Preconditions.checkValueArg(valueArg, 1);
- return new ImmutableBooleanEncodedValue(valueArg == 1);
+ return ImmutableBooleanEncodedValue.forBoolean(valueArg == 1);
default:
throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType);
}
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableBooleanEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableBooleanEncodedValue.java
index 4cd3388..beef8aa 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableBooleanEncodedValue.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableBooleanEncodedValue.java
@@ -35,17 +35,21 @@
import org.jf.dexlib2.iface.value.BooleanEncodedValue;
public class ImmutableBooleanEncodedValue extends BaseBooleanEncodedValue implements ImmutableEncodedValue {
+ public static final ImmutableBooleanEncodedValue TRUE_VALUE = new ImmutableBooleanEncodedValue(true);
+ public static final ImmutableBooleanEncodedValue FALSE_VALUE = new ImmutableBooleanEncodedValue(false);
+
protected final boolean value;
- public ImmutableBooleanEncodedValue(boolean value) {
+ private ImmutableBooleanEncodedValue(boolean value) {
this.value = value;
}
+ public static ImmutableBooleanEncodedValue forBoolean(boolean value) {
+ return value?TRUE_VALUE:FALSE_VALUE;
+ }
+
public static ImmutableBooleanEncodedValue of(BooleanEncodedValue booleanEncodedValue) {
- if (booleanEncodedValue instanceof ImmutableBooleanEncodedValue) {
- return (ImmutableBooleanEncodedValue)booleanEncodedValue;
- }
- return new ImmutableBooleanEncodedValue(booleanEncodedValue.getValue());
+ return forBoolean(booleanEncodedValue.getValue());
}
@Override public boolean getValue() { return value; }
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java
index 3473429..db5c84a 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java
@@ -87,7 +87,7 @@
public static EncodedValue defaultValueForType(String type) {
switch (type.charAt(0)) {
case 'Z':
- return new ImmutableBooleanEncodedValue(false);
+ return ImmutableBooleanEncodedValue.FALSE_VALUE;
case 'B':
return new ImmutableByteEncodedValue((byte)0);
case 'S':