blob: 53a7cd8a88b4901adc3993a0659602303841e4ed [file] [log] [blame]
Mut-final static field: com/android/dx/rop/type/Type#BOOLEAN
Mut-final static field: com/android/dx/rop/type/Type#BYTE
Mut-final static field: com/android/dx/rop/type/Type#CHAR
Mut-final static field: com/android/dx/rop/type/Type#DOUBLE
Mut-final static field: com/android/dx/rop/type/Type#FLOAT
Mut-final static field: com/android/dx/rop/type/Type#INT
Mut-final static field: com/android/dx/rop/type/Type#LONG
Mut-final static field: com/android/dx/rop/type/Type#SHORT
Mut-final static field: com/android/dx/rop/type/Type#VOID
Mut-final static field: com/android/dx/rop/type/Type#KNOWN_NULL
Mut-final static field: com/android/dx/rop/type/Type#RETURN_ADDRESS
Mut-final static field: com/android/dx/rop/type/Type#ANNOTATION
Mut-final static field: com/android/dx/rop/type/Type#CLASS
Mut-final static field: com/android/dx/rop/type/Type#CLONEABLE
Mut-final static field: com/android/dx/rop/type/Type#OBJECT
Mut-final static field: com/android/dx/rop/type/Type#SERIALIZABLE
Mut-final static field: com/android/dx/rop/type/Type#STRING
Mut-final static field: com/android/dx/rop/type/Type#THROWABLE
Mut-final static field: com/android/dx/rop/type/Type#BOOLEAN_CLASS
Mut-final static field: com/android/dx/rop/type/Type#BYTE_CLASS
Mut-final static field: com/android/dx/rop/type/Type#CHARACTER_CLASS
Mut-final static field: com/android/dx/rop/type/Type#DOUBLE_CLASS
Mut-final static field: com/android/dx/rop/type/Type#FLOAT_CLASS
Mut-final static field: com/android/dx/rop/type/Type#INTEGER_CLASS
Mut-final static field: com/android/dx/rop/type/Type#LONG_CLASS
Mut-final static field: com/android/dx/rop/type/Type#SHORT_CLASS
Mut-final static field: com/android/dx/rop/type/Type#VOID_CLASS
Mut-final static field: com/android/dx/rop/type/Type#BOOLEAN_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#BYTE_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#CHAR_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#DOUBLE_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#FLOAT_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#INT_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#LONG_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#OBJECT_ARRAY
Mut-final static field: com/android/dx/rop/type/Type#SHORT_ARRAY
See full rationale.
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONG
Mut-final static field: com/android/dx/rop/type/StdTypeList#FLOAT
Mut-final static field: com/android/dx/rop/type/StdTypeList#DOUBLE
Mut-final static field: com/android/dx/rop/type/StdTypeList#OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#RETURN_ADDRESS
Mut-final static field: com/android/dx/rop/type/StdTypeList#THROWABLE
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONG_LONG
Mut-final static field: com/android/dx/rop/type/StdTypeList#FLOAT_FLOAT
Mut-final static field: com/android/dx/rop/type/StdTypeList#DOUBLE_DOUBLE
Mut-final static field: com/android/dx/rop/type/StdTypeList#OBJECT_OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONG_OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#FLOAT_OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#DOUBLE_OBJECT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONG_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INTARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONGARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#FLOATARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#DOUBLEARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#OBJECTARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#BOOLEANARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#BYTEARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#CHARARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#SHORTARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_INTARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#LONG_LONGARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#FLOAT_FLOATARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#DOUBLE_DOUBLEARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#OBJECT_OBJECTARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_BOOLEANARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_BYTEARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_CHARARR_INT
Mut-final static field: com/android/dx/rop/type/StdTypeList#INT_SHORTARR_INT
See full rationale.
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_ArithmeticException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_ArrayIndexOutOfBoundsException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_ArrayStoreException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_ClassCastException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_Error
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_IllegalMonitorStateException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_NegativeArraySizeException
Mut-final static field: com/android/dx/rop/code/Exceptions#TYPE_NullPointerException
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_ArithmeticException
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_ClassCastException
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_NegativeArraySizeException
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_NullPointerException
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_Null_ArrayIndexOutOfBounds
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_Null_ArrayIndex_ArrayStore
Mut-final static field: com/android/dx/rop/code/Exceptions#LIST_Error_Null_IllegalMonitorStateException
See full rationale.
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#ANNOTATION_DEFAULT_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#ENCLOSING_CLASS_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#ENCLOSING_METHOD_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#INNER_CLASS_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#MEMBER_CLASSES_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#SIGNATURE_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#THROWS_TYPE
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#ACCESS_FLAGS_STRING
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#NAME_STRING
Mut-final static field: com/android/dx/dex/file/AnnotationUtils#VALUE_STRING
See full rationale.
Mut-final static field: com/android/dx/rop/code/Rops#NOP
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_INT
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_LONG
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_RETURN_ADDRESS
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_PARAM_INT
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_PARAM_LONG
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_PARAM_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_PARAM_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#MOVE_PARAM_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#CONST_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#CONST_OBJECT_NOTHROW
Mut-final static field: com/android/dx/rop/code/Rops#GOTO
Mut-final static field: com/android/dx/rop/code/Rops#IF_EQZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_NEZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_LTZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_GEZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_LEZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_GTZ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_EQZ_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#IF_NEZ_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#IF_EQ_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_NE_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_LT_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_GE_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_LE_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_GT_INT
Mut-final static field: com/android/dx/rop/code/Rops#IF_EQ_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#IF_NE_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#SWITCH
Mut-final static field: com/android/dx/rop/code/Rops#ADD_INT
Mut-final static field: com/android/dx/rop/code/Rops#ADD_LONG
Mut-final static field: com/android/dx/rop/code/Rops#ADD_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#ADD_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#SUB_INT
Mut-final static field: com/android/dx/rop/code/Rops#SUB_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SUB_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#SUB_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#MUL_INT
Mut-final static field: com/android/dx/rop/code/Rops#MUL_LONG
Mut-final static field: com/android/dx/rop/code/Rops#MUL_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#MUL_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#DIV_INT
Mut-final static field: com/android/dx/rop/code/Rops#DIV_LONG
Mut-final static field: com/android/dx/rop/code/Rops#DIV_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#DIV_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#REM_INT
Mut-final static field: com/android/dx/rop/code/Rops#REM_LONG
Mut-final static field: com/android/dx/rop/code/Rops#REM_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#REM_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#NEG_INT
Mut-final static field: com/android/dx/rop/code/Rops#NEG_LONG
Mut-final static field: com/android/dx/rop/code/Rops#NEG_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#NEG_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#AND_INT
Mut-final static field: com/android/dx/rop/code/Rops#AND_LONG
Mut-final static field: com/android/dx/rop/code/Rops#OR_INT
Mut-final static field: com/android/dx/rop/code/Rops#OR_LONG
Mut-final static field: com/android/dx/rop/code/Rops#XOR_INT
Mut-final static field: com/android/dx/rop/code/Rops#XOR_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SHL_INT
Mut-final static field: com/android/dx/rop/code/Rops#SHL_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SHR_INT
Mut-final static field: com/android/dx/rop/code/Rops#SHR_LONG
Mut-final static field: com/android/dx/rop/code/Rops#USHR_INT
Mut-final static field: com/android/dx/rop/code/Rops#USHR_LONG
Mut-final static field: com/android/dx/rop/code/Rops#NOT_INT
Mut-final static field: com/android/dx/rop/code/Rops#NOT_LONG
Mut-final static field: com/android/dx/rop/code/Rops#ADD_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#ADD_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#ADD_CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#ADD_CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#SUB_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#SUB_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SUB_CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#SUB_CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#MUL_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#MUL_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#MUL_CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#MUL_CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#DIV_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#DIV_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#DIV_CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#DIV_CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#REM_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#REM_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#REM_CONST_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#REM_CONST_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#AND_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#AND_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#OR_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#OR_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#XOR_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#XOR_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SHL_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#SHL_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#SHR_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#SHR_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#USHR_CONST_INT
Mut-final static field: com/android/dx/rop/code/Rops#USHR_CONST_LONG
Mut-final static field: com/android/dx/rop/code/Rops#CMPL_LONG
Mut-final static field: com/android/dx/rop/code/Rops#CMPL_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#CMPL_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#CMPG_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#CMPG_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#CONV_L2I
Mut-final static field: com/android/dx/rop/code/Rops#CONV_F2I
Mut-final static field: com/android/dx/rop/code/Rops#CONV_D2I
Mut-final static field: com/android/dx/rop/code/Rops#CONV_I2L
Mut-final static field: com/android/dx/rop/code/Rops#CONV_F2L
Mut-final static field: com/android/dx/rop/code/Rops#CONV_D2L
Mut-final static field: com/android/dx/rop/code/Rops#CONV_I2F
Mut-final static field: com/android/dx/rop/code/Rops#CONV_L2F
Mut-final static field: com/android/dx/rop/code/Rops#CONV_D2F
Mut-final static field: com/android/dx/rop/code/Rops#CONV_I2D
Mut-final static field: com/android/dx/rop/code/Rops#CONV_L2D
Mut-final static field: com/android/dx/rop/code/Rops#CONV_F2D
Mut-final static field: com/android/dx/rop/code/Rops#TO_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#TO_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#TO_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_VOID
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_INT
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_LONG
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#RETURN_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#ARRAY_LENGTH
Mut-final static field: com/android/dx/rop/code/Rops#THROW
Mut-final static field: com/android/dx/rop/code/Rops#MONITOR_ENTER
Mut-final static field: com/android/dx/rop/code/Rops#MONITOR_EXIT
Mut-final static field: com/android/dx/rop/code/Rops#AGET_INT
Mut-final static field: com/android/dx/rop/code/Rops#AGET_LONG
Mut-final static field: com/android/dx/rop/code/Rops#AGET_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#AGET_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#AGET_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#AGET_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#AGET_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#AGET_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#AGET_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#APUT_INT
Mut-final static field: com/android/dx/rop/code/Rops#APUT_LONG
Mut-final static field: com/android/dx/rop/code/Rops#APUT_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#APUT_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#APUT_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#APUT_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#APUT_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#APUT_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#APUT_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#NEW_INSTANCE
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_INT
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_LONG
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#NEW_ARRAY_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#CHECK_CAST
Mut-final static field: com/android/dx/rop/code/Rops#INSTANCE_OF
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_INT
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_LONG
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#GET_FIELD_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_INT
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_LONG
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#GET_STATIC_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_INT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_LONG
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#PUT_FIELD_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_INT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_LONG
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_BOOLEAN
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_BYTE
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_CHAR
Mut-final static field: com/android/dx/rop/code/Rops#PUT_STATIC_SHORT
Mut-final static field: com/android/dx/rop/code/Rops#MARK_LOCAL_INT
Mut-final static field: com/android/dx/rop/code/Rops#MARK_LOCAL_LONG
Mut-final static field: com/android/dx/rop/code/Rops#MARK_LOCAL_FLOAT
Mut-final static field: com/android/dx/rop/code/Rops#MARK_LOCAL_DOUBLE
Mut-final static field: com/android/dx/rop/code/Rops#MARK_LOCAL_OBJECT
Mut-final static field: com/android/dx/rop/code/Rops#FILL_ARRAY_DATA
See full rationale.
Mut-final static field: com/android/dx/rop/cst/CstType#OBJECT
Mut-final static field: com/android/dx/rop/cst/CstType#BOOLEAN
Mut-final static field: com/android/dx/rop/cst/CstType#BYTE
Mut-final static field: com/android/dx/rop/cst/CstType#CHARACTER
Mut-final static field: com/android/dx/rop/cst/CstType#DOUBLE
Mut-final static field: com/android/dx/rop/cst/CstType#FLOAT
Mut-final static field: com/android/dx/rop/cst/CstType#LONG
Mut-final static field: com/android/dx/rop/cst/CstType#INTEGER
Mut-final static field: com/android/dx/rop/cst/CstType#SHORT
Mut-final static field: com/android/dx/rop/cst/CstType#VOID
Mut-final static field: com/android/dx/rop/cst/CstType#BOOLEAN_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#BYTE_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#CHAR_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#DOUBLE_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#FLOAT_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#LONG_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#INT_ARRAY
Mut-final static field: com/android/dx/rop/cst/CstType#SHORT_ARRAY
See full rationale.
Mut-final static field: com/android/dx/cf/code/RopperMachine#ARRAY_REFLECT_TYPE
Mut-final static field: com/android/dx/cf/code/RopperMachine#MULTIANEWARRAY_METHOD
See full rationale.
Mut-final static field: com/android/dx/rop/code/RegisterSpec#theInterns
Mut-final static field: com/android/dx/rop/code/RegisterSpec#theInterningItem
Mut-final static field: com/android/dx/rop/cst/CstType#interns
Mut-final static field: com/android/dx/rop/type/Prototype#internTable
Mut-final static field: com/android/dx/rop/type/Type#internTable
See full rationale.
Mut-final static field: com/android/dex/TypeList#EMPTY
This class has two final fields, and in this instance they are
a null reference and a zero-length array, which are both immutable.
Mut-final static field: com/android/dx/rop/code/RegisterSpecSet#EMPTY
Mut-final static field: com/android/dx/rop/annotation/Annotations#EMPTY
Mut-final static field: com/android/dx/util/IntList#EMPTY
These classes uses MutabilityControl to make instances immutable, and the
EMPTY instances are made immutable during static initialization.
(I had to modify RegisterSpecSet to call setImmutable and add a few calls
to throwIfImmutable in RegisterSpecSet and IntList.)
Mut-final static field: com/android/dx/cf/code/ByteCatchList#EMPTY
Mut-final static field: com/android/dx/cf/code/LineNumberList#EMPTY
Mut-final static field: com/android/dx/cf/code/LocalVariableList#EMPTY
Mut-final static field: com/android/dx/dex/code/CatchHandlerList#EMPTY
Mut-final static field: com/android/dx/dex/code/CatchTable#EMPTY
Mut-final static field: com/android/dx/dex/code/LocalList#EMPTY
Mut-final static field: com/android/dx/dex/code/PositionList#EMPTY
Mut-final static field: com/android/dx/rop/annotation/AnnotationsList#EMPTY
Mut-final static field: com/android/dx/rop/code/RegisterSpecList#EMPTY
Mut-final static field: com/android/dx/rop/type/StdTypeList#EMPTY
These are all empty instances of FixedSizeList. FixSizeList does not
allow itself to grow, so every zero-length instance is immutable.
I also checked that all of these subclasses have no non-static fields
of their own (which could be checked by the analyzer if we want)
and that they are initialized with a zero size that is passed to the
super constructor (which would be insane if they were not).
Mut-final static field: org/junit/internal/runners/rules/RuleFieldValidator#$VALUES
Mut-final static field: org/junit/runners/MethodSorters#$VALUES
Mut-final static field: com/android/dx/command/annotool/Main$PrintType#$VALUES
Mut-final static field: com/android/dx/dex/code/LocalList$Disposition#$VALUES
Mut-final static field: com/android/dx/dex/file/ItemType#$VALUES
Mut-final static field: com/android/dx/dex/file/MixedItemSection$SortType#$VALUES
Mut-final static field: com/android/dx/io/IndexType#$VALUES
Mut-final static field: com/android/dx/io/instructions/InstructionCodec#$VALUES
Mut-final static field: com/android/dx/merge/CollisionPolicy#$VALUES
Mut-final static field: com/android/dx/rop/annotation/AnnotationVisibility#$VALUES
Mut-final static field: com/android/dx/ssa/EscapeAnalysis$EscapeState#$VALUES
Mut-final static field: com/android/dx/ssa/Optimizer$OptionalStep#$VALUES
Mut-final static field: com/android/dx/ssa/back/LivenessAnalyzer$NextFunction#$VALUES
These are implementation details of Enum types,
which can't actually be mutated.
Mut-final static field: com/android/dx/command/annotool/AnnotationLister$2#$SwitchMap$com$android$dx$command$annotool$Main$PrintType
Mut-final static field: com/android/dx/dex/file/AnnotationItem$1#$SwitchMap$com$android$dx$rop$annotation$AnnotationVisibility
Mut-final static field: com/android/dx/dex/file/MixedItemSection$2#$SwitchMap$com$android$dx$dex$file$MixedItemSection$SortType
Mut-final static field: com/android/dx/io/CodeReader$1#$SwitchMap$com$android$dx$io$IndexType
Mut-final static field: com/android/dx/ssa/back/LivenessAnalyzer$1#$SwitchMap$com$android$dx$ssa$back$LivenessAnalyzer$NextFunction
These are switch tables, which can't actually be mutated.
Mut-final static field: com/android/dx/cf/code/ByteOps#OPCODE_INFO
Mut-final static field: com/android/dx/cf/code/ByteOps#OPCODE_NAMES
Mut-final static field: com/android/dx/command/dexer/Main#JAVAX_CORE
Mut-final static field: com/android/dx/dex/code/Dops#DOPS
Mut-final static field: com/android/dx/io/OpcodeInfo#INFO
Private final arrays that are initialized statically, never mutated,
and have immutable values.
(OPCODE_NAMES is partially lazily initialized, but that's okay.)
Mut-final static field: com/android/dx/dex/code/RopToDop#MAP
Initialized statically and never mutated. The value type (Dop) was
identified as immutable by the analyzer (which is why the static final Dop
fields in Dops are not warnings). See the full rationale for why I believe
they key type (Rop) is safe to use in a static context. (Note that all of
the actual keys here are static fields in Rops.)
Mut-final static field: com/android/dx/rop/cst/CstInteger#cache
A private array whose members are immutable. This array actually is
mutated at runtime, but see CstInteger.make()'s internal comment about
synchronization. I believe that same reasoning makes this field
in-process-safe.
Mut-final static field: com/android/dx/rop/code/SourcePosition#NO_INFO
This is flagged because its (final) CstString field is considered a mutable
type, but this instance has a null reference for that field.
Mut-final static field: com/android/dx/rop/cst/CstString#EMPTY_STRING
Mut-final static field: com/android/dx/rop/cst/CstNat#PRIMITIVE_TYPE_NAT
These are flagged because CstString is technically mutable,
because ByteArray is technically mutable. But ByteArray doesn't
actually allow itself to be mutated, so these are safe.
(And if anything actually mutated them, it would be insanity.)
(Note that a mutable byte[] can be passed to the constructor of
ByteArray, which can cause it to be mutated behind its back,
but all of these instances use the CstString(String) constructor,
which doesn't permit this.)
Mut-final static field: com/android/dex/Dex#EMPTY_SHORT_ARRAY
This final field is statically initialized to a zero-length array,
which is immutable.
Mut-final static field: com/android/dx/cf/direct/ClassPathOpener#acceptAll
Mut-final static field: com/android/dx/dex/file/MixedItemSection#TYPE_SORTER
Mut-final static field: com/android/dx/merge/SortableType#NULLS_LAST_ORDER
Mut-final static field: com/android/dx/ssa/SsaBasicBlock#LABEL_COMPARATOR
These fields hold instance of empty (mostly anonymous) classes
that implement functional interfaces (like Comparator). They are flagged
because the declared type of the fields is a generic interface.
It might be worth extending the analyzer to notice the classes they
are assigned from.
Non-final static field: com/android/dx/dex/code/InsnFormat#ALLOW_EXTENDED_OPCODES
Non-final static field: com/android/dx/ssa/ConstCollector#COLLECT_STRINGS
Non-final static field: com/android/dx/ssa/ConstCollector#COLLECT_ONE_LOCAL
Non-final static field: com/android/dx/rop/code/RegisterSpec#DISABLE_INTERNING
Non-final static field: com/android/dx/ssa/DomFront#DEBUG
Private boolean fields that are never assigned. The analyzer could be
improved to automatically detect these. (Which would probably be a good
idea if we're getting ready to upgrade, so we don't have to hand-check them
all again.)
Mut-final static field: com/android/dx/command/dexer/Main#CREATED_BY
Effectively immutable. A cached Jar attribute.
RegisterSpec comparison: com/android/dx/rop/code/Insn.equalsHandleNulls
RegisterSpec comparison: com/android/dx/ssa/SsaRenamer.equalsHandlesNulls
These both double-check the result with .equals()
RegisterSpec comparison: com/android/dx/cf/code/Merger.mergeLocals
RegisterSpec comparison: com/android/dx/cf/code/Merger.mergeStack
These both call mergeType, then compare the result to the first argument.
mergeType always returns its first argument, null, or a Type object.
None of these allow two different RegisterSpecs to be compared with ==.
RegisterSpec comparison: com/android/dx/rop/code/RegisterSpec.intersect
The first one just compares this and other as a quick check.
I added a check for .equals() below to avoid allocating a new object
when a RegisterSpec is intersected with an equivalent one.
RegisterSpec comparison: com/android/dx/rop/code/RegisterSpec.intersect
The second one is comparing resultTypeBearer to this.type.
resultTypeBearer was just assigned to either this.type
(in which case both the old and new code would return true)
or a Type object (in which case both would return false),
so there is no change in behavior here.
RegisterSpec comparison: com/android/dx/rop/code/RegisterSpecSet.equals
This is double-checked by calling .equals()
RegisterSpec comparison: com/android/dx/rop/code/RegisterSpecSet.intersect
This appears to be an "optimization" to avoid an array assignment,
but assigning an equivalent RegisterSpec should be benign.
RegisterSpec comparison: com/android/dx/ssa/PhiInsn.mapSourceRegisters
A false positive here just forces an unnecessary call to onSourceChanged(),
but I added a quick return there if the two RegisterSpecs have the same
register.