1 21 package proguard.evaluation.value; 22 23 import proguard.classfile.*; 24 import proguard.classfile.util.ClassUtil; 25 26 31 public class ValueFactory 32 { 33 static final IntegerValue INTEGER_VALUE = new IntegerValue(); 35 static final LongValue LONG_VALUE = new LongValue(); 36 static final FloatValue FLOAT_VALUE = new FloatValue(); 37 static final DoubleValue DOUBLE_VALUE = new DoubleValue(); 38 39 static final ReferenceValue REFERENCE_VALUE_NULL = new ReferenceValue(null, null, true); 40 static final ReferenceValue REFERENCE_VALUE_JAVA_LANG_OBJECT_MAYBE_NULL = new ReferenceValue(ClassConstants.INTERNAL_NAME_JAVA_LANG_OBJECT, null, true); 41 static final ReferenceValue REFERENCE_VALUE_JAVA_LANG_OBJECT_NOT_NULL = new ReferenceValue(ClassConstants.INTERNAL_NAME_JAVA_LANG_OBJECT, null, false); 42 43 44 49 public Value createValue(String type, Clazz referencedClass, boolean mayBeNull) 50 { 51 switch (type.charAt(0)) 52 { 53 case ClassConstants.INTERNAL_TYPE_VOID: return null; 54 case ClassConstants.INTERNAL_TYPE_BOOLEAN: 55 case ClassConstants.INTERNAL_TYPE_BYTE: 56 case ClassConstants.INTERNAL_TYPE_CHAR: 57 case ClassConstants.INTERNAL_TYPE_SHORT: 58 case ClassConstants.INTERNAL_TYPE_INT: return INTEGER_VALUE; 59 case ClassConstants.INTERNAL_TYPE_LONG: return LONG_VALUE; 60 case ClassConstants.INTERNAL_TYPE_FLOAT: return FLOAT_VALUE; 61 case ClassConstants.INTERNAL_TYPE_DOUBLE: return DOUBLE_VALUE; 62 default: return createReferenceValue(ClassUtil.isInternalArrayType(type) ? 63 type : 64 ClassUtil.internalClassNameFromClassType(type), 65 referencedClass, 66 mayBeNull); 67 } 68 } 69 70 73 public IntegerValue createIntegerValue() 74 { 75 return INTEGER_VALUE; 76 } 77 78 81 public IntegerValue createIntegerValue(int value) 82 { 83 return createIntegerValue(); 84 } 85 86 87 90 public LongValue createLongValue() 91 { 92 return LONG_VALUE; 93 } 94 95 98 public LongValue createLongValue(long value) 99 { 100 return createLongValue(); 101 } 102 103 104 107 public FloatValue createFloatValue() 108 { 109 return FLOAT_VALUE; 110 } 111 112 115 public FloatValue createFloatValue(float value) 116 { 117 return createFloatValue(); 118 } 119 120 121 124 public DoubleValue createDoubleValue() 125 { 126 return DOUBLE_VALUE; 127 } 128 129 132 public DoubleValue createDoubleValue(double value) 133 { 134 return createDoubleValue(); 135 } 136 137 138 141 public ReferenceValue createReferenceValueNull() 142 { 143 return REFERENCE_VALUE_NULL; 144 } 145 146 147 152 public ReferenceValue createReferenceValue(String type, 153 Clazz referencedClass, 154 boolean mayBeNull) 155 { 156 return type == null ? REFERENCE_VALUE_NULL : 157 !type.equals(ClassConstants.INTERNAL_NAME_JAVA_LANG_OBJECT) ? new ReferenceValue(type, referencedClass, mayBeNull) : 158 mayBeNull ? REFERENCE_VALUE_JAVA_LANG_OBJECT_MAYBE_NULL : 159 REFERENCE_VALUE_JAVA_LANG_OBJECT_NOT_NULL; 160 } 161 162 163 168 public ReferenceValue createArrayReferenceValue(String type, 169 Clazz referencedClass, 170 IntegerValue arrayLength) 171 { 172 return createArrayReferenceValue(type, 173 referencedClass, 174 arrayLength, 175 createValue(type, referencedClass, false)); 176 } 177 178 179 184 public ReferenceValue createArrayReferenceValue(String type, 185 Clazz referencedClass, 186 IntegerValue arrayLength, 187 Value elementValue) 188 { 189 return createReferenceValue(ClassConstants.INTERNAL_TYPE_ARRAY + type, 190 referencedClass, 191 false); 192 } 193 } 194 | Popular Tags |