From 3019737ed32e734cda3e51a7b6b31f6477e8bf95 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Mon, 15 Oct 2012 22:17:57 -0700 Subject: [PATCH] Make AnnotationEncodedValue implement BaseAnnotation --- .../value/DexBackedEncodedValue.java | 2 +- .../iface/value/AnnotationEncodedValue.java | 3 +- .../jf/dexlib2/iface/value/EncodedValue.java | 2 +- .../immutable/ImmutableAnnotation.java | 18 +++++---- .../ImmutableAnnotationEncodedValue.java | 37 +++++++++++-------- .../value/ImmutableEncodedValue.java | 4 +- 6 files changed, 38 insertions(+), 28 deletions(-) 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 a4c0f0fb..97bc8077 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 @@ -47,7 +47,7 @@ public class DexBackedEncodedValue implements EncodedValue { } @Override - public int getType() { + public int getValueType() { return 0; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/AnnotationEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/AnnotationEncodedValue.java index 4d5337be..20f4fc56 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/AnnotationEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/AnnotationEncodedValue.java @@ -35,6 +35,5 @@ import org.jf.dexlib2.iface.BaseAnnotation; import javax.annotation.Nonnull; -public interface AnnotationEncodedValue extends EncodedValue { - @Nonnull BaseAnnotation getValue(); +public interface AnnotationEncodedValue extends EncodedValue, BaseAnnotation { } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/EncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/EncodedValue.java index b4ea8551..52ffa089 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/EncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/EncodedValue.java @@ -32,5 +32,5 @@ package org.jf.dexlib2.iface.value; public interface EncodedValue { - int getType(); + int getValueType(); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/ImmutableAnnotation.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/ImmutableAnnotation.java index dd503bc9..d24cf43a 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/ImmutableAnnotation.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/ImmutableAnnotation.java @@ -31,6 +31,7 @@ package org.jf.dexlib2.immutable; +import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import org.jf.dexlib2.iface.Annotation; import org.jf.dexlib2.iface.AnnotationElement; @@ -40,21 +41,25 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; -public class ImmutableAnnotation extends ImmutableBaseAnnotation implements Annotation { +public class ImmutableAnnotation implements Annotation { public final int visibility; + @Nonnull public final String type; + @Nonnull public final ImmutableList elements; public ImmutableAnnotation(int visibility, @Nonnull String type, @Nullable List elements) { - super(type, elements); this.visibility = visibility; + this.type = type; + this.elements = ImmutableAnnotationElement.immutableListOf(elements); } public ImmutableAnnotation(int visibility, @Nonnull String type, @Nullable ImmutableList elements) { - super(type, elements); this.visibility = visibility; + this.type = type; + this.elements = Objects.firstNonNull(elements, ImmutableList.of()); } public static ImmutableAnnotation of(Annotation annotation) { @@ -67,10 +72,9 @@ public class ImmutableAnnotation extends ImmutableBaseAnnotation implements Anno annotation.getElements()); } - @Override - public int getVisibility() { - return visibility; - } + @Override public int getVisibility() { return visibility; } + @Nonnull @Override public String getType() { return type; } + @Nonnull @Override public ImmutableList getElements() { return elements; } @Nonnull public static ImmutableList immutableListOf(List list) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableAnnotationEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableAnnotationEncodedValue.java index 61ed7b31..f1ba0b8c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableAnnotationEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableAnnotationEncodedValue.java @@ -31,37 +31,44 @@ package org.jf.dexlib2.immutable.value; +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableList; import org.jf.dexlib2.ValueType; -import org.jf.dexlib2.iface.value.EncodedValue; -import org.jf.dexlib2.immutable.ImmutableBaseAnnotation; -import org.jf.dexlib2.iface.BaseAnnotation; +import org.jf.dexlib2.iface.AnnotationElement; +import org.jf.dexlib2.immutable.ImmutableAnnotationElement; import org.jf.dexlib2.iface.value.AnnotationEncodedValue; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; public class ImmutableAnnotationEncodedValue extends ImmutableEncodedValue implements AnnotationEncodedValue { - @Nonnull - public final ImmutableBaseAnnotation value; + @Nonnull public final String type; + @Nonnull public final ImmutableList elements; - public ImmutableAnnotationEncodedValue(@Nonnull BaseAnnotation value) { + public ImmutableAnnotationEncodedValue(@Nonnull String type, + @Nullable List elements) { super(ValueType.ANNOTATION); - this.value = ImmutableBaseAnnotation.of(value); + this.type = type; + this.elements = ImmutableAnnotationElement.immutableListOf(elements); } - public ImmutableAnnotationEncodedValue(@Nonnull ImmutableBaseAnnotation value) { + public ImmutableAnnotationEncodedValue(@Nonnull String type, + @Nullable ImmutableList elements) { super(ValueType.ANNOTATION); - this.value = value; + this.type = type; + this.elements = Objects.firstNonNull(elements, ImmutableList.of()); } - public static ImmutableAnnotationEncodedValue of(@Nonnull AnnotationEncodedValue annotationEncodedValue) { + public static ImmutableAnnotationEncodedValue of(AnnotationEncodedValue annotationEncodedValue) { if (annotationEncodedValue instanceof ImmutableAnnotationEncodedValue) { return (ImmutableAnnotationEncodedValue)annotationEncodedValue; } - return new ImmutableAnnotationEncodedValue(annotationEncodedValue.getValue()); + return new ImmutableAnnotationEncodedValue( + annotationEncodedValue.getType(), + annotationEncodedValue.getElements()); } - @Nonnull - public ImmutableBaseAnnotation getValue() { - return value; - } + @Nonnull @Override public String getType() { return type; } + @Nonnull @Override public ImmutableList getElements() { return elements; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValue.java index 22310321..32e06831 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValue.java @@ -48,7 +48,7 @@ public class ImmutableEncodedValue implements EncodedValue { } public static ImmutableEncodedValue of(EncodedValue encodedValue) { - switch (encodedValue.getType()) { + switch (encodedValue.getValueType()) { case ValueType.BYTE: return ImmutableByteEncodedValue.of((ByteEncodedValue)encodedValue); case ValueType.SHORT: @@ -87,7 +87,7 @@ public class ImmutableEncodedValue implements EncodedValue { } } - public int getType() { return type; } + public int getValueType() { return type; } @Nonnull public static ImmutableList immutableListOf(List list) {