Java Code Examples for org.jf.dexlib2.ValueType#ANNOTATION

The following examples show how to use org.jf.dexlib2.ValueType#ANNOTATION . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: EncodedValueRewriter.java    From HeyGirl with Apache License 2.0 6 votes vote down vote up
@Nonnull @Override public EncodedValue rewrite(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.TYPE:
            return new RewrittenTypeEncodedValue((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return new RewrittenFieldEncodedValue((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return new RewrittenMethodEncodedValue((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return new RewrittenEnumEncodedValue((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return new RewrittenArrayEncodedValue((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return new RewrittenAnnotationEncodedValue((AnnotationEncodedValue)encodedValue);
        default:
            return encodedValue;
    }
}
 
Example 2
Source File: EncodedValueRewriter.java    From ZjDroid with Apache License 2.0 6 votes vote down vote up
@Nonnull @Override public EncodedValue rewrite(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.TYPE:
            return new RewrittenTypeEncodedValue((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return new RewrittenFieldEncodedValue((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return new RewrittenMethodEncodedValue((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return new RewrittenEnumEncodedValue((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return new RewrittenArrayEncodedValue((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return new RewrittenAnnotationEncodedValue((AnnotationEncodedValue)encodedValue);
        default:
            return encodedValue;
    }
}
 
Example 3
Source File: EncodedValueRewriter.java    From zjdroid with Apache License 2.0 6 votes vote down vote up
@Nonnull @Override public EncodedValue rewrite(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.TYPE:
            return new RewrittenTypeEncodedValue((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return new RewrittenFieldEncodedValue((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return new RewrittenMethodEncodedValue((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return new RewrittenEnumEncodedValue((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return new RewrittenArrayEncodedValue((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return new RewrittenAnnotationEncodedValue((AnnotationEncodedValue)encodedValue);
        default:
            return encodedValue;
    }
}
 
Example 4
Source File: ImmutableEncodedValueFactory.java    From ZjDroid with Apache License 2.0 5 votes vote down vote up
@Nonnull
public static ImmutableEncodedValue of(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.BYTE:
            return ImmutableByteEncodedValue.of((ByteEncodedValue)encodedValue);
        case ValueType.SHORT:
            return ImmutableShortEncodedValue.of((ShortEncodedValue)encodedValue);
        case ValueType.CHAR:
            return ImmutableCharEncodedValue.of((CharEncodedValue)encodedValue);
        case ValueType.INT:
            return ImmutableIntEncodedValue.of((IntEncodedValue)encodedValue);
        case ValueType.LONG:
            return ImmutableLongEncodedValue.of((LongEncodedValue)encodedValue);
        case ValueType.FLOAT:
            return ImmutableFloatEncodedValue.of((FloatEncodedValue)encodedValue);
        case ValueType.DOUBLE:
            return ImmutableDoubleEncodedValue.of((DoubleEncodedValue)encodedValue);
        case ValueType.STRING:
            return ImmutableStringEncodedValue.of((StringEncodedValue)encodedValue);
        case ValueType.TYPE:
            return ImmutableTypeEncodedValue.of((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return ImmutableFieldEncodedValue.of((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return ImmutableMethodEncodedValue.of((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return ImmutableEnumEncodedValue.of((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return ImmutableArrayEncodedValue.of((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return ImmutableAnnotationEncodedValue.of((AnnotationEncodedValue)encodedValue);
        case ValueType.NULL:
            return ImmutableNullEncodedValue.INSTANCE;
        case ValueType.BOOLEAN:
            return ImmutableBooleanEncodedValue.of((BooleanEncodedValue)encodedValue);
        default:
            Preconditions.checkArgument(false);
            return null;
    }
}
 
Example 5
Source File: ImmutableEncodedValueFactory.java    From HeyGirl with Apache License 2.0 5 votes vote down vote up
@Nonnull
public static ImmutableEncodedValue of(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.BYTE:
            return ImmutableByteEncodedValue.of((ByteEncodedValue)encodedValue);
        case ValueType.SHORT:
            return ImmutableShortEncodedValue.of((ShortEncodedValue)encodedValue);
        case ValueType.CHAR:
            return ImmutableCharEncodedValue.of((CharEncodedValue)encodedValue);
        case ValueType.INT:
            return ImmutableIntEncodedValue.of((IntEncodedValue)encodedValue);
        case ValueType.LONG:
            return ImmutableLongEncodedValue.of((LongEncodedValue)encodedValue);
        case ValueType.FLOAT:
            return ImmutableFloatEncodedValue.of((FloatEncodedValue)encodedValue);
        case ValueType.DOUBLE:
            return ImmutableDoubleEncodedValue.of((DoubleEncodedValue)encodedValue);
        case ValueType.STRING:
            return ImmutableStringEncodedValue.of((StringEncodedValue)encodedValue);
        case ValueType.TYPE:
            return ImmutableTypeEncodedValue.of((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return ImmutableFieldEncodedValue.of((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return ImmutableMethodEncodedValue.of((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return ImmutableEnumEncodedValue.of((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return ImmutableArrayEncodedValue.of((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return ImmutableAnnotationEncodedValue.of((AnnotationEncodedValue)encodedValue);
        case ValueType.NULL:
            return ImmutableNullEncodedValue.INSTANCE;
        case ValueType.BOOLEAN:
            return ImmutableBooleanEncodedValue.of((BooleanEncodedValue)encodedValue);
        default:
            Preconditions.checkArgument(false);
            return null;
    }
}
 
Example 6
Source File: BuilderContext.java    From zjdroid with Apache License 2.0 5 votes vote down vote up
@Nonnull private BuilderEncodedValue internEncodedValue(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            return internAnnotationEncodedValue((AnnotationEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return internArrayEncodedValue((ArrayEncodedValue)encodedValue);
        case ValueType.BOOLEAN:
            boolean value = ((BooleanEncodedValue)encodedValue).getValue();
            return value?BuilderBooleanEncodedValue.TRUE_VALUE:BuilderBooleanEncodedValue.FALSE_VALUE;
        case ValueType.BYTE:
            return new BuilderByteEncodedValue(((ByteEncodedValue)encodedValue).getValue());
        case ValueType.CHAR:
            return new BuilderCharEncodedValue(((CharEncodedValue)encodedValue).getValue());
        case ValueType.DOUBLE:
            return new BuilderDoubleEncodedValue(((DoubleEncodedValue)encodedValue).getValue());
        case ValueType.ENUM:
            return internEnumEncodedValue((EnumEncodedValue)encodedValue);
        case ValueType.FIELD:
            return internFieldEncodedValue((FieldEncodedValue)encodedValue);
        case ValueType.FLOAT:
            return new BuilderFloatEncodedValue(((FloatEncodedValue)encodedValue).getValue());
        case ValueType.INT:
            return new BuilderIntEncodedValue(((IntEncodedValue)encodedValue).getValue());
        case ValueType.LONG:
            return new BuilderLongEncodedValue(((LongEncodedValue)encodedValue).getValue());
        case ValueType.METHOD:
            return internMethodEncodedValue((MethodEncodedValue)encodedValue);
        case ValueType.NULL:
            return BuilderNullEncodedValue.INSTANCE;
        case ValueType.SHORT:
            return new BuilderShortEncodedValue(((ShortEncodedValue)encodedValue).getValue());
        case ValueType.STRING:
            return internStringEncodedValue((StringEncodedValue)encodedValue);
        case ValueType.TYPE:
            return internTypeEncodedValue((TypeEncodedValue)encodedValue);
        default:
            throw new ExceptionWithContext("Unexpected encoded value type: %d", encodedValue.getValueType());
    }
}
 
Example 7
Source File: ImmutableEncodedValueFactory.java    From zjdroid with Apache License 2.0 5 votes vote down vote up
@Nonnull
public static ImmutableEncodedValue of(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.BYTE:
            return ImmutableByteEncodedValue.of((ByteEncodedValue)encodedValue);
        case ValueType.SHORT:
            return ImmutableShortEncodedValue.of((ShortEncodedValue)encodedValue);
        case ValueType.CHAR:
            return ImmutableCharEncodedValue.of((CharEncodedValue)encodedValue);
        case ValueType.INT:
            return ImmutableIntEncodedValue.of((IntEncodedValue)encodedValue);
        case ValueType.LONG:
            return ImmutableLongEncodedValue.of((LongEncodedValue)encodedValue);
        case ValueType.FLOAT:
            return ImmutableFloatEncodedValue.of((FloatEncodedValue)encodedValue);
        case ValueType.DOUBLE:
            return ImmutableDoubleEncodedValue.of((DoubleEncodedValue)encodedValue);
        case ValueType.STRING:
            return ImmutableStringEncodedValue.of((StringEncodedValue)encodedValue);
        case ValueType.TYPE:
            return ImmutableTypeEncodedValue.of((TypeEncodedValue)encodedValue);
        case ValueType.FIELD:
            return ImmutableFieldEncodedValue.of((FieldEncodedValue)encodedValue);
        case ValueType.METHOD:
            return ImmutableMethodEncodedValue.of((MethodEncodedValue)encodedValue);
        case ValueType.ENUM:
            return ImmutableEnumEncodedValue.of((EnumEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return ImmutableArrayEncodedValue.of((ArrayEncodedValue)encodedValue);
        case ValueType.ANNOTATION:
            return ImmutableAnnotationEncodedValue.of((AnnotationEncodedValue)encodedValue);
        case ValueType.NULL:
            return ImmutableNullEncodedValue.INSTANCE;
        case ValueType.BOOLEAN:
            return ImmutableBooleanEncodedValue.of((BooleanEncodedValue)encodedValue);
        default:
            Preconditions.checkArgument(false);
            return null;
    }
}
 
Example 8
Source File: BuilderContext.java    From HeyGirl with Apache License 2.0 5 votes vote down vote up
@Nonnull private BuilderEncodedValue internEncodedValue(@Nonnull EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            return internAnnotationEncodedValue((AnnotationEncodedValue)encodedValue);
        case ValueType.ARRAY:
            return internArrayEncodedValue((ArrayEncodedValue)encodedValue);
        case ValueType.BOOLEAN:
            boolean value = ((BooleanEncodedValue)encodedValue).getValue();
            return value?BuilderBooleanEncodedValue.TRUE_VALUE:BuilderBooleanEncodedValue.FALSE_VALUE;
        case ValueType.BYTE:
            return new BuilderByteEncodedValue(((ByteEncodedValue)encodedValue).getValue());
        case ValueType.CHAR:
            return new BuilderCharEncodedValue(((CharEncodedValue)encodedValue).getValue());
        case ValueType.DOUBLE:
            return new BuilderDoubleEncodedValue(((DoubleEncodedValue)encodedValue).getValue());
        case ValueType.ENUM:
            return internEnumEncodedValue((EnumEncodedValue)encodedValue);
        case ValueType.FIELD:
            return internFieldEncodedValue((FieldEncodedValue)encodedValue);
        case ValueType.FLOAT:
            return new BuilderFloatEncodedValue(((FloatEncodedValue)encodedValue).getValue());
        case ValueType.INT:
            return new BuilderIntEncodedValue(((IntEncodedValue)encodedValue).getValue());
        case ValueType.LONG:
            return new BuilderLongEncodedValue(((LongEncodedValue)encodedValue).getValue());
        case ValueType.METHOD:
            return internMethodEncodedValue((MethodEncodedValue)encodedValue);
        case ValueType.NULL:
            return BuilderNullEncodedValue.INSTANCE;
        case ValueType.SHORT:
            return new BuilderShortEncodedValue(((ShortEncodedValue)encodedValue).getValue());
        case ValueType.STRING:
            return internStringEncodedValue((StringEncodedValue)encodedValue);
        case ValueType.TYPE:
            return internTypeEncodedValue((TypeEncodedValue)encodedValue);
        default:
            throw new ExceptionWithContext("Unexpected encoded value type: %d", encodedValue.getValueType());
    }
}
 
Example 9
Source File: EncodedValueAdaptor.java    From HeyGirl with Apache License 2.0 4 votes vote down vote up
public static void writeTo(IndentingWriter writer, EncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValueAdaptor.writeTo(writer, (AnnotationEncodedValue)encodedValue);
            return;
        case ValueType.ARRAY:
            ArrayEncodedValueAdaptor.writeTo(writer, (ArrayEncodedValue)encodedValue);
            return;
        case ValueType.BOOLEAN:
            BooleanRenderer.writeTo(writer, ((BooleanEncodedValue)encodedValue).getValue());
            return;
        case ValueType.BYTE:
            ByteRenderer.writeTo(writer, ((ByteEncodedValue)encodedValue).getValue());
            return;
        case ValueType.CHAR:
            CharRenderer.writeTo(writer, ((CharEncodedValue)encodedValue).getValue());
            return;
        case ValueType.DOUBLE:
            DoubleRenderer.writeTo(writer, ((DoubleEncodedValue)encodedValue).getValue());
            return;
        case ValueType.ENUM:
            writer.write(".enum ");
            ReferenceUtil.writeFieldDescriptor(writer, ((EnumEncodedValue)encodedValue).getValue());
            return;
        case ValueType.FIELD:
            ReferenceUtil.writeFieldDescriptor(writer, ((FieldEncodedValue)encodedValue).getValue());
            return;
        case ValueType.FLOAT:
            FloatRenderer.writeTo(writer, ((FloatEncodedValue)encodedValue).getValue());
            return;
        case ValueType.INT:
            IntegerRenderer.writeTo(writer, ((IntEncodedValue)encodedValue).getValue());
            return;
        case ValueType.LONG:
            LongRenderer.writeTo(writer, ((LongEncodedValue)encodedValue).getValue());
            return;
        case ValueType.METHOD:
            ReferenceUtil.writeMethodDescriptor(writer, ((MethodEncodedValue)encodedValue).getValue());
            return;
        case ValueType.NULL:
            writer.write("null");
            return;
        case ValueType.SHORT:
            ShortRenderer.writeTo(writer, ((ShortEncodedValue)encodedValue).getValue());
            return;
        case ValueType.STRING:
            ReferenceFormatter.writeStringReference(writer, ((StringEncodedValue)encodedValue).getValue());
            return;
        case ValueType.TYPE:
            writer.write(((TypeEncodedValue)encodedValue).getValue());
    }
}
 
Example 10
Source File: DexBackedEncodedValue.java    From zjdroid with Apache License 2.0 4 votes vote down vote up
public static void skipFrom(@Nonnull DexReader reader) {
    int startOffset = reader.getOffset();

    try {
        int b = reader.readUbyte();
        int valueType = b & 0x1f;

        switch (valueType) {
            case ValueType.BYTE:
                reader.skipByte();
                break;
            case ValueType.SHORT:
            case ValueType.CHAR:
            case ValueType.INT:
            case ValueType.LONG:
            case ValueType.FLOAT:
            case ValueType.DOUBLE:
            case ValueType.STRING:
            case ValueType.TYPE:
            case ValueType.FIELD:
            case ValueType.METHOD:
            case ValueType.ENUM:
                int valueArg = b >>> 5;
                reader.moveRelative(valueArg+1);
                break;
            case ValueType.ARRAY:
                DexBackedArrayEncodedValue.skipFrom(reader);
                break;
            case ValueType.ANNOTATION:
                DexBackedAnnotationEncodedValue.skipFrom(reader);
                break;
            case ValueType.NULL:
            case ValueType.BOOLEAN:
                break;
            default:
                throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType);
        }
    } catch (Exception ex) {
        throw ExceptionWithContext.withContext(ex, "Error while skipping encoded value at offset 0x%x",
                startOffset);
    }
}
 
Example 11
Source File: DexBackedEncodedValue.java    From zjdroid with Apache License 2.0 4 votes vote down vote up
@Nonnull
public static EncodedValue readFrom(@Nonnull DexReader reader) {
    int startOffset = reader.getOffset();

    try {
        int b = reader.readUbyte();
        int valueType = b & 0x1f;
        int valueArg = b >>> 5;

        switch (valueType) {
            case ValueType.BYTE:
                Preconditions.checkValueArg(valueArg, 0);
                return new ImmutableByteEncodedValue((byte)reader.readByte());
            case ValueType.SHORT:
                Preconditions.checkValueArg(valueArg, 1);
                return new ImmutableShortEncodedValue((short)reader.readSizedInt(valueArg + 1));
            case ValueType.CHAR:
                Preconditions.checkValueArg(valueArg, 1);
                return new ImmutableCharEncodedValue((char)reader.readSizedSmallUint(valueArg + 1));
            case ValueType.INT:
                Preconditions.checkValueArg(valueArg, 3);
                return new ImmutableIntEncodedValue(reader.readSizedInt(valueArg + 1));
            case ValueType.LONG:
                Preconditions.checkValueArg(valueArg, 7);
                return new ImmutableLongEncodedValue(reader.readSizedLong(valueArg + 1));
            case ValueType.FLOAT:
                Preconditions.checkValueArg(valueArg, 3);
                return new ImmutableFloatEncodedValue(Float.intBitsToFloat(
                        reader.readSizedRightExtendedInt(valueArg + 1)));
            case ValueType.DOUBLE:
                Preconditions.checkValueArg(valueArg, 7);
                return new ImmutableDoubleEncodedValue(Double.longBitsToDouble(
                        reader.readSizedRightExtendedLong(valueArg + 1)));
            case ValueType.STRING:
                Preconditions.checkValueArg(valueArg, 3);
                return new DexBackedStringEncodedValue(reader, valueArg);
            case ValueType.TYPE:
                Preconditions.checkValueArg(valueArg, 3);
                return new DexBackedTypeEncodedValue(reader, valueArg);
            case ValueType.FIELD:
                Preconditions.checkValueArg(valueArg, 3);
                return new DexBackedFieldEncodedValue(reader, valueArg);
            case ValueType.METHOD:
                Preconditions.checkValueArg(valueArg, 3);
                return new DexBackedMethodEncodedValue(reader, valueArg);
            case ValueType.ENUM:
                Preconditions.checkValueArg(valueArg, 3);
                return new DexBackedEnumEncodedValue(reader, valueArg);
            case ValueType.ARRAY:
                Preconditions.checkValueArg(valueArg, 0);
                return new DexBackedArrayEncodedValue(reader);
            case ValueType.ANNOTATION:
                Preconditions.checkValueArg(valueArg, 0);
                return new DexBackedAnnotationEncodedValue(reader);
            case ValueType.NULL:
                Preconditions.checkValueArg(valueArg, 0);
                return ImmutableNullEncodedValue.INSTANCE;
            case ValueType.BOOLEAN:
                Preconditions.checkValueArg(valueArg, 1);
                return ImmutableBooleanEncodedValue.forBoolean(valueArg == 1);
            default:
                throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType);
        }
    } catch (Exception ex) {
        throw ExceptionWithContext.withContext(ex, "Error while reading encoded value at offset 0x%x", startOffset);
    }
}
 
Example 12
Source File: DexBackedEncodedValue.java    From HeyGirl with Apache License 2.0 4 votes vote down vote up
public static void skipFrom(@Nonnull DexReader reader) {
    int startOffset = reader.getOffset();

    try {
        int b = reader.readUbyte();
        int valueType = b & 0x1f;

        switch (valueType) {
            case ValueType.BYTE:
                reader.skipByte();
                break;
            case ValueType.SHORT:
            case ValueType.CHAR:
            case ValueType.INT:
            case ValueType.LONG:
            case ValueType.FLOAT:
            case ValueType.DOUBLE:
            case ValueType.STRING:
            case ValueType.TYPE:
            case ValueType.FIELD:
            case ValueType.METHOD:
            case ValueType.ENUM:
                int valueArg = b >>> 5;
                reader.moveRelative(valueArg+1);
                break;
            case ValueType.ARRAY:
                DexBackedArrayEncodedValue.skipFrom(reader);
                break;
            case ValueType.ANNOTATION:
                DexBackedAnnotationEncodedValue.skipFrom(reader);
                break;
            case ValueType.NULL:
            case ValueType.BOOLEAN:
                break;
            default:
                throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType);
        }
    } catch (Exception ex) {
        throw ExceptionWithContext.withContext(ex, "Error while skipping encoded value at offset 0x%x",
                startOffset);
    }
}
 
Example 13
Source File: DexPool.java    From zjdroid with Apache License 2.0 4 votes vote down vote up
@Override protected void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer,
                                           @Nonnull EncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue;
            writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements());
            break;
        case ValueType.ARRAY:
            ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue;
            writer.writeArray(arrayEncodedValue.getValue());
            break;
        case ValueType.BOOLEAN:
            writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue());
            break;
        case ValueType.BYTE:
            writer.writeByte(((ByteEncodedValue)encodedValue).getValue());
            break;
        case ValueType.CHAR:
            writer.writeChar(((CharEncodedValue)encodedValue).getValue());
            break;
        case ValueType.DOUBLE:
            writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue());
            break;
        case ValueType.ENUM:
            writer.writeEnum(((EnumEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FIELD:
            writer.writeField(((FieldEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FLOAT:
            writer.writeFloat(((FloatEncodedValue)encodedValue).getValue());
            break;
        case ValueType.INT:
            writer.writeInt(((IntEncodedValue)encodedValue).getValue());
            break;
        case ValueType.LONG:
            writer.writeLong(((LongEncodedValue)encodedValue).getValue());
            break;
        case ValueType.METHOD:
            writer.writeMethod(((MethodEncodedValue)encodedValue).getValue());
            break;
        case ValueType.NULL:
            writer.writeNull();
            break;
        case ValueType.SHORT:
            writer.writeShort(((ShortEncodedValue)encodedValue).getValue());
            break;
        case ValueType.STRING:
            writer.writeString(((StringEncodedValue)encodedValue).getValue());
            break;
        case ValueType.TYPE:
            writer.writeType(((TypeEncodedValue)encodedValue).getValue());
            break;
        default:
            throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType());
    }
}
 
Example 14
Source File: EncodedValueAdaptor.java    From atlas with Apache License 2.0 4 votes vote down vote up
public static void writeTo(@Nonnull IndentingWriter writer, @Nonnull EncodedValue encodedValue,
                           @Nullable String containingClass)
        throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValueAdaptor.writeTo(writer, (AnnotationEncodedValue) encodedValue, containingClass);
            return;
        case ValueType.ARRAY:
            ArrayEncodedValueAdaptor.writeTo(writer, (ArrayEncodedValue)encodedValue, containingClass);
            return;
        case ValueType.BOOLEAN:
            BooleanRenderer.writeTo(writer, ((BooleanEncodedValue) encodedValue).getValue());
            return;
        case ValueType.BYTE:
            ByteRenderer.writeTo(writer, ((ByteEncodedValue) encodedValue).getValue());
            return;
        case ValueType.CHAR:
            CharRenderer.writeTo(writer, ((CharEncodedValue) encodedValue).getValue());
            return;
        case ValueType.DOUBLE:
            DoubleRenderer.writeTo(writer, ((DoubleEncodedValue) encodedValue).getValue());
            return;
        case ValueType.ENUM:
            EnumEncodedValue enumEncodedValue = (EnumEncodedValue)encodedValue;
            boolean useImplicitReference = false;
            if (enumEncodedValue.getValue().getDefiningClass().equals(containingClass)) {
                useImplicitReference = true;
            }
            writer.write(".enum ");
            ReferenceUtil.writeFieldDescriptor(writer, enumEncodedValue.getValue(), useImplicitReference);
            return;
        case ValueType.FIELD:
            FieldEncodedValue fieldEncodedValue = (FieldEncodedValue)encodedValue;
            useImplicitReference = false;
            if (fieldEncodedValue.getValue().getDefiningClass().equals(containingClass)) {
                useImplicitReference = true;
            }
            ReferenceUtil.writeFieldDescriptor(writer, fieldEncodedValue.getValue(), useImplicitReference);
            return;
        case ValueType.FLOAT:
            FloatRenderer.writeTo(writer, ((FloatEncodedValue) encodedValue).getValue());
            return;
        case ValueType.INT:
            IntegerRenderer.writeTo(writer, ((IntEncodedValue) encodedValue).getValue());
            return;
        case ValueType.LONG:
            LongRenderer.writeTo(writer, ((LongEncodedValue) encodedValue).getValue());
            return;
        case ValueType.METHOD:
            MethodEncodedValue methodEncodedValue = (MethodEncodedValue)encodedValue;
            useImplicitReference = false;
            if (methodEncodedValue.getValue().getDefiningClass().equals(containingClass)) {
                useImplicitReference = true;
            }
            ReferenceUtil.writeMethodDescriptor(writer, methodEncodedValue.getValue(), useImplicitReference);
            return;
        case ValueType.NULL:
            writer.write("null");
            return;
        case ValueType.SHORT:
            ShortRenderer.writeTo(writer, ((ShortEncodedValue) encodedValue).getValue());
            return;
        case ValueType.STRING:
            ReferenceFormatter.writeStringReference(writer, ((StringEncodedValue) encodedValue).getValue());
            return;
        case ValueType.TYPE:
            writer.write(((TypeEncodedValue)encodedValue).getValue());
    }
}
 
Example 15
Source File: DexEncodedValueUtils.java    From SimpleSmali with Apache License 2.0 4 votes vote down vote up
public static Object getEncodeValue(EncodedValue encodedValue) {
    switch (encodedValue.getValueType()) {
        case ValueType.BOOLEAN:
            return ((BooleanEncodedValue) encodedValue).getValue();
        case ValueType.BYTE:
            return ((ByteEncodedValue) encodedValue).getValue();
        case ValueType.CHAR:
            return ((CharEncodedValue) encodedValue).getValue();
        case ValueType.DOUBLE:
            return ((DoubleEncodedValue) encodedValue).getValue();
        case ValueType.FLOAT:
            return ((FloatEncodedValue) encodedValue).getValue();
        case ValueType.INT:
            return ((IntEncodedValue) encodedValue).getValue();
        case ValueType.LONG:
            return ((LongEncodedValue) encodedValue).getValue();
        case ValueType.NULL:
            return "null";
        case ValueType.SHORT:
            return ((ShortEncodedValue) encodedValue).getValue();
        case ValueType.STRING:
            return ((StringEncodedValue) encodedValue).getValue();
        case ValueType.TYPE:
            return ((TypeEncodedValue) encodedValue).getValue();
        case ValueType.FIELD:
            return ((FieldEncodedValue) encodedValue).getValue();
        case ValueType.ENUM:
            return ((EnumEncodedValue) encodedValue).getValue();
        case ValueType.METHOD:
            return ((MethodEncodedValue) encodedValue).getValue().getName();
        case ValueType.ARRAY: {
            ArrayList<String> vals = new ArrayList<>();
            StringJoiner joiner = new StringJoiner(",");
            List<? extends EncodedValue> valueS = ((ArrayEncodedValue) encodedValue).getValue();
            for (EncodedValue encodedValue1 : valueS) {
                joiner.add(String.valueOf(getEncodeValue(encodedValue1)));
            }
            return String.format("[%s]", joiner.toString());
        }
        case ValueType.ANNOTATION:
            return ((AnnotationEncodedValue) encodedValue).getType();//FIXME:
    }
   
    return "Unknown";

}
 
Example 16
Source File: EncodedValueAdaptor.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public static void writeTo(IndentingWriter writer, EncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValueAdaptor.writeTo(writer, (AnnotationEncodedValue)encodedValue);
            return;
        case ValueType.ARRAY:
            ArrayEncodedValueAdaptor.writeTo(writer, (ArrayEncodedValue)encodedValue);
            return;
        case ValueType.BOOLEAN:
            BooleanRenderer.writeTo(writer, ((BooleanEncodedValue)encodedValue).getValue());
            return;
        case ValueType.BYTE:
            ByteRenderer.writeTo(writer, ((ByteEncodedValue)encodedValue).getValue());
            return;
        case ValueType.CHAR:
            CharRenderer.writeTo(writer, ((CharEncodedValue)encodedValue).getValue());
            return;
        case ValueType.DOUBLE:
            DoubleRenderer.writeTo(writer, ((DoubleEncodedValue)encodedValue).getValue());
            return;
        case ValueType.ENUM:
            writer.write(".enum ");
            ReferenceUtil.writeFieldDescriptor(writer, ((EnumEncodedValue)encodedValue).getValue());
            return;
        case ValueType.FIELD:
            ReferenceUtil.writeFieldDescriptor(writer, ((FieldEncodedValue)encodedValue).getValue());
            return;
        case ValueType.FLOAT:
            FloatRenderer.writeTo(writer, ((FloatEncodedValue)encodedValue).getValue());
            return;
        case ValueType.INT:
            IntegerRenderer.writeTo(writer, ((IntEncodedValue)encodedValue).getValue());
            return;
        case ValueType.LONG:
            LongRenderer.writeTo(writer, ((LongEncodedValue)encodedValue).getValue());
            return;
        case ValueType.METHOD:
            ReferenceUtil.writeMethodDescriptor(writer, ((MethodEncodedValue)encodedValue).getValue());
            return;
        case ValueType.NULL:
            writer.write("null");
            return;
        case ValueType.SHORT:
            ShortRenderer.writeTo(writer, ((ShortEncodedValue)encodedValue).getValue());
            return;
        case ValueType.STRING:
            ReferenceFormatter.writeStringReference(writer, ((StringEncodedValue)encodedValue).getValue());
            return;
        case ValueType.TYPE:
            writer.write(((TypeEncodedValue)encodedValue).getValue());
    }
}
 
Example 17
Source File: DexBackedEncodedValue.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public static void skipFrom(@Nonnull DexReader reader) {
    int startOffset = reader.getOffset();

    try {
        int b = reader.readUbyte();
        int valueType = b & 0x1f;

        switch (valueType) {
            case ValueType.BYTE:
                reader.skipByte();
                break;
            case ValueType.SHORT:
            case ValueType.CHAR:
            case ValueType.INT:
            case ValueType.LONG:
            case ValueType.FLOAT:
            case ValueType.DOUBLE:
            case ValueType.STRING:
            case ValueType.TYPE:
            case ValueType.FIELD:
            case ValueType.METHOD:
            case ValueType.ENUM:
                int valueArg = b >>> 5;
                reader.moveRelative(valueArg+1);
                break;
            case ValueType.ARRAY:
                DexBackedArrayEncodedValue.skipFrom(reader);
                break;
            case ValueType.ANNOTATION:
                DexBackedAnnotationEncodedValue.skipFrom(reader);
                break;
            case ValueType.NULL:
            case ValueType.BOOLEAN:
                break;
            default:
                throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType);
        }
    } catch (Exception ex) {
        throw ExceptionWithContext.withContext(ex, "Error while skipping encoded value at offset 0x%x",
                startOffset);
    }
}
 
Example 18
Source File: DexPool.java    From HeyGirl with Apache License 2.0 4 votes vote down vote up
@Override protected void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer,
                                           @Nonnull EncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue;
            writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements());
            break;
        case ValueType.ARRAY:
            ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue;
            writer.writeArray(arrayEncodedValue.getValue());
            break;
        case ValueType.BOOLEAN:
            writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue());
            break;
        case ValueType.BYTE:
            writer.writeByte(((ByteEncodedValue)encodedValue).getValue());
            break;
        case ValueType.CHAR:
            writer.writeChar(((CharEncodedValue)encodedValue).getValue());
            break;
        case ValueType.DOUBLE:
            writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue());
            break;
        case ValueType.ENUM:
            writer.writeEnum(((EnumEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FIELD:
            writer.writeField(((FieldEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FLOAT:
            writer.writeFloat(((FloatEncodedValue)encodedValue).getValue());
            break;
        case ValueType.INT:
            writer.writeInt(((IntEncodedValue)encodedValue).getValue());
            break;
        case ValueType.LONG:
            writer.writeLong(((LongEncodedValue)encodedValue).getValue());
            break;
        case ValueType.METHOD:
            writer.writeMethod(((MethodEncodedValue)encodedValue).getValue());
            break;
        case ValueType.NULL:
            writer.writeNull();
            break;
        case ValueType.SHORT:
            writer.writeShort(((ShortEncodedValue)encodedValue).getValue());
            break;
        case ValueType.STRING:
            writer.writeString(((StringEncodedValue)encodedValue).getValue());
            break;
        case ValueType.TYPE:
            writer.writeType(((TypeEncodedValue)encodedValue).getValue());
            break;
        default:
            throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType());
    }
}
 
Example 19
Source File: DexBuilder.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
@Override protected void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer,
                                           @Nonnull BuilderEncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            BuilderAnnotationEncodedValue annotationEncodedValue = (BuilderAnnotationEncodedValue)encodedValue;
            writer.writeAnnotation(annotationEncodedValue.typeReference, annotationEncodedValue.elements);
            break;
        case ValueType.ARRAY:
            BuilderArrayEncodedValue arrayEncodedValue = (BuilderArrayEncodedValue)encodedValue;
            writer.writeArray(arrayEncodedValue.elements);
            break;
        case ValueType.BOOLEAN:
            writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue());
            break;
        case ValueType.BYTE:
            writer.writeByte(((ByteEncodedValue)encodedValue).getValue());
            break;
        case ValueType.CHAR:
            writer.writeChar(((CharEncodedValue)encodedValue).getValue());
            break;
        case ValueType.DOUBLE:
            writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue());
            break;
        case ValueType.ENUM:
            writer.writeEnum(((BuilderEnumEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FIELD:
            writer.writeField(((BuilderFieldEncodedValue)encodedValue).fieldReference);
            break;
        case ValueType.FLOAT:
            writer.writeFloat(((FloatEncodedValue)encodedValue).getValue());
            break;
        case ValueType.INT:
            writer.writeInt(((IntEncodedValue)encodedValue).getValue());
            break;
        case ValueType.LONG:
            writer.writeLong(((LongEncodedValue)encodedValue).getValue());
            break;
        case ValueType.METHOD:
            writer.writeMethod(((BuilderMethodEncodedValue)encodedValue).methodReference);
            break;
        case ValueType.NULL:
            writer.writeNull();
            break;
        case ValueType.SHORT:
            writer.writeShort(((ShortEncodedValue)encodedValue).getValue());
            break;
        case ValueType.STRING:
            writer.writeString(((BuilderStringEncodedValue)encodedValue).stringReference);
            break;
        case ValueType.TYPE:
            writer.writeType(((BuilderTypeEncodedValue)encodedValue).typeReference);
            break;
        default:
            throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType());
    }
}
 
Example 20
Source File: DexPool.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
@Override protected void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer,
                                           @Nonnull EncodedValue encodedValue) throws IOException {
    switch (encodedValue.getValueType()) {
        case ValueType.ANNOTATION:
            AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue;
            writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements());
            break;
        case ValueType.ARRAY:
            ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue;
            writer.writeArray(arrayEncodedValue.getValue());
            break;
        case ValueType.BOOLEAN:
            writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue());
            break;
        case ValueType.BYTE:
            writer.writeByte(((ByteEncodedValue)encodedValue).getValue());
            break;
        case ValueType.CHAR:
            writer.writeChar(((CharEncodedValue)encodedValue).getValue());
            break;
        case ValueType.DOUBLE:
            writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue());
            break;
        case ValueType.ENUM:
            writer.writeEnum(((EnumEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FIELD:
            writer.writeField(((FieldEncodedValue)encodedValue).getValue());
            break;
        case ValueType.FLOAT:
            writer.writeFloat(((FloatEncodedValue)encodedValue).getValue());
            break;
        case ValueType.INT:
            writer.writeInt(((IntEncodedValue)encodedValue).getValue());
            break;
        case ValueType.LONG:
            writer.writeLong(((LongEncodedValue)encodedValue).getValue());
            break;
        case ValueType.METHOD:
            writer.writeMethod(((MethodEncodedValue)encodedValue).getValue());
            break;
        case ValueType.NULL:
            writer.writeNull();
            break;
        case ValueType.SHORT:
            writer.writeShort(((ShortEncodedValue)encodedValue).getValue());
            break;
        case ValueType.STRING:
            writer.writeString(((StringEncodedValue)encodedValue).getValue());
            break;
        case ValueType.TYPE:
            writer.writeType(((TypeEncodedValue)encodedValue).getValue());
            break;
        default:
            throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType());
    }
}