aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-28 21:02:32 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-28 21:02:32 +0000
commitb147d92a4cb07943aaa68c23565d5e83c9bbd82b (patch)
tree4351144bc9442c69b3ea7e53aa2a60f3131a0562
parent20cbd1aa480f86c5ef0d25fa74eab48c590f74a0 (diff)
parent9c525128d5911275219fa1094f9f6e8ad0cd7351 (diff)
downloadgoogle-smali-simpleperf-release.tar.gz
Snap for 11510257 from 9c525128d5911275219fa1094f9f6e8ad0cd7351 to simpleperf-releasesimpleperf-release
Change-Id: I89c7be0285b93d4b0b4b71eccde471ee3c8e7858
-rw-r--r--METADATA18
-rw-r--r--baksmali/build.gradle7
-rw-r--r--baksmali/src/main/java/com/android/tools/smali/baksmali/DumpCommand.java5
-rw-r--r--baksmali/src/test/java/com/android/tools/smali/baksmali/AnalysisTest.java2
-rw-r--r--baksmali/src/test/java/com/android/tools/smali/baksmali/BaksmaliTestUtils.java8
-rw-r--r--build.gradle6
-rw-r--r--dexlib2/Android.bp2
-rw-r--r--dexlib2/accessorTestGenerator/src/main/java/com/android/tools/smali/dexlib2/AccessorTestGenerator.java8
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/DexFileFactory.java57
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/HiddenApiRestriction.java15
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/MethodHandleType.java40
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/Opcodes.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/VerificationError.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/CustomInlineMethodResolver.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/MethodAnalyzer.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseAnnotation.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseExceptionHandler.java7
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseTryBlock.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodHandleReference.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodProtoReference.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodReference.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseAnnotationEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseArrayEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseBooleanEncodedValue.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseByteEncodedValue.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseCharEncodedValue.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseDoubleEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseEnumEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFieldEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFloatEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseIntEncodedValue.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseLongEncodedValue.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodHandleEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodTypeEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseNullEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseShortEncodedValue.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseStringEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseTypeEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/CDexBackedMethodImplementation.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotation.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotationElement.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedCatchAllExceptionHandler.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedClassDef.java45
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java7
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedField.java13
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethod.java22
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethodImplementation.java7
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedOdexFile.java10
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTryBlock.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTypedExceptionHandler.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/OatFile.java62
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/ZipDexContainer.java34
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedArrayPayload.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedInstruction.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/AnnotationItem.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CdexDebugOffsetTable.java2
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDataItem.java17
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDefItem.java7
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CodeItem.java22
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/DebugInfoItem.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedArrayItem.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedValue.java12
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/SectionAnnotator.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/StringDataItem.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/util/DexAnnotator.java21
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodProtoReference.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodReference.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedStringReference.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/AnnotationsDirectory.java10
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/DebugInfo.java27
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/EncodedArrayItemIterator.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/ParameterIterator.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeCollection.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeIterator.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeList.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java68
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeSet.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedAnnotationEncodedValue.java9
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedArrayEncodedValue.java9
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEncodedValue.java5
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEnumEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedFieldEncodedValue.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java3
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedStringEncodedValue.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedTypeEncodedValue.java4
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/util/DexUtil.java6
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/dexlib2/writer/DexWriter.java35
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/ChainedIterator.java75
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/CollectionUtils.java50
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/InputStreamUtil.java262
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/IteratorUtils.java47
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/StringUtils.java15
-rw-r--r--dexlib2/src/main/java/com/android/tools/smali/util/TransformedIterator.java68
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/AccessorTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/CommonSuperclassTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/util/SuperclassChainTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixGotoTest.java4
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixOffsetsTest.java4
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexBufferTest.java3
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderLeb128Test.java8
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderSleb128Test.java8
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderTest.java24
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/util/InstructionOffsetMapTest.java3
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexDataWriterTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterSleb128Test.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterUleb128Test.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/util/TryListBuilderTest.java2
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/util/AbstractForwardSequentialListTest.java3
-rw-r--r--dexlib2/src/test/java/com/android/tools/smali/util/NumberUtilsTest.java3
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--smali/build.gradle8
-rw-r--r--smali/src/main/java/com/android/tools/smali/smali/Smali.java34
-rw-r--r--smali/src/test/java/com/android/tools/smali/smali/ImplicitReferenceTest.java3
-rw-r--r--third_party/NOTICE2
-rw-r--r--third_party/baksmali/src/main/java/com/android/tools/smali/baksmali/Baksmali.java3
-rw-r--r--util/src/test/java/com/android/tools/smali/util/ClassFileNameHandlerTest.java5
-rw-r--r--util/src/test/java/com/android/tools/smali/util/LinearSearchTest.java3
122 files changed, 1015 insertions, 476 deletions
diff --git a/METADATA b/METADATA
index 293b1946..2d0a8a92 100644
--- a/METADATA
+++ b/METADATA
@@ -1,19 +1,19 @@
# This project was upgraded with external_updater.
-# Usage: tools/external_updater/updater.sh update google-smali
+# Usage: tools/external_updater/updater.sh update external/google-smali
# For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md
name: "google-smali"
description: "smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android\'s Java VM implementation."
third_party {
- url {
- type: GIT
- value: "https://github.com/google/smali"
- }
- version: "3.0.3"
license_type: NOTICE
last_upgrade_date {
- year: 2023
- month: 7
- day: 24
+ year: 2024
+ month: 2
+ day: 7
+ }
+ identifier {
+ type: "Git"
+ value: "https://github.com/google/smali"
+ version: "3.0.4"
}
}
diff --git a/baksmali/build.gradle b/baksmali/build.gradle
index 7a44f93b..1644c09d 100644
--- a/baksmali/build.gradle
+++ b/baksmali/build.gradle
@@ -61,10 +61,13 @@ processResources.expand('version': version)
// Build a separate jar that contains all dependencies
task fatJar(type: Jar) {
+ dependsOn ':dexlib2:jar'
+ dependsOn ':util:jar'
from sourceSets.main.output
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
- classifier = 'fat'
+ duplicatesStrategy = 'exclude'
+ archiveClassifier = 'fat'
manifest {
attributes('Main-Class': 'com.android.tools.smali.baksmali.Main')
@@ -132,4 +135,4 @@ tasks.getByPath('javadoc').onlyIf({
tasks.getByPath('test').onlyIf({
!gradle.taskGraph.hasTask(fastbuild)
-}) \ No newline at end of file
+})
diff --git a/baksmali/src/main/java/com/android/tools/smali/baksmali/DumpCommand.java b/baksmali/src/main/java/com/android/tools/smali/baksmali/DumpCommand.java
index ac653ed6..a4fca667 100644
--- a/baksmali/src/main/java/com/android/tools/smali/baksmali/DumpCommand.java
+++ b/baksmali/src/main/java/com/android/tools/smali/baksmali/DumpCommand.java
@@ -94,9 +94,8 @@ public class DumpCommand extends DexInputCommand {
*/
public static void dump(@Nonnull DexBackedDexFile dexFile, @Nonnull OutputStream output)
throws IOException {
- Writer writer = new BufferedWriter(new OutputStreamWriter(output));
- try {
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(output))) {
int consoleWidth = ConsoleUtil.getConsoleWidth();
if (consoleWidth <= 0) {
consoleWidth = 120;
@@ -104,8 +103,6 @@ public class DumpCommand extends DexInputCommand {
DexAnnotator annotator = new DexAnnotator(dexFile, consoleWidth);
annotator.writeAnnotations(writer);
- } finally {
- writer.close();
}
}
}
diff --git a/baksmali/src/test/java/com/android/tools/smali/baksmali/AnalysisTest.java b/baksmali/src/test/java/com/android/tools/smali/baksmali/AnalysisTest.java
index a144d461..d41e307c 100644
--- a/baksmali/src/test/java/com/android/tools/smali/baksmali/AnalysisTest.java
+++ b/baksmali/src/test/java/com/android/tools/smali/baksmali/AnalysisTest.java
@@ -32,7 +32,6 @@ package com.android.tools.smali.baksmali;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
-import junit.framework.Assert;
import com.android.tools.smali.baksmali.Adaptors.ClassDefinition;
import com.android.tools.smali.baksmali.formatter.BaksmaliWriter;
import com.android.tools.smali.dexlib2.DexFileFactory;
@@ -41,6 +40,7 @@ import com.android.tools.smali.dexlib2.analysis.ClassPath;
import com.android.tools.smali.dexlib2.analysis.ClassProvider;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.dexlib2.iface.DexFile;
+import org.junit.Assert;
import org.junit.Test;
import javax.annotation.Nonnull;
diff --git a/baksmali/src/test/java/com/android/tools/smali/baksmali/BaksmaliTestUtils.java b/baksmali/src/test/java/com/android/tools/smali/baksmali/BaksmaliTestUtils.java
index 1796ea76..50b63606 100644
--- a/baksmali/src/test/java/com/android/tools/smali/baksmali/BaksmaliTestUtils.java
+++ b/baksmali/src/test/java/com/android/tools/smali/baksmali/BaksmaliTestUtils.java
@@ -31,18 +31,20 @@
package com.android.tools.smali.baksmali;
import com.google.common.io.ByteStreams;
-import junit.framework.Assert;
import org.antlr.runtime.RecognitionException;
import com.android.tools.smali.baksmali.Adaptors.ClassDefinition;
import com.android.tools.smali.baksmali.formatter.BaksmaliWriter;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.smali.SmaliTestUtils;
+import org.junit.Assert;
import org.junit.Test;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -109,11 +111,11 @@ public class BaksmaliTestUtils {
@Nonnull
public static String readResourceFully(@Nonnull String fileName) throws IOException {
- return readResourceFully(fileName, "UTF-8");
+ return readResourceFully(fileName, StandardCharsets.UTF_8);
}
@Nonnull
- public static String readResourceFully(@Nonnull String fileName, @Nonnull String encoding)
+ public static String readResourceFully(@Nonnull String fileName, @Nonnull Charset encoding)
throws IOException {
return new String(readResourceBytesFully(fileName), encoding);
}
diff --git a/build.gradle b/build.gradle
index c7581637..ecc1f848 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,7 +30,7 @@
apply plugin: 'idea'
-version = '3.0.3'
+version = '3.0.4'
def jcommanderVersion = ''
if (!('release' in gradle.startParameter.taskNames)) {
@@ -105,7 +105,7 @@ subprojects {
antlr: 'org.antlr:antlr:3.5.2',
stringtemplate: 'org.antlr:stringtemplate:3.2.1',
jflex_plugin: 'org.xbib.gradle.plugin:gradle-plugin-jflex:1.1.0',
- proguard_gradle: 'net.sf.proguard:proguard-gradle:6.2.2',
+ proguard_gradle: 'com.guardsquare:proguard-gradle:7.1.0',
dx: 'com.google.android.tools:dx:1.7',
gson: 'com.google.code.gson:gson:2.3.1',
jcommander: jcommanderVersion
@@ -205,6 +205,6 @@ buildscript {
}
wrapper {
- gradleVersion = '6.8.2'
+ gradleVersion = '8.5'
distributionType = Wrapper.DistributionType.ALL
}
diff --git a/dexlib2/Android.bp b/dexlib2/Android.bp
index 5be7f1cd..8c26eea7 100644
--- a/dexlib2/Android.bp
+++ b/dexlib2/Android.bp
@@ -25,6 +25,7 @@
static_libs: [
"guava",
"jsr305",
+ "auto_android_annotation_stubs",
],
}
@@ -42,5 +43,6 @@ java_library_host {
static_libs: [
"jsr305",
+ "auto_android_annotation_stubs",
],
} \ No newline at end of file
diff --git a/dexlib2/accessorTestGenerator/src/main/java/com/android/tools/smali/dexlib2/AccessorTestGenerator.java b/dexlib2/accessorTestGenerator/src/main/java/com/android/tools/smali/dexlib2/AccessorTestGenerator.java
index f98583ea..76baa6c1 100644
--- a/dexlib2/accessorTestGenerator/src/main/java/com/android/tools/smali/dexlib2/AccessorTestGenerator.java
+++ b/dexlib2/accessorTestGenerator/src/main/java/com/android/tools/smali/dexlib2/AccessorTestGenerator.java
@@ -127,14 +127,8 @@ public class AccessorTestGenerator {
ST fileSt = stg.getInstanceOf("file");
fileSt.add("types", types);
- PrintWriter w = null;
- try {
- w = new PrintWriter(new BufferedWriter(new FileWriter(args[0])));
+ try (PrintWriter w = new PrintWriter(new BufferedWriter(new FileWriter(args[0])))) {
w.print(fileSt.render());
- } finally {
- if (w != null) {
- w.close();
- }
}
}
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/DexFileFactory.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/DexFileFactory.java
index f59b1070..c464c474 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/DexFileFactory.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/DexFileFactory.java
@@ -30,14 +30,12 @@
package com.android.tools.smali.dexlib2;
+import static java.util.Collections.unmodifiableList;
+
import com.android.tools.smali.dexlib2.iface.DexFile;
import com.android.tools.smali.dexlib2.iface.MultiDexContainer;
import com.android.tools.smali.dexlib2.iface.MultiDexContainer.DexEntry;
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
+
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile.NotADexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedOdexFile;
@@ -48,6 +46,8 @@ import com.android.tools.smali.dexlib2.dexbacked.ZipDexContainer;
import com.android.tools.smali.dexlib2.dexbacked.ZipDexContainer.NotAZipFileException;
import com.android.tools.smali.dexlib2.writer.pool.DexPool;
import com.android.tools.smali.util.ExceptionWithContext;
+import com.android.tools.smali.util.InputStreamUtil;
+import com.android.tools.smali.util.StringUtils;
import java.io.BufferedInputStream;
import java.io.File;
@@ -57,6 +57,8 @@ import java.io.IOException;
import java.io.InputStream;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.ArrayList;
import java.util.List;
public final class DexFileFactory {
@@ -95,11 +97,10 @@ public final class DexFileFactory {
// eat it and continue
}
- InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
- try {
+ try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) {
try {
return DexBackedDexFile.fromInputStream(opcodes, inputStream);
- } catch (DexBackedDexFile.NotADexFile ex) {
+ } catch (NotADexFile ex) {
// just eat it
}
@@ -132,8 +133,6 @@ public final class DexFileFactory {
return oatDexFiles.get(0);
}
- } finally {
- inputStream.close();
}
throw new UnsupportedFileTypeException("%s is not an apk, dex, odex or oat file.", file.getPath());
@@ -195,8 +194,7 @@ public final class DexFileFactory {
// eat it and continue
}
- InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
- try {
+ try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) {
OatFile oatFile = null;
try {
oatFile = OatFile.fromInputStream(inputStream, new FilenameVdexProvider(file));
@@ -217,8 +215,6 @@ public final class DexFileFactory {
return new DexEntryFinder(file.getPath(), oatFile).findEntry(dexEntry, exactMatch);
}
- } finally {
- inputStream.close();
}
throw new UnsupportedFileTypeException("%s is not an apk or oat file.", file.getPath());
@@ -247,12 +243,11 @@ public final class DexFileFactory {
return zipDexContainer;
}
- InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
- try {
+ try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) {
try {
DexBackedDexFile dexFile = DexBackedDexFile.fromInputStream(opcodes, inputStream);
return new SingletonMultiDexContainer(file.getPath(), dexFile);
- } catch (DexBackedDexFile.NotADexFile ex) {
+ } catch (NotADexFile ex) {
// just eat it
}
@@ -280,8 +275,6 @@ public final class DexFileFactory {
}
return oatFile;
}
- } finally {
- inputStream.close();
}
throw new UnsupportedFileTypeException("%s is not an apk, dex, odex or oat file.", file.getPath());
@@ -404,10 +397,10 @@ public final class DexFileFactory {
}
// find all full and partial matches
- List<String> fullMatches = Lists.newArrayList();
- List<MultiDexContainer.DexEntry<? extends DexBackedDexFile>> fullEntries = Lists.newArrayList();
- List<String> partialMatches = Lists.newArrayList();
- List<MultiDexContainer.DexEntry<? extends DexBackedDexFile>> partialEntries = Lists.newArrayList();
+ List<String> fullMatches = new ArrayList<>();
+ List<MultiDexContainer.DexEntry<? extends DexBackedDexFile>> fullEntries = new ArrayList<>();
+ List<String> partialMatches = new ArrayList<>();
+ List<MultiDexContainer.DexEntry<? extends DexBackedDexFile>> partialEntries = new ArrayList<>();
for (String entry: dexContainer.getDexEntryNames()) {
if (fullEntryMatch(entry, targetEntry)) {
// We want to grab all full matches, regardless of whether they're actually a dex file.
@@ -439,7 +432,8 @@ public final class DexFileFactory {
// only by an initial path separator. e.g. "/blah/blah.dex" and "blah/blah.dex"
throw new MultipleMatchingDexEntriesException(String.format(
"Multiple entries in %s match %s: %s", filename, targetEntry,
- Joiner.on(", ").join(fullMatches)));
+ StringUtils.join(fullMatches, ", ")
+ ));
}
if (partialEntries.size() == 0) {
@@ -449,7 +443,8 @@ public final class DexFileFactory {
if (partialEntries.size() > 1) {
throw new MultipleMatchingDexEntriesException(String.format(
"Multiple dex entries in %s match %s: %s", filename, targetEntry,
- Joiner.on(", ").join(partialMatches)));
+ StringUtils.join(partialMatches, ", ")
+ ));
}
return partialEntries.get(0);
}
@@ -465,7 +460,7 @@ public final class DexFileFactory {
}
@Nonnull @Override public List<String> getDexEntryNames() {
- return ImmutableList.of(entryName);
+ return unmodifiableList(List.of(entryName));
}
@Nullable @Override public DexEntry<DexBackedDexFile> getEntry(@Nonnull String entryName) {
@@ -503,7 +498,7 @@ public final class DexFileFactory {
public FilenameVdexProvider(File oatFile) {
File oatParent = oatFile.getAbsoluteFile().getParentFile();
- String baseName = Files.getNameWithoutExtension(oatFile.getAbsolutePath());
+ String baseName = getNameWithoutExtension(oatFile.getAbsolutePath());
vdexFile = new File(oatParent, baseName + ".vdex");
}
@@ -524,7 +519,7 @@ public final class DexFileFactory {
if (candidateFile.exists()) {
try {
- buf = ByteStreams.toByteArray(new FileInputStream(candidateFile));
+ buf = InputStreamUtil.toByteArray(new FileInputStream(candidateFile));
} catch (FileNotFoundException e) {
buf = null;
} catch (IOException ex) {
@@ -536,5 +531,11 @@ public final class DexFileFactory {
return buf;
}
+
+ public static String getNameWithoutExtension(String file) {
+ String fileName = new File(file).getName();
+ int dotIndex = fileName.lastIndexOf('.');
+ return (dotIndex == -1) ? fileName : fileName.substring(0, dotIndex);
+ }
}
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/HiddenApiRestriction.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/HiddenApiRestriction.java
index 2f1683a0..f1e697d5 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/HiddenApiRestriction.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/HiddenApiRestriction.java
@@ -30,10 +30,10 @@
package com.android.tools.smali.dexlib2;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
+import static java.util.Collections.unmodifiableSet;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;
@@ -107,19 +107,20 @@ public enum HiddenApiRestriction {
public static Set<HiddenApiRestriction> getAllFlags(int value) {
HiddenApiRestriction normalRestriction = hiddenApiFlags[value & HIDDENAPI_FLAG_MASK];
+ HashSet restrictionSet = new HashSet<HiddenApiRestriction>();
int domainSpecificPart = (value & ~HIDDENAPI_FLAG_MASK);
if (domainSpecificPart == 0) {
- return ImmutableSet.of(normalRestriction);
+ restrictionSet.add(normalRestriction);
+ return unmodifiableSet(restrictionSet);
}
- Builder<HiddenApiRestriction> builder = ImmutableSet.builder();
- builder.add(normalRestriction);
+ restrictionSet.add(normalRestriction);
for (HiddenApiRestriction domainSpecificApiFlag : domainSpecificApiFlags) {
if (domainSpecificApiFlag.isSet(value)) {
- builder.add(domainSpecificApiFlag);
+ restrictionSet.add(domainSpecificApiFlag);
}
}
- return builder.build();
+ return unmodifiableSet(restrictionSet);
}
public static String formatHiddenRestrictions(int value) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/MethodHandleType.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/MethodHandleType.java
index 27a6b611..6ba1726b 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/MethodHandleType.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/MethodHandleType.java
@@ -30,8 +30,11 @@
package com.android.tools.smali.dexlib2;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.ImmutableBiMap;
+import static java.util.Collections.unmodifiableMap;
+
+import java.util.HashMap;
+import java.util.Map;
+
import com.android.tools.smali.util.ExceptionWithContext;
import javax.annotation.Nonnull;
@@ -47,17 +50,26 @@ public class MethodHandleType {
public static final int INVOKE_DIRECT = 7;
public static final int INVOKE_INTERFACE = 8;
- private static final BiMap<Integer, String> methodHandleTypeNames = new ImmutableBiMap.Builder<Integer, String>()
- .put(STATIC_PUT, "static-put")
- .put(STATIC_GET, "static-get")
- .put(INSTANCE_PUT, "instance-put")
- .put(INSTANCE_GET, "instance-get")
- .put(INVOKE_STATIC, "invoke-static")
- .put(INVOKE_INSTANCE, "invoke-instance")
- .put(INVOKE_CONSTRUCTOR, "invoke-constructor")
- .put(INVOKE_DIRECT, "invoke-direct")
- .put(INVOKE_INTERFACE, "invoke-interface")
- .build();
+ private static final Map<Integer, String> methodHandleTypeNames = unmodifiableMap(Map.of(
+ STATIC_PUT, "static-put",
+ STATIC_GET, "static-get",
+ INSTANCE_PUT, "instance-put",
+ INSTANCE_GET, "instance-get",
+ INVOKE_STATIC, "invoke-static",
+ INVOKE_INSTANCE, "invoke-instance",
+ INVOKE_CONSTRUCTOR, "invoke-constructor",
+ INVOKE_DIRECT, "invoke-direct",
+ INVOKE_INTERFACE, "invoke-interface"));
+
+ private static final Map<String, Integer> inverse = getInverse();
+
+ private static Map<String, Integer> getInverse() {
+ HashMap<String, Integer> namesToTypes = new HashMap<>();
+ for (Map.Entry<Integer, String> entry : methodHandleTypeNames.entrySet()) {
+ namesToTypes.put(entry.getValue(), entry.getKey());
+ }
+ return unmodifiableMap(namesToTypes);
+ }
@Nonnull public static String toString(int methodHandleType) {
String val = methodHandleTypeNames.get(methodHandleType);
@@ -68,7 +80,7 @@ public class MethodHandleType {
}
public static int getMethodHandleType(String methodHandleType) {
- Integer ret = methodHandleTypeNames.inverse().get(methodHandleType);
+ Integer ret = inverse.get(methodHandleType);
if (ret == null) {
throw new ExceptionWithContext("Invalid method handle type: %s", methodHandleType);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/Opcodes.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/Opcodes.java
index 5a88b0db..176c5175 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/Opcodes.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/Opcodes.java
@@ -30,7 +30,6 @@
package com.android.tools.smali.dexlib2;
-import com.google.common.collect.Maps;
import com.google.common.collect.RangeMap;
import javax.annotation.Nonnull;
@@ -94,7 +93,7 @@ public class Opcodes {
}
opcodeValues = new EnumMap<Opcode, Short>(Opcode.class);
- opcodesByName = Maps.newHashMap();
+ opcodesByName = new HashMap<>();
int version;
if (isArt()) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/VerificationError.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/VerificationError.java
index d4315886..f7282d7c 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/VerificationError.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/VerificationError.java
@@ -30,7 +30,6 @@
package com.android.tools.smali.dexlib2;
-import com.google.common.collect.Maps;
import com.android.tools.smali.util.ExceptionWithContext;
import javax.annotation.Nullable;
@@ -47,7 +46,7 @@ public class VerificationError {
public static final int CLASS_CHANGE_ERROR = 8;
public static final int INSTANTIATION_ERROR = 9;
- private static final HashMap<String, Integer> verificationErrorNames = Maps.newHashMap();
+ private static final HashMap<String, Integer> verificationErrorNames = new HashMap<>();
static {
verificationErrorNames.put("generic-error", GENERIC);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/CustomInlineMethodResolver.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/CustomInlineMethodResolver.java
index 2534f403..7c59c4b2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/CustomInlineMethodResolver.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/CustomInlineMethodResolver.java
@@ -45,6 +45,7 @@ import java.io.IOException;
import java.io.StringReader;
import javax.annotation.Nonnull;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
@@ -84,7 +85,7 @@ public class CustomInlineMethodResolver extends InlineMethodResolver {
}
public CustomInlineMethodResolver(@Nonnull ClassPath classPath, @Nonnull File inlineTable) throws IOException {
- this(classPath, Files.toString(inlineTable, Charset.forName("UTF-8")));
+ this(classPath, Files.asCharSource(inlineTable, StandardCharsets.UTF_8).read());
}
@Override
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/MethodAnalyzer.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/MethodAnalyzer.java
index b203361d..b6174a26 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/MethodAnalyzer.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/analysis/MethodAnalyzer.java
@@ -478,7 +478,7 @@ public class MethodAnalyzer {
List<? extends TryBlock<? extends ExceptionHandler>> tries = methodImpl.getTryBlocks();
tries = TryListBuilder.massageTryBlocks(tries);
int triesIndex = 0;
- TryBlock currentTry = null;
+ TryBlock<? extends ExceptionHandler> currentTry = null;
AnalyzedInstruction[] currentExceptionHandlers = null;
AnalyzedInstruction[][] exceptionHandlers = new AnalyzedInstruction[instructions.size()][];
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseAnnotation.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseAnnotation.java
index 5dd2e603..f271c429 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseAnnotation.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseAnnotation.java
@@ -31,7 +31,6 @@
package com.android.tools.smali.dexlib2.base;
import com.android.tools.smali.dexlib2.iface.Annotation;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.util.CollectionUtils;
import java.util.Comparator;
@@ -57,7 +56,7 @@ public abstract class BaseAnnotation implements Annotation {
@Override
public int compareTo(Annotation o) {
- int res = Ints.compare(getVisibility(), o.getVisibility());
+ int res = Integer.compare(getVisibility(), o.getVisibility());
if (res != 0) return res;
res = getType().compareTo(o.getType());
if (res != 0) return res;
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseExceptionHandler.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseExceptionHandler.java
index 32ca007f..5f6d098a 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseExceptionHandler.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseExceptionHandler.java
@@ -31,14 +31,13 @@
package com.android.tools.smali.dexlib2.base;
import com.android.tools.smali.dexlib2.iface.ExceptionHandler;
-import com.google.common.base.Objects;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.base.reference.BaseTypeReference;
import com.android.tools.smali.dexlib2.iface.reference.TypeReference;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Comparator;
+import java.util.Objects;
public abstract class BaseExceptionHandler implements ExceptionHandler {
@Nullable @Override public TypeReference getExceptionTypeReference() {
@@ -65,7 +64,7 @@ public abstract class BaseExceptionHandler implements ExceptionHandler {
public boolean equals(@Nullable Object o) {
if (o instanceof ExceptionHandler) {
ExceptionHandler other = (ExceptionHandler)o;
- return Objects.equal(getExceptionType(), other.getExceptionType()) &&
+ return Objects.equals(getExceptionType(), other.getExceptionType()) &&
(getHandlerCodeAddress() == other.getHandlerCodeAddress());
}
return false;
@@ -87,7 +86,7 @@ public abstract class BaseExceptionHandler implements ExceptionHandler {
res = exceptionType.compareTo(o.getExceptionType());
if (res != 0) return res;
}
- return Ints.compare(getHandlerCodeAddress(), o.getHandlerCodeAddress());
+ return Integer.compare(getHandlerCodeAddress(), o.getHandlerCodeAddress());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseTryBlock.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseTryBlock.java
index 13267e61..0dc049e8 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseTryBlock.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/BaseTryBlock.java
@@ -36,7 +36,7 @@ import com.android.tools.smali.dexlib2.iface.TryBlock;
public abstract class BaseTryBlock<EH extends ExceptionHandler> implements TryBlock<EH> {
@Override public boolean equals(Object o) {
if (o instanceof TryBlock) {
- TryBlock other = (TryBlock)o;
+ TryBlock<? extends ExceptionHandler> other = (TryBlock<? extends ExceptionHandler>)o;
return getStartCodeAddress() == other.getStartCodeAddress() &&
getCodeUnitCount() == other.getCodeUnitCount() &&
getExceptionHandlers().equals(other.getExceptionHandlers());
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodHandleReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodHandleReference.java
index e14b23a4..f2d4e842 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodHandleReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodHandleReference.java
@@ -34,7 +34,6 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference;
import com.android.tools.smali.dexlib2.iface.reference.MethodHandleReference;
import com.android.tools.smali.dexlib2.iface.reference.MethodReference;
import com.android.tools.smali.dexlib2.iface.reference.Reference;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -60,7 +59,7 @@ public abstract class BaseMethodHandleReference extends BaseReference implements
@Override
public int compareTo(@Nonnull MethodHandleReference o) {
- int res = Ints.compare(getMethodHandleType(), o.getMethodHandleType());
+ int res = Integer.compare(getMethodHandleType(), o.getMethodHandleType());
if (res != 0) return res;
Reference reference = getMemberReference();
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodProtoReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodProtoReference.java
index 4a1309ef..b43e6647 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodProtoReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodProtoReference.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.reference;
import com.android.tools.smali.dexlib2.iface.reference.MethodProtoReference;
import com.android.tools.smali.util.CharSequenceUtils;
import com.android.tools.smali.util.CollectionUtils;
-import com.google.common.collect.Ordering;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -62,7 +61,8 @@ public abstract class BaseMethodProtoReference extends BaseReference implements
public int compareTo(@Nonnull MethodProtoReference o) {
int res = getReturnType().compareTo(o.getReturnType());
if (res != 0) return res;
- return CollectionUtils.compareAsIterable(Ordering.usingToString(), getParameterTypes(), o.getParameterTypes());
+ return CollectionUtils.compareAsIterable(
+ CollectionUtils.usingToStringOrdering(), getParameterTypes(), o.getParameterTypes());
}
@Override public String toString() {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodReference.java
index 079b073f..5fda22a3 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/reference/BaseMethodReference.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.reference;
import com.android.tools.smali.dexlib2.iface.reference.MethodReference;
import com.android.tools.smali.util.CharSequenceUtils;
import com.android.tools.smali.util.CollectionUtils;
-import com.google.common.collect.Ordering;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -68,7 +67,8 @@ public abstract class BaseMethodReference extends BaseReference implements Metho
if (res != 0) return res;
res = getReturnType().compareTo(o.getReturnType());
if (res != 0) return res;
- return CollectionUtils.compareAsIterable(Ordering.usingToString(), getParameterTypes(), o.getParameterTypes());
+ return CollectionUtils.compareAsIterable(
+ CollectionUtils.usingToStringOrdering(), getParameterTypes(), o.getParameterTypes());
}
@Override public String toString() {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseAnnotationEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseAnnotationEncodedValue.java
index b0eb59fa..b04e0146 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseAnnotationEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseAnnotationEncodedValue.java
@@ -34,7 +34,6 @@ import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.AnnotationEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.util.CollectionUtils;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -59,7 +58,7 @@ public abstract class BaseAnnotationEncodedValue implements AnnotationEncodedVal
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
AnnotationEncodedValue other = (AnnotationEncodedValue)o;
res = getType().compareTo(other.getType());
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseArrayEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseArrayEncodedValue.java
index ea7bc5b9..4c9e3f9c 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseArrayEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseArrayEncodedValue.java
@@ -34,7 +34,6 @@ import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.ArrayEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.util.CollectionUtils;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseArrayEncodedValue implements ArrayEncodedValue {
}
@Override public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return CollectionUtils.compareAsList(getValue(), ((ArrayEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseBooleanEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseBooleanEncodedValue.java
index 08e20bf6..c4590e5b 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseBooleanEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseBooleanEncodedValue.java
@@ -33,8 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.BooleanEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
-import com.google.common.primitives.Booleans;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -56,9 +54,9 @@ public abstract class BaseBooleanEncodedValue implements BooleanEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Booleans.compare(getValue(), ((BooleanEncodedValue)o).getValue());
+ return Boolean.compare(getValue(), ((BooleanEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.BOOLEAN; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseByteEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseByteEncodedValue.java
index d80abd9a..28315f76 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseByteEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseByteEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.ByteEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,9 +54,9 @@ public abstract class BaseByteEncodedValue implements ByteEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Ints.compare(getValue(), ((ByteEncodedValue)o).getValue());
+ return Integer.compare(getValue(), ((ByteEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.BYTE; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseCharEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseCharEncodedValue.java
index e6885a41..c9427093 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseCharEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseCharEncodedValue.java
@@ -33,8 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.CharEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
-import com.google.common.primitives.Chars;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -56,9 +54,9 @@ public abstract class BaseCharEncodedValue implements CharEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Chars.compare(getValue(), ((CharEncodedValue)o).getValue());
+ return Character.compare(getValue(), ((CharEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.CHAR; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseDoubleEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseDoubleEncodedValue.java
index 71bd2047..5ca790fa 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseDoubleEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseDoubleEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.DoubleEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -57,7 +56,7 @@ public abstract class BaseDoubleEncodedValue implements DoubleEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return Double.compare(getValue(), ((DoubleEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseEnumEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseEnumEncodedValue.java
index a70f4c02..29dbc546 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseEnumEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseEnumEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EnumEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseEnumEncodedValue implements EnumEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((EnumEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFieldEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFieldEncodedValue.java
index eb994ba4..12abfd34 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFieldEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFieldEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.FieldEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseFieldEncodedValue implements FieldEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((FieldEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFloatEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFloatEncodedValue.java
index d5164eb4..74b2a90f 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFloatEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseFloatEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.FloatEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseFloatEncodedValue implements FloatEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return Float.compare(getValue(), ((FloatEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseIntEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseIntEncodedValue.java
index 58038e53..58f4c423 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseIntEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseIntEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.IntEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,9 +54,9 @@ public abstract class BaseIntEncodedValue implements IntEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Ints.compare(getValue(), ((IntEncodedValue)o).getValue());
+ return Integer.compare(getValue(), ((IntEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.INT; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseLongEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseLongEncodedValue.java
index 908133d2..0adc5ae2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseLongEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseLongEncodedValue.java
@@ -33,8 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.LongEncodedValue;
-import com.google.common.primitives.Ints;
-import com.google.common.primitives.Longs;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -58,9 +56,9 @@ public abstract class BaseLongEncodedValue implements LongEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Longs.compare(getValue(), ((LongEncodedValue)o).getValue());
+ return Long.compare(getValue(), ((LongEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.LONG; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodEncodedValue.java
index e14ffdde..930a117c 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.MethodEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseMethodEncodedValue implements MethodEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((MethodEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodHandleEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodHandleEncodedValue.java
index 856c6b95..6278e5ab 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodHandleEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodHandleEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.MethodHandleEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -54,7 +53,7 @@ public abstract class BaseMethodHandleEncodedValue implements MethodHandleEncode
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((MethodHandleEncodedValue) o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodTypeEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodTypeEncodedValue.java
index 39b9ced6..3f1faff2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodTypeEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseMethodTypeEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.MethodTypeEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -54,7 +53,7 @@ public abstract class BaseMethodTypeEncodedValue implements MethodTypeEncodedVal
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((MethodTypeEncodedValue) o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseNullEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseNullEncodedValue.java
index 4383cb7d..992e8f08 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseNullEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseNullEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.NullEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -52,7 +51,7 @@ public abstract class BaseNullEncodedValue implements NullEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- return Ints.compare(getValueType(), o.getValueType());
+ return Integer.compare(getValueType(), o.getValueType());
}
public int getValueType() { return ValueType.NULL; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseShortEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseShortEncodedValue.java
index 0ddb93cd..47beb486 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseShortEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseShortEncodedValue.java
@@ -33,8 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.ShortEncodedValue;
-import com.google.common.primitives.Ints;
-import com.google.common.primitives.Shorts;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -56,9 +54,9 @@ public abstract class BaseShortEncodedValue implements ShortEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
- return Shorts.compare(getValue(), ((ShortEncodedValue)o).getValue());
+ return Short.compare(getValue(), ((ShortEncodedValue)o).getValue());
}
public int getValueType() { return ValueType.SHORT; }
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseStringEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseStringEncodedValue.java
index fdaa9b97..7e05e388 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseStringEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseStringEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseStringEncodedValue implements StringEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((StringEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseTypeEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseTypeEncodedValue.java
index 74459d99..962004a6 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseTypeEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/base/value/BaseTypeEncodedValue.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.base.value;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
import com.android.tools.smali.dexlib2.iface.value.TypeEncodedValue;
-import com.google.common.primitives.Ints;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
import javax.annotation.Nonnull;
@@ -55,7 +54,7 @@ public abstract class BaseTypeEncodedValue implements TypeEncodedValue {
@Override
public int compareTo(@Nonnull EncodedValue o) {
- int res = Ints.compare(getValueType(), o.getValueType());
+ int res = Integer.compare(getValueType(), o.getValueType());
if (res != 0) return res;
return getValue().compareTo(((TypeEncodedValue)o).getValue());
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/CDexBackedMethodImplementation.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/CDexBackedMethodImplementation.java
index d6acffd9..99df58e1 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/CDexBackedMethodImplementation.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/CDexBackedMethodImplementation.java
@@ -121,7 +121,7 @@ public class CDexBackedMethodImplementation extends DexBackedMethodImplementatio
int debugOffsetsOffset = cdexFile.getDataBuffer().readSmallUint(debugTableOffset + debugTableItemOffset);
- DexReader reader = cdexFile.getDataBuffer().readerAt(debugInfoOffsetsPos + debugOffsetsOffset);
+ DexReader<? extends DexBuffer> reader = cdexFile.getDataBuffer().readerAt(debugInfoOffsetsPos + debugOffsetsOffset);
int bitMask = reader.readUbyte() << 8;
bitMask += reader.readUbyte();
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotation.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotation.java
index 943b85dd..c25e8f53 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotation.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotation.java
@@ -47,7 +47,7 @@ public class DexBackedAnnotation extends BaseAnnotation {
int annotationOffset) {
this.dexFile = dexFile;
- DexReader reader = dexFile.getDataBuffer().readerAt(annotationOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(annotationOffset);
this.visibility = reader.readUbyte();
this.typeIndex = reader.readSmallUleb128();
this.elementsOffset = reader.getOffset();
@@ -59,13 +59,13 @@ public class DexBackedAnnotation extends BaseAnnotation {
@Nonnull
@Override
public Set<? extends DexBackedAnnotationElement> getElements() {
- DexReader reader = dexFile.getDataBuffer().readerAt(elementsOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(elementsOffset);
final int size = reader.readSmallUleb128();
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile.getDataBuffer(), reader.getOffset(), size) {
@Nonnull
@Override
- protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader reader, int index) {
+ protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return new DexBackedAnnotationElement(dexFile, reader);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotationElement.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotationElement.java
index ce9a5951..d286668f 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotationElement.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedAnnotationElement.java
@@ -41,7 +41,7 @@ public class DexBackedAnnotationElement extends BaseAnnotationElement {
public final int nameIndex;
@Nonnull public final EncodedValue value;
- public DexBackedAnnotationElement(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public DexBackedAnnotationElement(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
this.dexFile = dexFile;
this.nameIndex = reader.readSmallUleb128();
this.value = DexBackedEncodedValue.readFrom(dexFile, reader);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedCatchAllExceptionHandler.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedCatchAllExceptionHandler.java
index cb1d7272..2cf08ea3 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedCatchAllExceptionHandler.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedCatchAllExceptionHandler.java
@@ -36,7 +36,7 @@ import javax.annotation.Nullable;
public class DexBackedCatchAllExceptionHandler extends DexBackedExceptionHandler {
private final int handlerCodeAddress;
- public DexBackedCatchAllExceptionHandler(@Nonnull DexReader reader) {
+ public DexBackedCatchAllExceptionHandler(@Nonnull DexReader<? extends DexBuffer> reader) {
this.handlerCodeAddress = reader.readSmallUleb128();
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedClassDef.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedClassDef.java
index 4c709ad4..059771fb 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedClassDef.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedClassDef.java
@@ -43,13 +43,12 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference;
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableFieldReference;
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference;
import com.android.tools.smali.dexlib2.writer.DexWriter;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
+import com.android.tools.smali.util.ChainedIterator;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.AbstractList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -87,7 +86,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
directMethodCount = 0;
virtualMethodCount = 0;
} else {
- DexReader reader = dexFile.getDataBuffer().readerAt(classDataOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(classDataOffset);
staticFieldCount = reader.readSmallUleb128();
instanceFieldCount = reader.readSmallUleb128();
directMethodCount = reader.readSmallUleb128();
@@ -146,7 +145,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Override public int size() { return size; }
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
@Nonnull
@@ -192,7 +191,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nullable
@Override
- protected DexBackedField readNextItem(@Nonnull DexReader reader) {
+ protected DexBackedField readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
while (true) {
if (++count > staticFieldCount) {
instanceFieldsOffset = reader.getOffset();
@@ -225,7 +224,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
};
} else {
instanceFieldsOffset = staticFieldsOffset;
- return ImmutableSet.of();
+ return Collections.emptySet();
}
}
@@ -238,7 +237,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nonnull
public Iterable<? extends DexBackedField> getInstanceFields(final boolean skipDuplicates) {
if (instanceFieldCount > 0) {
- DexReader reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
final int fieldsStartOffset = reader.getOffset();
@@ -261,7 +260,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nullable
@Override
- protected DexBackedField readNextItem(@Nonnull DexReader reader) {
+ protected DexBackedField readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
while (true) {
if (++count > instanceFieldCount) {
directMethodsOffset = reader.getOffset();
@@ -295,14 +294,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
if (instanceFieldsOffset > 0) {
directMethodsOffset = instanceFieldsOffset;
}
- return ImmutableSet.of();
+ return Collections.emptySet();
}
}
@Nonnull
@Override
public Iterable<? extends DexBackedField> getFields() {
- return Iterables.concat(getStaticFields(), getInstanceFields());
+ return new ChainedIterator(getStaticFields(), getInstanceFields());
}
@Nonnull
@@ -314,7 +313,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nonnull
public Iterable<? extends DexBackedMethod> getDirectMethods(final boolean skipDuplicates) {
if (directMethodCount > 0) {
- DexReader reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
final int methodsStartOffset = reader.getOffset();
@@ -339,7 +338,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nullable
@Override
- protected DexBackedMethod readNextItem(@Nonnull DexReader reader) {
+ protected DexBackedMethod readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
while (true) {
if (++count > directMethodCount) {
virtualMethodsOffset = reader.getOffset();
@@ -374,14 +373,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
if (directMethodsOffset > 0) {
virtualMethodsOffset = directMethodsOffset;
}
- return ImmutableSet.of();
+ return Collections.emptySet();
}
}
@Nonnull
public Iterable<? extends DexBackedMethod> getVirtualMethods(final boolean skipDuplicates) {
if (virtualMethodCount > 0) {
- DexReader reader = dexFile.getDataBuffer().readerAt(getVirtualMethodsOffset());
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(getVirtualMethodsOffset());
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
final int methodsStartOffset = reader.getOffset();
@@ -406,7 +405,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nullable
@Override
- protected DexBackedMethod readNextItem(@Nonnull DexReader reader) {
+ protected DexBackedMethod readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
while (true) {
if (++count > virtualMethodCount) {
return endOfData();
@@ -436,7 +435,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
}
};
} else {
- return ImmutableSet.of();
+ return Collections.emptySet();
}
}
@@ -449,7 +448,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
@Nonnull
@Override
public Iterable<? extends DexBackedMethod> getMethods() {
- return Iterables.concat(getDirectMethods(), getVirtualMethods());
+ return new ChainedIterator(getDirectMethods(), getVirtualMethods());
}
private AnnotationsDirectory getAnnotationsDirectory() {
@@ -465,7 +464,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
if (instanceFieldsOffset > 0) {
return instanceFieldsOffset;
}
- DexReader reader = dexFile.getDataBuffer().readerAt(staticFieldsOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(staticFieldsOffset);
DexBackedField.skipFields(reader, staticFieldCount);
instanceFieldsOffset = reader.getOffset();
return instanceFieldsOffset;
@@ -475,7 +474,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
if (directMethodsOffset > 0) {
return directMethodsOffset;
}
- DexReader reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
DexBackedField.skipFields(reader, instanceFieldCount);
directMethodsOffset = reader.getOffset();
return directMethodsOffset;
@@ -485,7 +484,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
if (virtualMethodsOffset > 0) {
return virtualMethodsOffset;
}
- DexReader reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
DexBackedMethod.skipMethods(reader, directMethodCount);
virtualMethodsOffset = reader.getOffset();
return virtualMethodsOffset;
@@ -528,14 +527,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
int staticInitialValuesOffset =
dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.STATIC_VALUES_OFFSET);
if (staticInitialValuesOffset != 0) {
- DexReader reader = dexFile.getDataBuffer().readerAt(staticInitialValuesOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(staticInitialValuesOffset);
size += reader.peekSmallUleb128Size(); //encoded_array size field
}
//class_data_item
int classDataOffset = dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.CLASS_DATA_OFFSET);
if (classDataOffset > 0) {
- DexReader reader = dexFile.getDataBuffer().readerAt(classDataOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(classDataOffset);
reader.readSmallUleb128(); //staticFieldCount
reader.readSmallUleb128(); //instanceFieldCount
reader.readSmallUleb128(); //directMethodCount
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java
index 7ea7c699..260ae6cd 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java
@@ -57,10 +57,11 @@ import com.android.tools.smali.dexlib2.iface.DexFile;
import com.android.tools.smali.dexlib2.iface.reference.Reference;
import com.android.tools.smali.dexlib2.util.DexUtil;
import com.android.tools.smali.dexlib2.writer.DexWriter;
-import com.google.common.io.ByteStreams;
+import com.android.tools.smali.util.InputStreamUtil;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
import java.io.IOException;
import java.io.InputStream;
import java.util.AbstractList;
@@ -193,7 +194,7 @@ public class DexBackedDexFile implements DexFile {
throws IOException {
DexUtil.verifyDexHeader(is);
- byte[] buf = ByteStreams.toByteArray(is);
+ byte[] buf = InputStreamUtil.toByteArray(is);
return new DexBackedDexFile(opcodes, buf, 0, false);
}
@@ -320,7 +321,7 @@ public class DexBackedDexFile implements DexFile {
public String get(int index) {
int stringOffset = getOffset(index);
int stringDataOffset = dexBuffer.readSmallUint(stringOffset);
- DexReader reader = dataBuffer.readerAt(stringDataOffset);
+ DexReader<? extends DexBuffer> reader = dataBuffer.readerAt(stringDataOffset);
int utf16Length = reader.readSmallUleb128();
return reader.readString(utf16Length);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedField.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedField.java
index 96dcce69..1db123fb 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedField.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedField.java
@@ -41,10 +41,11 @@ import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedEncodedValue;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.dexlib2.iface.Field;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
-import com.google.common.collect.ImmutableSet;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.Collections;
import java.util.EnumSet;
import java.util.Set;
@@ -64,7 +65,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
private int fieldIdItemOffset;
public DexBackedField(@Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
@Nonnull DexBackedClassDef classDef,
int previousFieldIndex,
@Nonnull EncodedArrayItemIterator staticInitialValueIterator,
@@ -87,7 +88,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
}
public DexBackedField(@Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
@Nonnull DexBackedClassDef classDef,
int previousFieldIndex,
@Nonnull AnnotationIterator annotationIterator,
@@ -136,7 +137,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
@Override
public Set<HiddenApiRestriction> getHiddenApiRestrictions() {
if (hiddenApiRestrictions == DexBackedClassDef.NO_HIDDEN_API_RESTRICTIONS) {
- return ImmutableSet.of();
+ return Collections.emptySet();
} else {
return EnumSet.copyOf(HiddenApiRestriction.getAllFlags(hiddenApiRestrictions));
}
@@ -148,7 +149,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
* @param reader The reader to skip
* @param count The number of encoded_field structures to skip over
*/
- public static void skipFields(@Nonnull DexReader reader, int count) {
+ public static void skipFields(@Nonnull DexReader<? extends DexBuffer> reader, int count) {
for (int i=0; i<count; i++) {
reader.skipUleb128();
reader.skipUleb128();
@@ -172,7 +173,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
*/
public int getSize() {
int size = 0;
- DexReader reader = dexFile.getBuffer().readerAt(startOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(startOffset);
reader.readLargeUleb128(); //field_idx_diff
reader.readSmallUleb128(); //access_flags
size += reader.getOffset() - startOffset;
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethod.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethod.java
index 78a4b0b5..84e6e831 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethod.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethod.java
@@ -30,6 +30,8 @@
package com.android.tools.smali.dexlib2.dexbacked;
+import static java.util.Collections.unmodifiableList;
+
import com.android.tools.smali.dexlib2.HiddenApiRestriction;
import com.android.tools.smali.dexlib2.base.reference.BaseMethodReference;
import com.android.tools.smali.dexlib2.dexbacked.raw.MethodIdItem;
@@ -44,11 +46,11 @@ import com.android.tools.smali.dexlib2.iface.Annotation;
import com.android.tools.smali.dexlib2.iface.Method;
import com.android.tools.smali.dexlib2.iface.MethodParameter;
import com.android.tools.smali.util.AbstractForwardSequentialList;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.Collections;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
@@ -73,7 +75,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
private int parametersOffset = -1;
public DexBackedMethod(@Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
@Nonnull DexBackedClassDef classDef,
int previousMethodIndex,
int hiddenApiRestrictions) {
@@ -94,7 +96,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
}
public DexBackedMethod(@Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
@Nonnull DexBackedClassDef classDef,
int previousMethodIndex,
@Nonnull AnnotationIterator methodAnnotationIterator,
@@ -153,7 +155,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
}
};
}
- return ImmutableList.of();
+ return unmodifiableList(List.of());
}
@Nonnull
@@ -167,7 +169,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
if (methodImpl != null) {
return methodImpl.getParameterNames(null);
}
- return ImmutableSet.<String>of().iterator();
+ return Collections.emptyIterator();
}
@Nonnull
@@ -186,7 +188,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
@Override public int size() { return parameterCount; }
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
@Nonnull
@@ -199,7 +201,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
@Override
public Set<HiddenApiRestriction> getHiddenApiRestrictions() {
if (hiddenApiRestrictions == DexBackedClassDef.NO_HIDDEN_API_RESTRICTIONS) {
- return ImmutableSet.of();
+ return Collections.emptySet();
} else {
return EnumSet.copyOf(HiddenApiRestriction.getAllFlags(hiddenApiRestrictions));
}
@@ -243,7 +245,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
* @param reader The reader to skip
* @param count The number of encoded_method structures to skip over
*/
- public static void skipMethods(@Nonnull DexReader reader, int count) {
+ public static void skipMethods(@Nonnull DexReader<? extends DexBuffer> reader, int count) {
for (int i=0; i<count; i++) {
reader.skipUleb128();
reader.skipUleb128();
@@ -262,7 +264,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
public int getSize() {
int size = 0;
- DexReader reader = dexFile.getDataBuffer().readerAt(startOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(startOffset);
reader.readLargeUleb128(); //method_idx_diff
reader.readSmallUleb128(); //access_flags
reader.readSmallUleb128(); //code_off
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethodImplementation.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethodImplementation.java
index e7c6d4b8..a231cfb2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethodImplementation.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedMethodImplementation.java
@@ -41,10 +41,11 @@ import com.android.tools.smali.dexlib2.iface.debug.DebugItem;
import com.android.tools.smali.dexlib2.iface.instruction.Instruction;
import com.android.tools.smali.dexlib2.util.AlignmentUtils;
import com.android.tools.smali.util.ExceptionWithContext;
-import com.google.common.collect.ImmutableList;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -85,7 +86,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
return new VariableSizeLookaheadIterator<Instruction>(
dexFile.getDataBuffer(), instructionsStartOffset) {
@Override
- protected Instruction readNextItem(@Nonnull DexReader reader) {
+ protected Instruction readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
if (reader.getOffset() >= endOffset) {
return endOfData();
}
@@ -133,7 +134,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
}
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
protected int getDebugOffset() {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedOdexFile.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedOdexFile.java
index d6f7f6d8..c9665e5d 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedOdexFile.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedOdexFile.java
@@ -34,7 +34,7 @@ import com.android.tools.smali.dexlib2.Opcodes;
import com.android.tools.smali.dexlib2.dexbacked.raw.OdexHeaderItem;
import com.android.tools.smali.dexlib2.dexbacked.util.VariableSizeList;
import com.android.tools.smali.dexlib2.util.DexUtil;
-import com.google.common.io.ByteStreams;
+import com.android.tools.smali.util.InputStreamUtil;
import javax.annotation.Nonnull;
import java.io.IOException;
@@ -67,7 +67,7 @@ public class DexBackedOdexFile extends DexBackedDexFile {
return new VariableSizeList<String>(
this.getDataBuffer(), dependencyOffset + DEPENDENCY_START_OFFSET, dependencyCount) {
- @Override protected String readNextItem(@Nonnull DexReader reader, int index) {
+ @Override protected String readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
int length = reader.readInt();
int offset = reader.getOffset();
reader.moveRelative(length + 20);
@@ -86,13 +86,13 @@ public class DexBackedOdexFile extends DexBackedDexFile {
is.reset();
byte[] odexBuf = new byte[OdexHeaderItem.ITEM_SIZE];
- ByteStreams.readFully(is, odexBuf);
+ InputStreamUtil.readFully(is, odexBuf);
int dexOffset = OdexHeaderItem.getDexOffset(odexBuf);
if (dexOffset > OdexHeaderItem.ITEM_SIZE) {
- ByteStreams.skipFully(is, dexOffset - OdexHeaderItem.ITEM_SIZE);
+ InputStreamUtil.skipFully(is, dexOffset - OdexHeaderItem.ITEM_SIZE);
}
- byte[] dexBuf = ByteStreams.toByteArray(is);
+ byte[] dexBuf = InputStreamUtil.toByteArray(is);
return new DexBackedOdexFile(opcodes, odexBuf, dexBuf);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTryBlock.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTryBlock.java
index d8015235..a34e9738 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTryBlock.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTryBlock.java
@@ -61,7 +61,7 @@ public class DexBackedTryBlock extends BaseTryBlock<DexBackedExceptionHandler> {
@Nonnull
@Override
public List<? extends DexBackedExceptionHandler> getExceptionHandlers() {
- DexReader reader = dexFile.getDataBuffer().readerAt(
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(
handlersStartOffset + dexFile.getDataBuffer().readUshort(tryItemOffset + CodeItem.TryItem.HANDLER_OFFSET));
final int encodedSize = reader.readSleb128();
@@ -71,7 +71,7 @@ public class DexBackedTryBlock extends BaseTryBlock<DexBackedExceptionHandler> {
dexFile.getDataBuffer(), reader.getOffset(), encodedSize) {
@Nonnull
@Override
- protected DexBackedTypedExceptionHandler readNextItem(@Nonnull DexReader reader, int index) {
+ protected DexBackedTypedExceptionHandler readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return new DexBackedTypedExceptionHandler(dexFile, reader);
}
};
@@ -82,7 +82,7 @@ public class DexBackedTryBlock extends BaseTryBlock<DexBackedExceptionHandler> {
dexFile.getDataBuffer(), reader.getOffset(), sizeWithCatchAll) {
@Nonnull
@Override
- protected DexBackedExceptionHandler readNextItem(@Nonnull DexReader dexReader, int index) {
+ protected DexBackedExceptionHandler readNextItem(@Nonnull DexReader<? extends DexBuffer> dexReader, int index) {
if (index == sizeWithCatchAll-1) {
return new DexBackedCatchAllExceptionHandler(dexReader);
} else {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTypedExceptionHandler.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTypedExceptionHandler.java
index 5104c068..c880357f 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTypedExceptionHandler.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedTypedExceptionHandler.java
@@ -37,7 +37,7 @@ public class DexBackedTypedExceptionHandler extends DexBackedExceptionHandler {
private final int typeId;
private final int handlerCodeAddress;
- public DexBackedTypedExceptionHandler(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public DexBackedTypedExceptionHandler(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
this.dexFile = dexFile;
this.typeId = reader.readSmallUleb128();
this.handlerCodeAddress = reader.readSmallUleb128();
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/OatFile.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/OatFile.java
index 451da3bb..a6011b42 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/OatFile.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/OatFile.java
@@ -36,14 +36,15 @@ import com.android.tools.smali.dexlib2.dexbacked.raw.HeaderItem;
import com.android.tools.smali.dexlib2.iface.MultiDexContainer;
import com.android.tools.smali.dexlib2.util.DexUtil;
import com.android.tools.smali.util.AbstractForwardSequentialList;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterators;
-import com.google.common.io.ByteStreams;
+import com.android.tools.smali.util.InputStreamUtil;
+import com.android.tools.smali.util.TransformedIterator;
+
+import java.util.function.Function;
import com.android.tools.smali.dexlib2.dexbacked.OatFile.SymbolTable.Symbol;
import java.util.AbstractList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
@@ -136,7 +137,7 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
is.mark(4);
byte[] partialHeader = new byte[4];
try {
- ByteStreams.readFully(is, partialHeader);
+ InputStreamUtil.readFully(is, partialHeader);
} catch (EOFException ex) {
throw new NotAnOatFileException();
} finally {
@@ -147,7 +148,7 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
is.reset();
- byte[] buf = ByteStreams.toByteArray(is);
+ byte[] buf = InputStreamUtil.toByteArray(is);
return new OatFile(buf, vdexProvider);
}
@@ -169,11 +170,11 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
@Nonnull
public List<String> getBootClassPath() {
if (getOatVersion() < 75) {
- return ImmutableList.of();
+ return Collections.unmodifiableList(List.of());
}
String bcp = oatHeader.getKeyValue("bootclasspath");
if (bcp == null) {
- return ImmutableList.of();
+ return Collections.unmodifiableList(List.of());
}
return Arrays.asList(bcp.split(":"));
}
@@ -181,18 +182,18 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
@Nonnull
public List<DexBackedDexFile> getDexFiles() {
return new AbstractForwardSequentialList<DexBackedDexFile>() {
+
@Override public int size() {
- return Iterators.size(Iterators.filter(new DexEntryIterator(), Objects::nonNull));
+ DexEntryIterator it = new DexEntryIterator();
+ return it.getSize();
}
@Nonnull @Override public Iterator<DexBackedDexFile> iterator() {
- return Iterators.transform(
- Iterators.filter(new DexEntryIterator(), Objects::nonNull),
- new Function<OatDexEntry, DexBackedDexFile>() {
- @Nullable @Override public DexBackedDexFile apply(OatDexEntry dexEntry) {
- return dexEntry.getDexFile();
- }
- });
+ return new TransformedIterator<OatDexEntry, DexBackedDexFile>(new DexEntryIterator(), new Function<OatDexEntry, DexBackedDexFile>() {
+ @Nullable @Override public DexBackedDexFile apply(OatDexEntry dexEntry) {
+ return dexEntry.getDexFile();
+ }
+ });
}
};
}
@@ -200,17 +201,16 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
@Nonnull @Override public List<String> getDexEntryNames() throws IOException {
return new AbstractForwardSequentialList<String>() {
@Override public int size() {
- return Iterators.size(Iterators.filter(new DexEntryIterator(), Objects::nonNull));
+ DexEntryIterator it = new DexEntryIterator();
+ return it.getSize();
}
@Nonnull @Override public Iterator<String> iterator() {
- return Iterators.transform(
- Iterators.filter(new DexEntryIterator(), Objects::nonNull),
- new Function<OatDexEntry, String>() {
- @Nullable @Override public String apply(OatDexEntry dexEntry) {
- return dexEntry.entryName;
- }
- });
+ return new TransformedIterator<OatDexEntry, String>(new DexEntryIterator(), new Function<OatDexEntry, String>() {
+ @Nullable @Override public String apply(OatDexEntry dexEntry) {
+ return dexEntry.entryName;
+ }
+ });
}
};
}
@@ -677,6 +677,20 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
@Override public void remove() {
throw new UnsupportedOperationException();
}
+
+ /**
+ * Returns the number of elements remaining in {@code iterator}. The iterator will be left
+ * exhausted: its {@code hasNext()} method will return {@code false}.
+ */
+ public int getSize() {
+ int count = 0;
+ while (hasNext()) {
+ if (Objects.nonNull(next())) {
+ count++;
+ }
+ }
+ return count;
+ }
}
public static class InvalidOatFileException extends RuntimeException {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/ZipDexContainer.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/ZipDexContainer.java
index 31d115cc..50d0bdfc 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/ZipDexContainer.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/ZipDexContainer.java
@@ -36,8 +36,8 @@ import com.android.tools.smali.dexlib2.iface.MultiDexContainer;
import com.android.tools.smali.dexlib2.util.DexUtil;
import com.android.tools.smali.dexlib2.util.DexUtil.InvalidFile;
import com.android.tools.smali.dexlib2.util.DexUtil.UnsupportedFile;
-import com.google.common.collect.Lists;
-import com.google.common.io.ByteStreams;
+import com.android.tools.smali.util.InputStreamUtil;
+
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile.NotADexFile;
import java.io.BufferedInputStream;
@@ -87,8 +87,7 @@ public class ZipDexContainer implements MultiDexContainer<DexBackedDexFile> {
return entries;
}
entries = new TreeMap<String, DexBackedDexFile>();
- ZipFile zipFile = getZipFile();
- try {
+ try (ZipFile zipFile = getZipFile()) {
Enumeration<? extends ZipEntry> entriesEnumeration = zipFile.entries();
while (entriesEnumeration.hasMoreElements()) {
@@ -99,22 +98,17 @@ public class ZipDexContainer implements MultiDexContainer<DexBackedDexFile> {
}
// There might be several dex files in zip entry since DEX v41.
- InputStream inputStream = zipFile.getInputStream(entry);
- try {
- byte[] buf = ByteStreams.toByteArray(inputStream);
+ try (InputStream inputStream = zipFile.getInputStream(entry)) {
+ byte[] buf = InputStreamUtil.toByteArray(inputStream);
for (int offset = 0, i = 1; offset < buf.length; i++) {
DexBackedDexFile dex = new DexBackedDexFile(opcodes, buf, 0, true, offset);
entries.put(entry.getName() + (i > 1 ? ("/" + i) : ""), dex);
offset += dex.getFileSize();
};
- } finally {
- inputStream.close();
}
}
return entries;
- } finally {
- zipFile.close();
}
}
@@ -152,28 +146,18 @@ public class ZipDexContainer implements MultiDexContainer<DexBackedDexFile> {
}
public boolean isZipFile() {
- ZipFile zipFile = null;
- try {
- zipFile = getZipFile();
+ try (ZipFile zipFile = getZipFile()) {
return true;
} catch (IOException ex) {
return false;
} catch (NotAZipFileException ex) {
return false;
- } finally {
- if(zipFile != null) {
- try {
- zipFile.close();
- } catch (IOException ex) {
- // just eat it
- }
- }
}
+ // just eat it
}
protected boolean isDex(@Nonnull ZipFile zipFile, @Nonnull ZipEntry zipEntry) throws IOException {
- InputStream inputStream = new BufferedInputStream(zipFile.getInputStream(zipEntry));
- try {
+ try (InputStream inputStream = new BufferedInputStream(zipFile.getInputStream(zipEntry))) {
DexUtil.verifyDexHeader(inputStream);
} catch (NotADexFile ex) {
return false;
@@ -181,8 +165,6 @@ public class ZipDexContainer implements MultiDexContainer<DexBackedDexFile> {
return false;
} catch (UnsupportedFile ex) {
return false;
- } finally {
- inputStream.close();
}
return true;
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedArrayPayload.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedArrayPayload.java
index 34cad36d..ec93d9a3 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedArrayPayload.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedArrayPayload.java
@@ -33,12 +33,12 @@ package com.android.tools.smali.dexlib2.dexbacked.instruction;
import com.android.tools.smali.dexlib2.Opcode;
import com.android.tools.smali.dexlib2.iface.instruction.formats.ArrayPayload;
import com.android.tools.smali.util.ExceptionWithContext;
-import com.google.common.collect.ImmutableList;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.util.FixedSizeList;
import javax.annotation.Nonnull;
import java.util.List;
+import java.util.Collections;
public class DexBackedArrayPayload extends DexBackedInstruction implements ArrayPayload {
public static final Opcode OPCODE = Opcode.ARRAY_PAYLOAD;
@@ -81,7 +81,7 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
}
if (elementCount == 0) {
- return ImmutableList.of();
+ return Collections.unmodifiableList(List.of());
}
switch (elementWidth) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedInstruction.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedInstruction.java
index 04d8f1e5..6df0a955 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedInstruction.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/instruction/DexBackedInstruction.java
@@ -31,6 +31,7 @@
package com.android.tools.smali.dexlib2.dexbacked.instruction;
import com.android.tools.smali.dexlib2.Opcode;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.util.ExceptionWithContext;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
@@ -56,7 +57,7 @@ public abstract class DexBackedInstruction implements Instruction {
@Override public int getCodeUnits() { return opcode.format.size / 2; }
@Nonnull
- public static Instruction readFrom(DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public static Instruction readFrom(DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
int opcodeValue = reader.peekUbyte();
if (opcodeValue == 0) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/AnnotationItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/AnnotationItem.java
index 518c4fc3..dfb5720a 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/AnnotationItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/AnnotationItem.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -54,7 +55,7 @@ public class AnnotationItem {
int visibility = dexFile.getBuffer().readUbyte(out.getCursor());
out.annotate(1, "visibility = %d: %s", visibility, getAnnotationVisibility(visibility));
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
EncodedValue.annotateEncodedAnnotation(dexFile, out, reader);
}
@@ -76,7 +77,7 @@ public class AnnotationItem {
public static String getReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int annotationItemOffset) {
try {
- DexReader reader = dexFile.getDataBuffer().readerAt(annotationItemOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(annotationItemOffset);
reader.readUbyte();
int typeIndex = reader.readSmallUleb128();
String annotationType = dexFile.getTypeSection().get(typeIndex);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CdexDebugOffsetTable.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CdexDebugOffsetTable.java
index da0075ff..eb7404ef 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CdexDebugOffsetTable.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CdexDebugOffsetTable.java
@@ -67,7 +67,7 @@ import javax.annotation.Nonnull;
public class CdexDebugOffsetTable {
@Nonnull
public static void annotate(@Nonnull DexAnnotator annotator, DexBuffer buffer) {
- DexReader reader = buffer.readerAt(annotator.getCursor());
+ DexReader<? extends DexBuffer> reader = buffer.readerAt(annotator.getCursor());
SectionAnnotator debugInfoAnnotator = annotator.getAnnotator(ItemType.DEBUG_INFO_ITEM);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDataItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDataItem.java
index b26547ab..7638da85 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDataItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDataItem.java
@@ -31,9 +31,14 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.AccessFlags;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
-import com.google.common.base.Joiner;
+import com.android.tools.smali.util.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
@@ -57,7 +62,7 @@ public class ClassDataItem {
@Override
protected void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) {
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
int staticFieldsSize = reader.readSmallUleb128();
out.annotateTo(reader.getOffset(), "static_fields_size = %d", staticFieldsSize);
@@ -125,7 +130,7 @@ public class ClassDataItem {
}
private int annotateEncodedField(@Nonnull AnnotatedBytes out, @Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader, int previousIndex) {
+ @Nonnull DexReader<? extends DexBuffer> reader, int previousIndex) {
// large values may be used for the index delta, which cause the cumulative index to overflow upon
// addition, effectively allowing out of order entries.
int indexDelta = reader.readLargeUleb128();
@@ -135,13 +140,13 @@ public class ClassDataItem {
int accessFlags = reader.readSmallUleb128();
out.annotateTo(reader.getOffset(), "access_flags = 0x%x: %s", accessFlags,
- Joiner.on('|').join(AccessFlags.getAccessFlagsForField(accessFlags)));
+ StringUtils.join(Arrays.asList(AccessFlags.getAccessFlagsForField(accessFlags)), "|"));
return fieldIndex;
}
private int annotateEncodedMethod(@Nonnull AnnotatedBytes out, @Nonnull DexBackedDexFile dexFile,
- @Nonnull DexReader reader, int previousIndex) {
+ @Nonnull DexReader<? extends DexBuffer> reader, int previousIndex) {
// large values may be used for the index delta, which cause the cumulative index to overflow upon
// addition, effectively allowing out of order entries.
int indexDelta = reader.readLargeUleb128();
@@ -151,7 +156,7 @@ public class ClassDataItem {
int accessFlags = reader.readSmallUleb128();
out.annotateTo(reader.getOffset(), "access_flags = 0x%x: %s", accessFlags,
- Joiner.on('|').join(AccessFlags.getAccessFlagsForMethod(accessFlags)));
+ StringUtils.join(Arrays.asList(AccessFlags.getAccessFlagsForField(accessFlags)), "|"));
int codeOffset = reader.readSmallUleb128();
if (codeOffset == 0) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDefItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDefItem.java
index 617599e6..b09d614a 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDefItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/ClassDefItem.java
@@ -33,7 +33,10 @@ package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.AccessFlags;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
-import com.google.common.base.Joiner;
+import com.android.tools.smali.util.StringUtils;
+
+import java.util.Arrays;
+
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import javax.annotation.Nonnull;
@@ -72,7 +75,7 @@ public class ClassDefItem {
int accessFlags = dexFile.getBuffer().readInt(out.getCursor());
out.annotate(4, "access_flags = 0x%x: %s", accessFlags,
- Joiner.on('|').join(AccessFlags.getAccessFlagsForClass(accessFlags)));
+ StringUtils.join(Arrays.asList(AccessFlags.getAccessFlagsForClass(accessFlags)), "|"));
int superclassIndex = dexFile.getBuffer().readOptionalUint(out.getCursor());
out.annotate(4, "superclass_idx = %s",
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CodeItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CodeItem.java
index 904a9fc9..be3868e1 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CodeItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/CodeItem.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.ReferenceType;
import com.android.tools.smali.dexlib2.VerificationError;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.instruction.DexBackedInstruction;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.iface.instruction.FieldOffsetInstruction;
@@ -55,8 +56,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.SparseSwitchPay
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.util.ExceptionWithContext;
import com.android.tools.smali.util.NumberUtils;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
+import com.android.tools.smali.util.StringUtils;
import com.android.tools.smali.dexlib2.dexbacked.CDexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import com.android.tools.smali.dexlib2.formatter.DexFormatter;
@@ -134,7 +134,7 @@ public class CodeItem {
@Override
protected PreInstructionInfo annotatePreInstructionFields(
- @Nonnull AnnotatedBytes out, @Nonnull DexReader reader, @Nullable String itemIdentity) {
+ @Nonnull AnnotatedBytes out, @Nonnull DexReader<? extends DexBuffer> reader, @Nullable String itemIdentity) {
int sizeFields = reader.readUshort();
int triesCount = (sizeFields >> CDEX_TRIES_SIZE_SHIFT) & 0xf;
@@ -267,7 +267,7 @@ public class CodeItem {
}
protected PreInstructionInfo annotatePreInstructionFields(
- @Nonnull AnnotatedBytes out, @Nonnull DexReader reader, @Nullable String itemIdentity) {
+ @Nonnull AnnotatedBytes out, @Nonnull DexReader<? extends DexBuffer> reader, @Nullable String itemIdentity) {
int registers = reader.readUshort();
out.annotate(2, "registers_size = %d", registers);
@@ -296,7 +296,7 @@ public class CodeItem {
protected void annotateInstructions(
@Nonnull AnnotatedBytes out,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
int instructionSize) {
out.annotate(0, "instructions:");
@@ -353,7 +353,7 @@ public class CodeItem {
}
protected void annotatePostInstructionFields(@Nonnull AnnotatedBytes out,
- @Nonnull DexReader reader,
+ @Nonnull DexReader<? extends DexBuffer> reader,
int triesCount) {
if (triesCount > 0) {
if ((reader.getOffset() % 4) != 0) {
@@ -435,7 +435,7 @@ public class CodeItem {
@Override
public void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) {
try {
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
PreInstructionInfo info = annotatePreInstructionFields(out, reader, itemIdentity);
annotateInstructions(out, reader, info.instructionSize);
@@ -454,7 +454,7 @@ public class CodeItem {
}
private void annotateInstruction35c(@Nonnull AnnotatedBytes out, @Nonnull Instruction35c instruction) {
- List<String> args = Lists.newArrayList();
+ List<String> args = new ArrayList<>();
int registerCount = instruction.getRegisterCount();
if (registerCount == 1) {
@@ -480,7 +480,7 @@ public class CodeItem {
}
out.annotate(6, String.format("%s {%s}, %s",
- instruction.getOpcode().name, Joiner.on(", ").join(args), instruction.getReference()));
+ instruction.getOpcode().name, StringUtils.join(args, ", "), instruction.getReference()));
}
private void annotateInstruction3rc(@Nonnull AnnotatedBytes out, @Nonnull Instruction3rc instruction) {
@@ -492,7 +492,7 @@ public class CodeItem {
}
private void annotateDefaultInstruction(@Nonnull AnnotatedBytes out, @Nonnull Instruction instruction) {
- List<String> args = Lists.newArrayList();
+ List<String> args = new ArrayList<>();
if (instruction instanceof OneRegisterInstruction) {
args.add(formatRegister(((OneRegisterInstruction)instruction).getRegisterA()));
@@ -554,7 +554,7 @@ public class CodeItem {
}
out.annotate(instruction.getCodeUnits()*2, "%s %s",
- instruction.getOpcode().name, Joiner.on(", ").join(args));
+ instruction.getOpcode().name, StringUtils.join(args, ", "));
}
private void annotateArrayPayload(@Nonnull AnnotatedBytes out, @Nonnull ArrayPayload instruction) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/DebugInfoItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/DebugInfoItem.java
index 9b435ac4..ea506bcb 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/DebugInfoItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/DebugInfoItem.java
@@ -31,6 +31,7 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.DebugItemType;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
@@ -49,7 +50,7 @@ public class DebugInfoItem {
@Override
public void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) {
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
int lineStart = reader.readBigUleb128();
out.annotateTo(reader.getOffset(), "line_start = %d", lineStart & 0xFFFFFFFFL);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedArrayItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedArrayItem.java
index 8ea81825..a3679413 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedArrayItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedArrayItem.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
@@ -47,7 +48,7 @@ public class EncodedArrayItem {
@Override
protected void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) {
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
EncodedValue.annotateEncodedArray(dexFile, out, reader);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedValue.java
index 02801531..6b7f3391 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/EncodedValue.java
@@ -31,6 +31,7 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.ValueType;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedEncodedValue;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -42,7 +43,7 @@ public class EncodedValue {
public static void annotateEncodedValue(
@Nonnull DexBackedDexFile dexFile,
@Nonnull AnnotatedBytes out,
- @Nonnull DexReader reader) {
+ @Nonnull DexReader<? extends DexBuffer> reader) {
int valueArgType = reader.readUbyte();
int valueArg = valueArgType >>> 5;
@@ -91,7 +92,7 @@ public class EncodedValue {
public static void annotateEncodedAnnotation(
@Nonnull DexBackedDexFile dexFile,
@Nonnull AnnotatedBytes out,
- @Nonnull DexReader reader) {
+ @Nonnull DexReader<? extends DexBuffer> reader) {
assert out.getCursor() == reader.getOffset();
int typeIndex = reader.readSmallUleb128();
@@ -117,7 +118,7 @@ public class EncodedValue {
public static void annotateEncodedArray(
@Nonnull DexBackedDexFile dexFile,
@Nonnull AnnotatedBytes out,
- @Nonnull DexReader reader) {
+ @Nonnull DexReader<? extends DexBuffer> reader) {
assert out.getCursor() == reader.getOffset();
int size = reader.readSmallUleb128();
@@ -133,15 +134,16 @@ public class EncodedValue {
}
}
- public static String asString(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public static String asString(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
int valueArgType = reader.readUbyte();
int valueArg = valueArgType >>> 5;
int valueType = valueArgType & 0x1f;
+ int intValue;
switch (valueType) {
case ValueType.BYTE:
- int intValue = reader.readByte();
+ intValue = reader.readByte();
return String.format("0x%x", intValue);
case ValueType.SHORT:
intValue = reader.readSizedInt(valueArg+1);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/SectionAnnotator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/SectionAnnotator.java
index 7d52559c..720f4b6d 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/SectionAnnotator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/SectionAnnotator.java
@@ -33,11 +33,12 @@ package com.android.tools.smali.dexlib2.dexbacked.raw;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AlignmentUtils;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
-import com.google.common.collect.Maps;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.HashMap;
import java.util.Map;
public abstract class SectionAnnotator {
@@ -47,7 +48,7 @@ public abstract class SectionAnnotator {
public final int sectionOffset;
public final int itemCount;
- protected Map<Integer, String> itemIdentities = Maps.newHashMap();
+ protected Map<Integer, String> itemIdentities = new HashMap<>();
public SectionAnnotator(@Nonnull DexAnnotator annotator, @Nonnull MapItem mapItem) {
this.annotator = annotator;
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/StringDataItem.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/StringDataItem.java
index 9e30f751..144b9986 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/StringDataItem.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/StringDataItem.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.raw;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.raw.util.DexAnnotator;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
import com.android.tools.smali.util.StringUtils;
@@ -48,7 +49,7 @@ public class StringDataItem {
@Override
protected void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) {
- DexReader reader = dexFile.getBuffer().readerAt(out.getCursor());
+ DexReader<? extends DexBuffer> reader = dexFile.getBuffer().readerAt(out.getCursor());
int utf16Length = reader.readSmallUleb128();
out.annotateTo(reader.getOffset(), "utf16_size = %d", utf16Length);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/util/DexAnnotator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/util/DexAnnotator.java
index 55a68fa0..5f219f64 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/util/DexAnnotator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/raw/util/DexAnnotator.java
@@ -55,9 +55,7 @@ import com.android.tools.smali.dexlib2.dexbacked.raw.StringIdItem;
import com.android.tools.smali.dexlib2.dexbacked.raw.TypeIdItem;
import com.android.tools.smali.dexlib2.dexbacked.raw.TypeListItem;
import com.android.tools.smali.dexlib2.util.AnnotatedBytes;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Ordering;
-import com.google.common.primitives.Ints;
+
import com.android.tools.smali.dexlib2.dexbacked.CDexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -65,15 +63,17 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.io.Writer;
+import java.util.Arrays;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DexAnnotator extends AnnotatedBytes {
@Nonnull public final DexBackedDexFile dexFile;
- private final Map<Integer, SectionAnnotator> annotators = Maps.newHashMap();
- private static final Map<Integer, Integer> sectionAnnotationOrder = Maps.newHashMap();
+ private final Map<Integer, SectionAnnotator> annotators = new HashMap<>();
+ private static final Map<Integer, Integer> sectionAnnotationOrder = new HashMap<>();
static {
int[] sectionOrder = new int[] {
@@ -189,13 +189,14 @@ public class DexAnnotator extends AnnotatedBytes {
public void writeAnnotations(Writer out) throws IOException {
List<MapItem> mapItems = dexFile.getMapItems();
// sort the map items based on the order defined by sectionAnnotationOrder
- Ordering<MapItem> ordering = Ordering.from(new Comparator<MapItem>() {
+ Comparator<MapItem> comparator = new Comparator<MapItem>() {
@Override public int compare(MapItem o1, MapItem o2) {
- return Ints.compare(sectionAnnotationOrder.get(o1.getType()), sectionAnnotationOrder.get(o2.getType()));
+ return Integer.compare(sectionAnnotationOrder.get(o1.getType()), sectionAnnotationOrder.get(o2.getType()));
}
- });
+ };
- mapItems = ordering.immutableSortedCopy(mapItems);
+ MapItem[] mapItemsArray = mapItems.toArray(new MapItem[mapItems.size()]);
+ Arrays.sort(mapItemsArray, comparator);
try {
// Need to annotate the debug info offset table first, to propagate the debug info identities
@@ -204,7 +205,7 @@ public class DexAnnotator extends AnnotatedBytes {
CdexDebugOffsetTable.annotate(this, dexFile.getBuffer());
}
- for (MapItem mapItem: mapItems) {
+ for (MapItem mapItem: mapItemsArray) {
try {
SectionAnnotator annotator = annotators.get(mapItem.getType());
annotator.annotateSection(this);
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java
index 23224a1d..a7a6925d 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java
@@ -32,7 +32,6 @@ package com.android.tools.smali.dexlib2.dexbacked.reference;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.util.ExceptionWithContext;
-import com.google.common.collect.Lists;
import com.android.tools.smali.dexlib2.base.reference.BaseCallSiteReference;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.util.EncodedArrayItemIterator;
@@ -44,6 +43,8 @@ import com.android.tools.smali.dexlib2.iface.value.MethodTypeEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue;
import javax.annotation.Nonnull;
+
+import java.util.ArrayList;
import java.util.List;
public class DexBackedCallSiteReference extends BaseCallSiteReference {
@@ -124,7 +125,7 @@ public class DexBackedCallSiteReference extends BaseCallSiteReference {
@Nonnull
@Override
public List<? extends EncodedValue> getExtraArguments() {
- List<EncodedValue> values = Lists.newArrayList();
+ List<EncodedValue> values = new ArrayList<>();
EncodedArrayItemIterator iter = getCallSiteIterator();
if (iter.getItemCount() < 3) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodProtoReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodProtoReference.java
index 1855aebd..ac7593b2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodProtoReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodProtoReference.java
@@ -30,7 +30,6 @@
package com.android.tools.smali.dexlib2.dexbacked.reference;
-import com.google.common.collect.ImmutableList;
import com.android.tools.smali.dexlib2.base.reference.BaseMethodProtoReference;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.raw.ProtoIdItem;
@@ -38,6 +37,8 @@ import com.android.tools.smali.dexlib2.dexbacked.raw.TypeListItem;
import com.android.tools.smali.dexlib2.dexbacked.util.FixedSizeList;
import javax.annotation.Nonnull;
+
+import java.util.Collections;
import java.util.List;
public class DexBackedMethodProtoReference extends BaseMethodProtoReference {
@@ -67,7 +68,7 @@ public class DexBackedMethodProtoReference extends BaseMethodProtoReference {
@Override public int size() { return parameterCount; }
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
@Nonnull
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodReference.java
index a9ae9dcb..1910e8db 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedMethodReference.java
@@ -30,7 +30,6 @@
package com.android.tools.smali.dexlib2.dexbacked.reference;
-import com.google.common.collect.ImmutableList;
import com.android.tools.smali.dexlib2.base.reference.BaseMethodReference;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.dexbacked.raw.MethodIdItem;
@@ -39,6 +38,8 @@ import com.android.tools.smali.dexlib2.dexbacked.raw.TypeListItem;
import com.android.tools.smali.dexlib2.dexbacked.util.FixedSizeList;
import javax.annotation.Nonnull;
+
+import java.util.Collections;
import java.util.List;
public class DexBackedMethodReference extends BaseMethodReference {
@@ -84,7 +85,7 @@ public class DexBackedMethodReference extends BaseMethodReference {
@Override public int size() { return parameterCount; }
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
@Nonnull
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedStringReference.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedStringReference.java
index a7ac23b6..8594cfb0 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedStringReference.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/reference/DexBackedStringReference.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.reference;
import com.android.tools.smali.dexlib2.base.reference.BaseStringReference;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import com.android.tools.smali.dexlib2.dexbacked.raw.StringIdItem;
@@ -64,7 +65,7 @@ public class DexBackedStringReference extends BaseStringReference {
//add the string data length:
int stringOffset = dexFile.getStringSection().getOffset(stringIndex);
int stringDataOffset = dexFile.getBuffer().readSmallUint(stringOffset);
- DexReader reader = dexFile.getDataBuffer().readerAt(stringDataOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(stringDataOffset);
size += reader.peekSmallUleb128Size();
int utf16Length = reader.readSmallUleb128();
//and string data itself:
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/AnnotationsDirectory.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/AnnotationsDirectory.java
index 987b92c2..1a252537 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/AnnotationsDirectory.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/AnnotationsDirectory.java
@@ -30,19 +30,19 @@
package com.android.tools.smali.dexlib2.dexbacked.util;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedAnnotation;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import javax.annotation.Nonnull;
+
+import java.util.Collections;
import java.util.List;
import java.util.Set;
public abstract class AnnotationsDirectory {
public static final AnnotationsDirectory EMPTY = new AnnotationsDirectory() {
@Override public int getFieldAnnotationCount() { return 0; }
- @Nonnull @Override public Set<? extends DexBackedAnnotation> getClassAnnotations() { return ImmutableSet.of(); }
+ @Nonnull @Override public Set<? extends DexBackedAnnotation> getClassAnnotations() { return Collections.emptySet(); }
@Nonnull @Override public AnnotationIterator getFieldAnnotationIterator() { return AnnotationIterator.EMPTY; }
@Nonnull @Override public AnnotationIterator getMethodAnnotationIterator() { return AnnotationIterator.EMPTY; }
@Nonnull @Override public AnnotationIterator getParameterAnnotationIterator() {return AnnotationIterator.EMPTY;}
@@ -111,7 +111,7 @@ public abstract class AnnotationsDirectory {
};
}
- return ImmutableSet.of();
+ return Collections.emptySet();
}
@Nonnull
@@ -132,7 +132,7 @@ public abstract class AnnotationsDirectory {
@Override public int size() { return size; }
};
}
- return ImmutableList.of();
+ return Collections.emptyList();
}
private static class AnnotationsDirectoryImpl extends AnnotationsDirectory {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/DebugInfo.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/DebugInfo.java
index 28684469..303c377a 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/DebugInfo.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/DebugInfo.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.util;
import com.android.tools.smali.dexlib2.AccessFlags;
import com.android.tools.smali.dexlib2.DebugItemType;
+import com.android.tools.smali.dexlib2.dexbacked.*;
import com.android.tools.smali.dexlib2.iface.MethodParameter;
import com.android.tools.smali.dexlib2.immutable.debug.ImmutableEndLocal;
import com.android.tools.smali.dexlib2.immutable.debug.ImmutableEpilogueBegin;
@@ -40,12 +41,7 @@ import com.android.tools.smali.dexlib2.immutable.debug.ImmutablePrologueEnd;
import com.android.tools.smali.dexlib2.immutable.debug.ImmutableRestartLocal;
import com.android.tools.smali.dexlib2.immutable.debug.ImmutableSetSourceFile;
import com.android.tools.smali.dexlib2.immutable.debug.ImmutableStartLocal;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterators;
-import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
-import com.android.tools.smali.dexlib2.dexbacked.DexBackedMethod;
-import com.android.tools.smali.dexlib2.dexbacked.DexBackedMethodImplementation;
-import com.android.tools.smali.dexlib2.dexbacked.DexReader;
+import com.android.tools.smali.util.IteratorUtils;
import com.android.tools.smali.dexlib2.iface.debug.DebugItem;
import com.android.tools.smali.dexlib2.iface.debug.EndLocal;
import com.android.tools.smali.dexlib2.iface.debug.LocalInfo;
@@ -53,6 +49,7 @@ import com.android.tools.smali.dexlib2.iface.debug.LocalInfo;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Iterator;
public abstract class DebugInfo implements Iterable<DebugItem> {
@@ -63,7 +60,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
* field, and will
* @return An iterator that yields the parameter names as strings
*/
- @Nonnull public abstract Iterator<String> getParameterNames(@Nullable DexReader reader);
+ @Nonnull public abstract Iterator<String> getParameterNames(@Nullable DexReader<? extends DexBuffer> reader);
/**
* Calculate and return the private size of debuginfo.
@@ -85,11 +82,11 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
private EmptyDebugInfo() {}
@Nonnull @Override public Iterator<DebugItem> iterator() {
- return ImmutableSet.<DebugItem>of().iterator();
+ return Collections.emptyIterator();
}
- @Nonnull @Override public Iterator<String> getParameterNames(@Nullable DexReader reader) {
- return ImmutableSet.<String>of().iterator();
+ @Nonnull @Override public Iterator<String> getParameterNames(@Nullable DexReader<? extends DexBuffer> reader) {
+ return Collections.emptyIterator();
}
@Override
@@ -120,14 +117,14 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
@Nonnull
@Override
public Iterator<DebugItem> iterator() {
- DexReader reader = dexFile.getDataBuffer().readerAt(debugInfoOffset);
+ DexReader<? extends DexBuffer> reader = dexFile.getDataBuffer().readerAt(debugInfoOffset);
final int lineNumberStart = reader.readBigUleb128();
int registerCount = methodImpl.getRegisterCount();
// Debug information can have events for addresses past the instructions.
// They have no relevance for the method in question and are excluded from the iterator.
final int lastInstructionAddress =
methodImpl.getInstructionsSize()
- - Iterators.getLast(methodImpl.getInstructions().iterator()).getCodeUnits();
+ - IteratorUtils.getLast(methodImpl.getInstructions().iterator()).getCodeUnits();
//TODO: does dalvik allow references to invalid registers?
final LocalInfo[] locals = new LocalInfo[registerCount];
@@ -182,7 +179,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
private int lineNumber = lineNumberStart;
@Nullable
- protected DebugItem readNextItem(@Nonnull DexReader reader) {
+ protected DebugItem readNextItem(@Nonnull DexReader<? extends DexBuffer> reader) {
while (codeAddress <= lastInstructionAddress) {
int next = reader.readUbyte();
switch (next) {
@@ -295,7 +292,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
@Nonnull
@Override
- public VariableSizeIterator<String> getParameterNames(@Nullable DexReader reader) {
+ public VariableSizeIterator<String> getParameterNames(@Nullable DexReader<? extends DexBuffer> reader) {
if (reader == null) {
reader = dexFile.getDataBuffer().readerAt(debugInfoOffset);
reader.skipUleb128();
@@ -303,7 +300,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
//TODO: make sure dalvik doesn't allow more parameter names than we have parameters
final int parameterNameCount = reader.readSmallUleb128();
return new VariableSizeIterator<String>(reader, parameterNameCount) {
- @Override protected String readNextItem(@Nonnull DexReader reader, int index) {
+ @Override protected String readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return dexFile.getStringSection().getOptional(reader.readSmallUleb128() - 1);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/EncodedArrayItemIterator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
index 93139431..b6f9fd24 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
@@ -31,6 +31,7 @@
package com.android.tools.smali.dexlib2.dexbacked.util;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.EncodedValue;
@@ -60,7 +61,7 @@ public abstract class EncodedArrayItemIterator {
}
private static class EncodedArrayItemIteratorImpl extends EncodedArrayItemIterator {
- @Nonnull private final DexReader reader;
+ @Nonnull private final DexReader<? extends DexBuffer> reader;
@Nonnull private final DexBackedDexFile dexFile;
private final int size;
private int index = 0;
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/ParameterIterator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/ParameterIterator.java
index bd4d9e7e..349495b2 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/ParameterIterator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/ParameterIterator.java
@@ -33,10 +33,11 @@ package com.android.tools.smali.dexlib2.dexbacked.util;
import com.android.tools.smali.dexlib2.base.BaseMethodParameter;
import com.android.tools.smali.dexlib2.iface.Annotation;
import com.android.tools.smali.dexlib2.iface.MethodParameter;
-import com.google.common.collect.ImmutableSet;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -66,7 +67,7 @@ public class ParameterIterator implements Iterator<MethodParameter> {
if (parameterAnnotations.hasNext()) {
annotations = parameterAnnotations.next();
} else {
- annotations = ImmutableSet.of();
+ annotations = Collections.emptySet();
}
if (parameterNames.hasNext()) {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeCollection.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeCollection.java
index c4b5af5a..4870a8dd 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeCollection.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeCollection.java
@@ -47,14 +47,14 @@ public abstract class VariableSizeCollection<T> extends AbstractCollection<T> {
this.size = size;
}
- protected abstract T readNextItem(@Nonnull DexReader reader, int index);
+ protected abstract T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index);
@Override
@Nonnull
public VariableSizeIterator<T> iterator() {
return new VariableSizeIterator<T>(buffer, offset, size) {
@Override
- protected T readNextItem(@Nonnull DexReader reader, int index) {
+ protected T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return VariableSizeCollection.this.readNextItem(reader, index);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeIterator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeIterator.java
index c5c59895..708a545c 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeIterator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeIterator.java
@@ -38,7 +38,7 @@ import java.util.Iterator;
import java.util.NoSuchElementException;
public abstract class VariableSizeIterator<T> implements Iterator<T> {
- @Nonnull private final DexReader reader;
+ @Nonnull private final DexReader<? extends DexBuffer> reader;
protected final int size;
private int index;
@@ -48,7 +48,7 @@ public abstract class VariableSizeIterator<T> implements Iterator<T> {
this.size = size;
}
- protected VariableSizeIterator(@Nonnull DexReader reader, int size) {
+ protected VariableSizeIterator(@Nonnull DexReader<? extends DexBuffer> reader, int size) {
this.reader = reader;
this.size = size;
}
@@ -60,7 +60,7 @@ public abstract class VariableSizeIterator<T> implements Iterator<T> {
* @param index The index of the item being read. This is guaranteed to be less than {@code size}
* @return The item that was read
*/
- protected abstract T readNextItem(@Nonnull DexReader reader, int index);
+ protected abstract T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index);
public int getReaderOffset() {
return reader.getOffset();
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeList.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeList.java
index b1b467a1..3973e575 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeList.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeList.java
@@ -47,7 +47,7 @@ public abstract class VariableSizeList<T> extends AbstractSequentialList<T> {
this.size = size;
}
- protected abstract T readNextItem(@Nonnull DexReader reader, int index);
+ protected abstract T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index);
@Override
@Nonnull
@@ -62,7 +62,7 @@ public abstract class VariableSizeList<T> extends AbstractSequentialList<T> {
public VariableSizeListIterator<T> listIterator(int index) {
VariableSizeListIterator<T> iterator = new VariableSizeListIterator<T>(buffer, offset, size) {
@Override
- protected T readNextItem(@Nonnull DexReader reader, int index) {
+ protected T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return VariableSizeList.this.readNextItem(reader, index);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java
index 36e4b421..7dfc1f93 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java
@@ -30,31 +30,83 @@
package com.android.tools.smali.dexlib2.dexbacked.util;
-import com.google.common.collect.AbstractIterator;
import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Iterator;
+import java.util.NoSuchElementException;
-public abstract class VariableSizeLookaheadIterator<T> extends AbstractIterator<T> implements Iterator<T> {
- @Nonnull private final DexReader reader;
+public abstract class VariableSizeLookaheadIterator<T> implements Iterator<T> {
+ /** We have computed the next element and haven't returned it yet. */
+ private static final int STATE_READY = 1;
+
+ /** We haven't yet computed or have already returned the element. */
+ private static final int STATE_NOT_READY = 2;
+
+ /** We have reached the end of the data and are finished. */
+ private static final int STATE_DONE = 3;
+
+ /** We've suffered an exception and are kaputt. */
+ private static final int STATE_FAILED = 4;
+
+ private int state = STATE_NOT_READY;
+ private T next;
+ @Nonnull
+ private final DexReader<? extends DexBuffer> reader;
protected VariableSizeLookaheadIterator(@Nonnull DexBuffer buffer, int offset) {
this.reader = buffer.readerAt(offset);
}
+ protected final T endOfData() {
+ state = STATE_DONE;
+ return null;
+ }
+
+ @Override
+ public final boolean hasNext() {
+ switch (state) {
+ case STATE_DONE:
+ return false;
+ case STATE_READY:
+ return true;
+ default:
+ }
+ return tryToComputeNext();
+ }
+
+ private boolean tryToComputeNext() {
+ state = STATE_FAILED; // temporary pessimism
+ next = computeNext();
+ if (state != STATE_DONE) {
+ state = STATE_READY;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public final T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ state = STATE_NOT_READY;
+ T result = next;
+ next = null;
+ return result;
+ }
+
/**
- * Reads the next item from reader. If the end of the list has been reached, it should call endOfData.
- *
- * endOfData has a return value of T, so you can simply {@code return endOfData()}
+ * Reads the next item from reader. If the end of the list has been reached, it should call
+ * endOfData. endOfData has a return value of T, so you can simply {@code return endOfData()}
*
* @return The item that was read. If endOfData was called, the return value is ignored.
*/
- @Nullable protected abstract T readNextItem(@Nonnull DexReader reader);
+ @Nullable
+ protected abstract T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader);
- @Override
protected T computeNext() {
return readNextItem(reader);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeSet.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeSet.java
index 36af102f..85a82274 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeSet.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/util/VariableSizeSet.java
@@ -47,14 +47,14 @@ public abstract class VariableSizeSet<T> extends AbstractSet<T> {
this.size = size;
}
- protected abstract T readNextItem(@Nonnull DexReader reader, int index);
+ protected abstract T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index);
@Override
@Nonnull
public VariableSizeIterator<T> iterator() {
return new VariableSizeIterator<T>(buffer, offset, size) {
@Override
- protected T readNextItem(@Nonnull DexReader reader, int index) {
+ protected T readNextItem(@Nonnull DexReader<? extends DexBuffer> reader, int index) {
return VariableSizeSet.this.readNextItem(reader, index);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedAnnotationEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedAnnotationEncodedValue.java
index 5660128e..341d73d5 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedAnnotationEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedAnnotationEncodedValue.java
@@ -33,6 +33,7 @@ package com.android.tools.smali.dexlib2.dexbacked.value;
import com.android.tools.smali.dexlib2.base.value.BaseAnnotationEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedAnnotationElement;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import com.android.tools.smali.dexlib2.dexbacked.util.VariableSizeSet;
import com.android.tools.smali.dexlib2.iface.value.AnnotationEncodedValue;
@@ -46,7 +47,7 @@ public class DexBackedAnnotationEncodedValue extends BaseAnnotationEncodedValue
private final int elementCount;
private final int elementsOffset;
- public DexBackedAnnotationEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public DexBackedAnnotationEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
this.dexFile = dexFile;
this.type = dexFile.getTypeSection().get(reader.readSmallUleb128());
this.elementCount = reader.readSmallUleb128();
@@ -54,13 +55,13 @@ public class DexBackedAnnotationEncodedValue extends BaseAnnotationEncodedValue
skipElements(reader, elementCount);
}
- public static void skipFrom(@Nonnull DexReader reader) {
+ public static void skipFrom(@Nonnull DexReader<? extends DexBuffer> reader) {
reader.skipUleb128(); // type
int elementCount = reader.readSmallUleb128();
skipElements(reader, elementCount);
}
- private static void skipElements(@Nonnull DexReader reader, int elementCount) {
+ private static void skipElements(@Nonnull DexReader<? extends DexBuffer> reader, int elementCount) {
for (int i=0; i<elementCount; i++) {
reader.skipUleb128();
DexBackedEncodedValue.skipFrom(reader);
@@ -75,7 +76,7 @@ public class DexBackedAnnotationEncodedValue extends BaseAnnotationEncodedValue
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile.getDataBuffer(), elementsOffset, elementCount) {
@Nonnull
@Override
- protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader dexReader, int index) {
+ protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader<? extends DexBuffer> dexReader, int index) {
return new DexBackedAnnotationElement(dexFile, dexReader);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedArrayEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedArrayEncodedValue.java
index bd1d851e..4df35e7c 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedArrayEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedArrayEncodedValue.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.value;
import com.android.tools.smali.dexlib2.base.value.BaseArrayEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import com.android.tools.smali.dexlib2.dexbacked.util.VariableSizeList;
import com.android.tools.smali.dexlib2.iface.value.ArrayEncodedValue;
@@ -45,19 +46,19 @@ public class DexBackedArrayEncodedValue extends BaseArrayEncodedValue implements
private final int elementCount;
private final int encodedArrayOffset;
- public DexBackedArrayEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public DexBackedArrayEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
this.dexFile = dexFile;
this.elementCount = reader.readSmallUleb128();
this.encodedArrayOffset = reader.getOffset();
skipElementsFrom(reader, elementCount);
}
- public static void skipFrom(@Nonnull DexReader reader) {
+ public static void skipFrom(@Nonnull DexReader<? extends DexBuffer> reader) {
int elementCount = reader.readSmallUleb128();
skipElementsFrom(reader, elementCount);
}
- private static void skipElementsFrom(@Nonnull DexReader reader, int elementCount) {
+ private static void skipElementsFrom(@Nonnull DexReader<? extends DexBuffer> reader, int elementCount) {
for (int i=0; i<elementCount; i++) {
DexBackedEncodedValue.skipFrom(reader);
}
@@ -69,7 +70,7 @@ public class DexBackedArrayEncodedValue extends BaseArrayEncodedValue implements
return new VariableSizeList<EncodedValue>(dexFile.getDataBuffer(), encodedArrayOffset, elementCount) {
@Nonnull
@Override
- protected EncodedValue readNextItem(@Nonnull DexReader dexReader, int index) {
+ protected EncodedValue readNextItem(@Nonnull DexReader<? extends DexBuffer> dexReader, int index) {
return DexBackedEncodedValue.readFrom(dexFile, dexReader);
}
};
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEncodedValue.java
index 39fbea34..a21e9ca1 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEncodedValue.java
@@ -31,6 +31,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
import com.android.tools.smali.dexlib2.ValueType;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.immutable.value.ImmutableBooleanEncodedValue;
import com.android.tools.smali.dexlib2.immutable.value.ImmutableByteEncodedValue;
import com.android.tools.smali.dexlib2.immutable.value.ImmutableCharEncodedValue;
@@ -50,7 +51,7 @@ import javax.annotation.Nonnull;
public abstract class DexBackedEncodedValue {
@Nonnull
- public static EncodedValue readFrom(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader) {
+ public static EncodedValue readFrom(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader) {
int startOffset = reader.getOffset();
try {
@@ -123,7 +124,7 @@ public abstract class DexBackedEncodedValue {
}
}
- public static void skipFrom(@Nonnull DexReader reader) {
+ public static void skipFrom(@Nonnull DexReader<? extends DexBuffer> reader) {
int startOffset = reader.getOffset();
try {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEnumEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEnumEncodedValue.java
index 91da14c2..b5e2a766 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEnumEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedEnumEncodedValue.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedFieldReference;
import com.android.tools.smali.dexlib2.base.value.BaseEnumEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -42,7 +43,7 @@ public class DexBackedEnumEncodedValue extends BaseEnumEncodedValue {
@Nonnull public final DexBackedDexFile dexFile;
private final int fieldIndex;
- public DexBackedEnumEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedEnumEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
fieldIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedFieldEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedFieldEncodedValue.java
index 68362650..2e6a2f84 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedFieldEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedFieldEncodedValue.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedFieldReference;
import com.android.tools.smali.dexlib2.base.value.BaseFieldEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -42,7 +43,8 @@ public class DexBackedFieldEncodedValue extends BaseFieldEncodedValue {
@Nonnull public final DexBackedDexFile dexFile;
private final int fieldIndex;
- public DexBackedFieldEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedFieldEncodedValue(@Nonnull DexBackedDexFile dexFile,
+ @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
fieldIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java
index 6e941917..3207f0e3 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedMethodReference;
import com.android.tools.smali.dexlib2.base.value.BaseMethodEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -42,7 +43,8 @@ public class DexBackedMethodEncodedValue extends BaseMethodEncodedValue {
@Nonnull public final DexBackedDexFile dexFile;
private final int methodIndex;
- public DexBackedMethodEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedMethodEncodedValue(@Nonnull DexBackedDexFile dexFile,
+ @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
methodIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java
index 5708f8e3..78c7451d 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedMethodHandleReference;
import com.android.tools.smali.dexlib2.base.value.BaseMethodHandleEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -43,7 +44,7 @@ public class DexBackedMethodHandleEncodedValue extends BaseMethodHandleEncodedVa
private final int methodHandleIndex;
public DexBackedMethodHandleEncodedValue(
- @Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ @Nonnull DexBackedDexFile dexFile, @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
this.methodHandleIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java
index 4f8b1a6c..f0d28d65 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java
@@ -30,6 +30,7 @@
package com.android.tools.smali.dexlib2.dexbacked.value;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedMethodProtoReference;
import com.android.tools.smali.dexlib2.base.value.BaseMethodTypeEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -42,7 +43,8 @@ public class DexBackedMethodTypeEncodedValue extends BaseMethodTypeEncodedValue
@Nonnull public final DexBackedDexFile dexFile;
private final int methodProtoIndex;
- public DexBackedMethodTypeEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedMethodTypeEncodedValue(@Nonnull DexBackedDexFile dexFile,
+ @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
this.methodProtoIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedStringEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedStringEncodedValue.java
index de467650..755de8ac 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedStringEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedStringEncodedValue.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.value;
import com.android.tools.smali.dexlib2.base.value.BaseStringEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import javax.annotation.Nonnull;
@@ -40,7 +41,8 @@ public class DexBackedStringEncodedValue extends BaseStringEncodedValue {
@Nonnull public final DexBackedDexFile dexFile;
private final int stringIndex;
- public DexBackedStringEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedStringEncodedValue(@Nonnull DexBackedDexFile dexFile,
+ @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
stringIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedTypeEncodedValue.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedTypeEncodedValue.java
index 3c582b6e..16506cb6 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedTypeEncodedValue.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/value/DexBackedTypeEncodedValue.java
@@ -32,6 +32,7 @@ package com.android.tools.smali.dexlib2.dexbacked.value;
import com.android.tools.smali.dexlib2.base.value.BaseTypeEncodedValue;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
+import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
import com.android.tools.smali.dexlib2.dexbacked.DexReader;
import javax.annotation.Nonnull;
@@ -40,7 +41,8 @@ public class DexBackedTypeEncodedValue extends BaseTypeEncodedValue {
@Nonnull public final DexBackedDexFile dexFile;
private final int typeIndex;
- public DexBackedTypeEncodedValue(@Nonnull DexBackedDexFile dexFile, @Nonnull DexReader reader, int valueArg) {
+ public DexBackedTypeEncodedValue(@Nonnull DexBackedDexFile dexFile,
+ @Nonnull DexReader<? extends DexBuffer> reader, int valueArg) {
this.dexFile = dexFile;
typeIndex = reader.readSizedSmallUint(valueArg + 1);
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/util/DexUtil.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/util/DexUtil.java
index 6c70a3e9..9bbfc11d 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/util/DexUtil.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/util/DexUtil.java
@@ -30,12 +30,12 @@
package com.android.tools.smali.dexlib2.util;
-import com.google.common.io.ByteStreams;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile.NotADexFile;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedOdexFile.NotAnOdexFile;
import com.android.tools.smali.dexlib2.dexbacked.raw.CdexHeaderItem;
import com.android.tools.smali.dexlib2.dexbacked.raw.HeaderItem;
import com.android.tools.smali.dexlib2.dexbacked.raw.OdexHeaderItem;
+import com.android.tools.smali.util.InputStreamUtil;
import javax.annotation.Nonnull;
import java.io.EOFException;
@@ -62,7 +62,7 @@ public class DexUtil {
inputStream.mark(44);
byte[] partialHeader = new byte[44];
try {
- ByteStreams.readFully(inputStream, partialHeader);
+ InputStreamUtil.readFully(inputStream, partialHeader);
} catch (EOFException ex) {
throw new NotADexFile("File is too short");
} finally {
@@ -160,7 +160,7 @@ public class DexUtil {
inputStream.mark(8);
byte[] partialHeader = new byte[8];
try {
- ByteStreams.readFully(inputStream, partialHeader);
+ InputStreamUtil.readFully(inputStream, partialHeader);
} catch (EOFException ex) {
throw new NotAnOdexFile("File is too short");
} finally {
diff --git a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/writer/DexWriter.java b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/writer/DexWriter.java
index 757955bf..205ca2fe 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/dexlib2/writer/DexWriter.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/dexlib2/writer/DexWriter.java
@@ -374,11 +374,10 @@ public abstract class DexWriter<
@Nonnull DeferredOutputStreamFactory tempFactory) throws IOException {
try {
int dataSectionOffset = getDataSectionOffset();
- DexDataWriter headerWriter = outputAt(dest, 0);
- DexDataWriter indexWriter = outputAt(dest, HeaderItem.ITEM_SIZE);
- DexDataWriter offsetWriter = outputAt(dest, dataSectionOffset);
- try {
+ try (DexDataWriter headerWriter = outputAt(dest, 0);
+ DexDataWriter indexWriter = outputAt(dest, HeaderItem.ITEM_SIZE);
+ DexDataWriter offsetWriter = outputAt(dest, dataSectionOffset)) {
writeStrings(indexWriter, offsetWriter);
writeTypes(indexWriter);
writeTypeLists(offsetWriter);
@@ -387,25 +386,19 @@ public abstract class DexWriter<
writeMethods(indexWriter);
// encoded arrays depend on method handles..
- DexDataWriter methodHandleWriter = outputAt(dest, indexWriter.getPosition() +
+ try (DexDataWriter methodHandleWriter = outputAt(dest, indexWriter.getPosition() +
classSection.getItemCount() * ClassDefItem.ITEM_SIZE +
- callSiteSection.getItemCount() * CallSiteIdItem.ITEM_SIZE);
- try {
+ callSiteSection.getItemCount() * CallSiteIdItem.ITEM_SIZE)) {
writeMethodHandles(methodHandleWriter);
- } finally {
- methodHandleWriter.close();
}
// call sites depend on encoded arrays..
writeEncodedArrays(offsetWriter);
// class defs depend on method handles and call sites..
- DexDataWriter callSiteWriter = outputAt(dest, indexWriter.getPosition() +
- classSection.getItemCount() * ClassDefItem.ITEM_SIZE);
- try {
+ try (DexDataWriter callSiteWriter = outputAt(dest, indexWriter.getPosition() +
+ classSection.getItemCount() * ClassDefItem.ITEM_SIZE)) {
writeCallSites(callSiteWriter);
- } finally {
- callSiteWriter.close();
}
writeAnnotations(offsetWriter);
@@ -417,10 +410,6 @@ public abstract class DexWriter<
writeMapItem(offsetWriter);
writeHeader(headerWriter, dataSectionOffset, offsetWriter.getPosition());
- } finally {
- headerWriter.close();
- indexWriter.close();
- offsetWriter.close();
}
updateSignature(dest);
updateChecksum(dest);
@@ -576,7 +565,7 @@ public abstract class DexWriter<
hiddenApiRestrictionsOffset = offsetWriter.getPosition();
List<Map.Entry<? extends ClassKey, Integer>> classEntriesValueSorted = Lists.newArrayList(classSection.getItems());
- Collections.sort(classEntriesValueSorted, DexWriter.comparableValueComparator());
+ classEntriesValueSorted.sort(DexWriter.comparableValueComparator());
RestrictionsWriter restrictionsWriter = new RestrictionsWriter(dataStore, offsetWriter, classEntriesValueSorted.size());
try {
@@ -677,15 +666,9 @@ public abstract class DexWriter<
}
public void close() throws IOException {
- DexDataWriter writer = null;
offsetsWriter.close();
- try {
- writer = outputAt(dataStore, startOffset);
+ try (DexDataWriter writer = outputAt(dataStore, startOffset)) {
writer.writeInt(restrictionsWriter.getPosition() - startOffset);
- } finally {
- if (writer != null) {
- writer.close();
- }
}
}
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/ChainedIterator.java b/dexlib2/src/main/java/com/android/tools/smali/util/ChainedIterator.java
new file mode 100644
index 00000000..ed8eab1f
--- /dev/null
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/ChainedIterator.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2024, Google LLC
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * Neither the name of Google LLC nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.tools.smali.util;
+
+import java.lang.Iterable;
+import java.util.Iterator;
+import org.checkerframework.checker.nullness.qual.Nullable;
+
+/**
+ * Combines two iterators into a single iterator. The returned iterator iterates across the elements
+ * in {@code a}, followed by the elements in {@code b}. The source iterators are not polled until
+ * necessary.
+ * <p>
+ * The returned iterator does not support {@code remove()}.
+ */
+public class ChainedIterator<T extends @Nullable Object> implements Iterator<T>, Iterable<T> {
+ Iterator<T> iteratorA;
+ Iterator<T> iteratorB;
+
+ public ChainedIterator(Iterable<T> iterableA, Iterable<T> iterableB) {
+ this.iteratorA = iterableA.iterator();
+ this.iteratorB = iterableB.iterator();
+ }
+
+ @Override
+ public final boolean hasNext() {
+ return iteratorA.hasNext() || iteratorB.hasNext();
+ }
+
+ @Override
+ public final T next() {
+ if (iteratorA.hasNext()) {
+ return iteratorA.next();
+ }
+ return iteratorB.next();
+ }
+
+ @Override
+ public final void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public final Iterator<T> iterator() {
+ return this;
+ }
+}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/CollectionUtils.java b/dexlib2/src/main/java/com/android/tools/smali/util/CollectionUtils.java
index 75bf7f9c..2fe222af 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/util/CollectionUtils.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/CollectionUtils.java
@@ -32,13 +32,13 @@ package com.android.tools.smali.util;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Ordering;
-import com.google.common.primitives.Ints;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
+
import javax.annotation.Nonnull;
public class CollectionUtils {
@@ -64,7 +64,7 @@ public class CollectionUtils {
public static <T extends Comparable<? super T>> int compareAsList(@Nonnull Collection<? extends T> list1,
@Nonnull Collection<? extends T> list2) {
- int res = Ints.compare(list1.size(), list2.size());
+ int res = Integer.compare(list1.size(), list2.size());
if (res != 0) return res;
Iterator<? extends T> elements2 = list2.iterator();
for (T element1: list1) {
@@ -114,7 +114,7 @@ public class CollectionUtils {
public static <T> int compareAsList(@Nonnull Comparator<? super T> elementComparator,
@Nonnull Collection<? extends T> list1,
@Nonnull Collection<? extends T> list2) {
- int res = Ints.compare(list1.size(), list2.size());
+ int res = Integer.compare(list1.size(), list2.size());
if (res != 0) return res;
Iterator<? extends T> elements2 = list2.iterator();
for (T element1: list1) {
@@ -139,7 +139,7 @@ public class CollectionUtils {
if (it instanceof SortedSet) {
SortedSet<? extends T> sortedSet = (SortedSet<? extends T>)it;
Comparator<?> comparator = sortedSet.comparator();
- return (comparator == null) || comparator.equals(Ordering.natural());
+ return (comparator == null) || comparator.equals(NaturalOrdering.INSTANCE);
}
return false;
}
@@ -150,7 +150,7 @@ public class CollectionUtils {
SortedSet<? extends T> sortedSet = (SortedSet<? extends T>)it;
Comparator<?> comparator = sortedSet.comparator();
if (comparator == null) {
- return elementComparator.equals(Ordering.natural());
+ return elementComparator.equals(NaturalOrdering.INSTANCE);
}
return elementComparator.equals(comparator);
}
@@ -162,7 +162,8 @@ public class CollectionUtils {
if (isNaturalSortedSet(collection)) {
return (SortedSet<? extends T>)collection;
}
- return ImmutableSortedSet.copyOf(collection);
+ SortedSet<? extends T> sortedSet = ArraySortedSet.of(NaturalOrdering.INSTANCE, collection.toArray());
+ return Collections.unmodifiableSortedSet(sortedSet);
}
@Nonnull
@@ -175,6 +176,7 @@ public class CollectionUtils {
return sortedSet;
}
}
+
return ImmutableSortedSet.copyOf(elementComparator, collection);
}
@@ -191,7 +193,7 @@ public class CollectionUtils {
public static <T extends Comparable<T>> int compareAsSet(@Nonnull Collection<? extends T> set1,
@Nonnull Collection<? extends T> set2) {
- int res = Ints.compare(set1.size(), set2.size());
+ int res = Integer.compare(set1.size(), set2.size());
if (res != 0) return res;
SortedSet<? extends T> sortedSet1 = toNaturalSortedSet(set1);
@@ -208,7 +210,7 @@ public class CollectionUtils {
public static <T> int compareAsSet(@Nonnull Comparator<? super T> elementComparator,
@Nonnull Collection<? extends T> list1,
@Nonnull Collection<? extends T> list2) {
- int res = Ints.compare(list1.size(), list2.size());
+ int res = Integer.compare(list1.size(), list2.size());
if (res != 0) return res;
SortedSet<? extends T> set1 = toSortedSet(elementComparator, list1);
@@ -221,4 +223,34 @@ public class CollectionUtils {
}
return 0;
}
+
+ public static <T> Comparator<? super T> usingToStringOrdering() {
+ return UsingToStringOrdering.INSTANCE;
+ }
+
+ public static <T> Comparator<? super T> naturalOrdering() {
+ return NaturalOrdering.INSTANCE;
+ }
+
+ public final static class UsingToStringOrdering<T extends Object> implements Comparator<T> {
+ static final UsingToStringOrdering INSTANCE = new UsingToStringOrdering();
+
+ @Override
+ public int compare(Object left, Object right) {
+ return left.toString().compareTo(right.toString());
+ }
+
+ private UsingToStringOrdering() {}
+ }
+
+ public final static class NaturalOrdering<T extends Comparable<? super T>> implements Comparator<T> {
+ static final NaturalOrdering INSTANCE = new NaturalOrdering();
+
+ @Override
+ public int compare(T left, T right) {
+ return left.compareTo(right);
+ }
+
+ private NaturalOrdering() {}
+ }
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/InputStreamUtil.java b/dexlib2/src/main/java/com/android/tools/smali/util/InputStreamUtil.java
new file mode 100644
index 00000000..46f696a1
--- /dev/null
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/InputStreamUtil.java
@@ -0,0 +1,262 @@
+
+/*
+ * Copyright 2024, Google LLC
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * Neither the name of Google LLC nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.tools.smali.util;
+
+import static java.lang.Math.max;
+import static java.lang.Math.min;
+
+import java.io.DataInput;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Queue;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Utility methods for working with {@link InputStream}. Based on guava ByteStreams.
+ */
+public final class InputStreamUtil {
+
+ private static final int BUFFER_SIZE = 8192;
+
+ /** Max array length on JVM. */
+ private static final int MAX_ARRAY_LEN = Integer.MAX_VALUE - 8;
+
+ /** Large enough to never need to expand, given the geometric progression of buffer sizes. */
+ private static final int TO_BYTE_ARRAY_DEQUE_SIZE = 20;
+
+ /**
+ * Reads all bytes from an input stream into a byte array. Does not close the stream.
+ *
+ * @param in the input stream to read from
+ * @return a byte array containing all the bytes from the stream
+ * @throws IOException if an I/O error occurs
+ */
+ public static byte[] toByteArray(InputStream in) throws IOException {
+ int totalLen = 0;
+ ArrayDeque<byte[]> bufs = new ArrayDeque<byte[]>(TO_BYTE_ARRAY_DEQUE_SIZE);
+
+ // Roughly size to match what has been read already. Some file systems, such as procfs,
+ // return 0
+ // as their length. These files are very small, so it's wasteful to allocate an 8KB buffer.
+ int initialBufferSize = min(BUFFER_SIZE, max(128, Integer.highestOneBit(totalLen) * 2));
+ // Starting with an 8k buffer, double the size of each successive buffer. Smaller buffers
+ // quadruple in size until they reach 8k, to minimize the number of small reads for longer
+ // streams. Buffers are retained in a deque so that there's no copying between buffers while
+ // reading and so all of the bytes in each new allocated buffer are available for reading
+ // from
+ // the stream.
+ for (int bufSize = initialBufferSize; totalLen < MAX_ARRAY_LEN; bufSize =
+ saturatedMultiply(bufSize, bufSize < 4096 ? 4 : 2)) {
+ byte[] buf = new byte[min(bufSize, MAX_ARRAY_LEN - totalLen)];
+ bufs.add(buf);
+ int off = 0;
+ while (off < buf.length) {
+ // always OK to fill buf; its size plus the rest of bufs is never more than
+ // MAX_ARRAY_LEN
+ int r = in.read(buf, off, buf.length - off);
+ if (r == -1) {
+ return combineBuffers(bufs, totalLen);
+ }
+ off += r;
+ totalLen += r;
+ }
+ }
+
+ // read MAX_ARRAY_LEN bytes without seeing end of stream
+ if (in.read() == -1) {
+ // oh, there's the end of the stream
+ return combineBuffers(bufs, MAX_ARRAY_LEN);
+ } else {
+ throw new OutOfMemoryError("input is too large to fit in a byte array");
+ }
+ }
+
+ private static int saturatedMultiply(int a, int b) {
+ long value = (long) a * b;
+ if (value > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ }
+ if (value < Integer.MIN_VALUE) {
+ return Integer.MIN_VALUE;
+ }
+ return (int) value;
+ }
+
+ private static byte[] combineBuffers(Queue<byte[]> bufs, int totalLen) {
+ if (bufs.isEmpty()) {
+ return new byte[0];
+ }
+ byte[] result = bufs.remove();
+ if (result.length == totalLen) {
+ return result;
+ }
+ int remaining = totalLen - result.length;
+ result = Arrays.copyOf(result, totalLen);
+ while (remaining > 0) {
+ byte[] buf = bufs.remove();
+ int bytesToCopy = min(remaining, buf.length);
+ int resultOffset = totalLen - remaining;
+ System.arraycopy(buf, 0, result, resultOffset, bytesToCopy);
+ remaining -= bytesToCopy;
+ }
+ return result;
+ }
+
+ /**
+ * Discards {@code n} bytes of data from the input stream. This method will block until the full
+ * amount has been skipped. Does not close the stream.
+ *
+ * @param in the input stream to read from
+ * @param n the number of bytes to skip
+ * @throws EOFException if this stream reaches the end before skipping all the bytes
+ * @throws IOException if an I/O error occurs, or the stream does not support skipping
+ */
+ public static void skipFully(InputStream in, long n) throws IOException {
+ long skipped = skipUpTo(in, n);
+ if (skipped < n) {
+ throw new EOFException(
+ "reached end of stream after skipping " + skipped + " bytes; " + n
+ + " bytes expected");
+ }
+ }
+
+ /**
+ * Discards up to {@code n} bytes of data from the input stream. This method will block until
+ * either the full amount has been skipped or until the end of the stream is reached, whichever
+ * happens first. Returns the total number of bytes skipped.
+ */
+ static long skipUpTo(InputStream in, long n) throws IOException {
+ long totalSkipped = 0;
+ // A buffer is allocated if skipSafely does not skip any bytes.
+ byte[] buf = null;
+
+ while (totalSkipped < n) {
+ long remaining = n - totalSkipped;
+ long skipped = skipSafely(in, remaining);
+
+ if (skipped == 0) {
+ // Do a buffered read since skipSafely could return 0 repeatedly, for example if
+ // in.available() always returns 0 (the default).
+ int skip = (int) Math.min(remaining, BUFFER_SIZE);
+ if (buf == null) {
+ // Allocate a buffer bounded by the maximum size that can be requested, for
+ // example an array of BUFFER_SIZE is unnecessary when the value of remaining
+ // is smaller.
+ buf = new byte[skip];
+ }
+ if ((skipped = in.read(buf, 0, skip)) == -1) {
+ // Reached EOF
+ break;
+ }
+ }
+
+ totalSkipped += skipped;
+ }
+
+ return totalSkipped;
+ }
+
+ /**
+ * Attempts to skip up to {@code n} bytes from the given input stream, but not more than {@code
+ * in.available()} bytes. This prevents {@code FileInputStream} from skipping more bytes than
+ * actually remain in the file, something that it {@linkplain java.io.FileInputStream#skip(long)
+ * specifies} it can do in its Javadoc despite the fact that it is violating the contract of
+ * {@code InputStream.skip()}.
+ */
+ private static long skipSafely(InputStream in, long n) throws IOException {
+ int available = in.available();
+ return available == 0 ? 0 : in.skip(Math.min(available, n));
+ }
+
+ /**
+ * Attempts to read enough bytes from the stream to fill the given byte array, with the same
+ * behavior as {@link DataInput#readFully(byte[])}. Does not close the stream.
+ *
+ * @param in the input stream to read from.
+ * @param b the buffer into which the data is read.
+ * @throws EOFException if this stream reaches the end before reading all the bytes.
+ * @throws IOException if an I/O error occurs.
+ */
+ public static void readFully(@Nonnull InputStream in, @Nonnull byte[] b) throws IOException {
+ int read = read(in, b, 0, b.length);
+ if (read != b.length) {
+ throw new EOFException(
+ "reached end of stream after reading " + read + " bytes; " + b.length
+ + " bytes expected");
+ }
+ }
+
+ /**
+ * Reads some bytes from an input stream and stores them into the buffer array {@code b}. This
+ * method blocks until {@code len} bytes of input data have been read into the array, or end of
+ * file is detected. The number of bytes read is returned, possibly zero. Does not close the
+ * stream.
+ * <p>
+ * A caller can detect EOF if the number of bytes read is less than {@code len}. All subsequent
+ * calls on the same stream will return zero.
+ * <p>
+ * If {@code b} is null, a {@code NullPointerException} is thrown. If {@code off} is negative,
+ * or {@code len} is negative, or {@code off+len} is greater than the length of the array {@code
+ * b}, then an {@code IndexOutOfBoundsException} is thrown. If {@code len} is zero, then no
+ * bytes are read. Otherwise, the first byte read is stored into element {@code b[off]}, the
+ * next one into {@code b[off+1]}, and so on. The number of bytes read is, at most, equal to
+ * {@code len}.
+ *
+ * @param in the input stream to read from
+ * @param b the buffer into which the data is read
+ * @param off an int specifying the offset into the data
+ * @param len an int specifying the number of bytes to read
+ * @return the number of bytes read
+ * @throws IOException if an I/O error occurs
+ * @throws IndexOutOfBoundsException if {@code off} is negative, if {@code len} is negative, or
+ * if {@code off + len} is greater than {@code b.length}
+ */
+ public static int read(@Nonnull InputStream in, @Nonnull byte[] b, int off, int len) throws IOException {
+ if (off < 0 || len < 0 || off + len > b.length) {
+ throw new IndexOutOfBoundsException("trying to read invalid offset/length range");
+ }
+
+ int total = 0;
+ while (total < len) {
+ int result = in.read(b, off + total, len - total);
+ if (result == -1) {
+ break;
+ }
+ total += result;
+ }
+ return total;
+ }
+}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/IteratorUtils.java b/dexlib2/src/main/java/com/android/tools/smali/util/IteratorUtils.java
new file mode 100644
index 00000000..6f6c8576
--- /dev/null
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/IteratorUtils.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2024, Google LLC
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * Neither the name of Google LLC nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.tools.smali.util;
+
+import java.util.Iterator;
+
+import org.checkerframework.checker.nullness.qual.Nullable;
+
+public final class IteratorUtils {
+
+ public static <T extends @Nullable Object> T getLast(Iterator<T> iterator) {
+ while (true) {
+ T current = iterator.next();
+ if (!iterator.hasNext()) {
+ return current;
+ }
+ }
+ }
+}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/StringUtils.java b/dexlib2/src/main/java/com/android/tools/smali/util/StringUtils.java
index 4c567d17..730caa8f 100644
--- a/dexlib2/src/main/java/com/android/tools/smali/util/StringUtils.java
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/StringUtils.java
@@ -33,6 +33,8 @@ package com.android.tools.smali.util;
import com.android.tools.smali.dexlib2.formatter.DexFormattedWriter;
import java.io.IOException;
import java.io.Writer;
+import java.util.Iterator;
+import java.util.List;
public class StringUtils {
@@ -122,4 +124,17 @@ public class StringUtils {
return sb.toString();
}
+
+ public static String join(List<? extends Object> parts, String separator) {
+ StringBuilder builder = new StringBuilder();
+ Iterator<? extends Object> it = parts.iterator();
+ if (it.hasNext()) {
+ builder.append(it.hasNext());
+ }
+ while (it.hasNext()) {
+ builder.append(separator);
+ builder.append(it.next());
+ }
+ return builder.toString();
+ }
}
diff --git a/dexlib2/src/main/java/com/android/tools/smali/util/TransformedIterator.java b/dexlib2/src/main/java/com/android/tools/smali/util/TransformedIterator.java
new file mode 100644
index 00000000..bf89ea99
--- /dev/null
+++ b/dexlib2/src/main/java/com/android/tools/smali/util/TransformedIterator.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2024, Google LLC
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * Neither the name of Google LLC nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.tools.smali.util;
+
+import java.util.Iterator;
+import java.util.function.Function;
+import org.checkerframework.checker.nullness.qual.Nullable;
+
+/**
+ * An iterator that will return the results of applying {@code transformFunction} to each element of
+ * {@code backingIterator}.
+ * <p>
+ * The returned iterator supports {@code remove()} if {@code backingIterator} does.
+ */
+public class TransformedIterator<F extends @Nullable Object, T extends @Nullable Object>
+ implements Iterator<T> {
+ final Iterator<? extends F> backingIterator;
+ final Function<F, T> transformFunction;
+
+ public TransformedIterator(Iterator<? extends F> backingIterator,
+ Function<F, T> transformFunction) {
+ this.backingIterator = backingIterator;
+ this.transformFunction = transformFunction;
+ }
+
+ @Override
+ public final boolean hasNext() {
+ return backingIterator.hasNext();
+ }
+
+ @Override
+ public final T next() {
+ return transformFunction.apply(backingIterator.next());
+ }
+
+ @Override
+ public final void remove() {
+ backingIterator.remove();
+ }
+}
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/AccessorTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/AccessorTest.java
index a53cf839..ac63ac1a 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/AccessorTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/AccessorTest.java
@@ -31,7 +31,6 @@
package com.android.tools.smali.dexlib2;
import com.google.common.collect.ImmutableMap;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.dexlib2.iface.DexFile;
import com.android.tools.smali.dexlib2.iface.Method;
@@ -41,6 +40,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction;
import com.android.tools.smali.dexlib2.iface.reference.FieldReference;
import com.android.tools.smali.dexlib2.iface.reference.MethodReference;
import com.android.tools.smali.dexlib2.util.SyntheticAccessorResolver;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/CommonSuperclassTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/CommonSuperclassTest.java
index 6d4c0159..95d4309d 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/CommonSuperclassTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/CommonSuperclassTest.java
@@ -32,10 +32,10 @@ package com.android.tools.smali.dexlib2.analysis;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.Opcodes;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.dexlib2.immutable.ImmutableDexFile;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/util/SuperclassChainTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/util/SuperclassChainTest.java
index df8502d0..f228fd47 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/util/SuperclassChainTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/analysis/util/SuperclassChainTest.java
@@ -33,13 +33,13 @@ package com.android.tools.smali.dexlib2.analysis.util;
import com.android.tools.smali.dexlib2.analysis.TestUtils;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.Opcodes;
import com.android.tools.smali.dexlib2.analysis.ClassPath;
import com.android.tools.smali.dexlib2.analysis.DexClassProvider;
import com.android.tools.smali.dexlib2.analysis.TypeProto;
import com.android.tools.smali.dexlib2.iface.ClassDef;
import com.android.tools.smali.dexlib2.immutable.ImmutableDexFile;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixGotoTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixGotoTest.java
index f98abd24..94362896 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixGotoTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixGotoTest.java
@@ -30,10 +30,7 @@
package com.android.tools.smali.dexlib2.builder;
-import com.android.tools.smali.dexlib2.builder.Label;
-import com.android.tools.smali.dexlib2.builder.MethodImplementationBuilder;
import com.google.common.collect.Lists;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.Opcode;
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10t;
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10x;
@@ -41,6 +38,7 @@ import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction20t
import com.android.tools.smali.dexlib2.iface.MethodImplementation;
import com.android.tools.smali.dexlib2.iface.instruction.Instruction;
import com.android.tools.smali.dexlib2.iface.instruction.OffsetInstruction;
+import org.junit.Assert;
import org.junit.Test;
import java.util.List;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixOffsetsTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixOffsetsTest.java
index 07a4b5da..7e4579a5 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixOffsetsTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/builder/FixOffsetsTest.java
@@ -30,10 +30,7 @@
package com.android.tools.smali.dexlib2.builder;
-import com.android.tools.smali.dexlib2.builder.Label;
-import com.android.tools.smali.dexlib2.builder.MethodImplementationBuilder;
import com.google.common.collect.Lists;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.Opcode;
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10t;
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10x;
@@ -44,6 +41,7 @@ import com.android.tools.smali.dexlib2.iface.debug.DebugItem;
import com.android.tools.smali.dexlib2.iface.debug.LineNumber;
import com.android.tools.smali.dexlib2.iface.instruction.Instruction;
import com.android.tools.smali.dexlib2.iface.instruction.OffsetInstruction;
+import org.junit.Assert;
import org.junit.Test;
import java.util.List;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexBufferTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexBufferTest.java
index b05333ed..0211523e 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexBufferTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexBufferTest.java
@@ -30,9 +30,8 @@
package com.android.tools.smali.dexlib2.dexbacked;
-import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
-import junit.framework.Assert;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Test;
import java.nio.ByteBuffer;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderLeb128Test.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderLeb128Test.java
index 3541df80..55c2d2f3 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderLeb128Test.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderLeb128Test.java
@@ -30,10 +30,8 @@
package com.android.tools.smali.dexlib2.dexbacked;
-import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
-import com.android.tools.smali.dexlib2.dexbacked.DexReader;
-import junit.framework.Assert;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Test;
public class BaseDexReaderLeb128Test {
@@ -248,7 +246,7 @@ public class BaseDexReaderLeb128Test {
private void performTest(int expectedValue, byte[] buf, int expectedLength) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSmallUleb128());
Assert.assertEquals(expectedLength, reader.getOffset());
@@ -262,7 +260,7 @@ public class BaseDexReaderLeb128Test {
private void performFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.peekSmallUleb128Size();
Assert.fail();
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderSleb128Test.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderSleb128Test.java
index 38de9219..7c49687a 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderSleb128Test.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderSleb128Test.java
@@ -30,10 +30,8 @@
package com.android.tools.smali.dexlib2.dexbacked;
-import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
-import com.android.tools.smali.dexlib2.dexbacked.DexReader;
-import junit.framework.Assert;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Test;
public class BaseDexReaderSleb128Test {
@@ -255,7 +253,7 @@ public class BaseDexReaderSleb128Test {
private void performTest(int expectedValue, byte[] buf, int expectedLength) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSleb128());
Assert.assertEquals(expectedLength, reader.getOffset());
@@ -265,7 +263,7 @@ public class BaseDexReaderSleb128Test {
private void performFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.peekSleb128Size();
Assert.fail();
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderTest.java
index dcf70def..8eeb6939 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/dexbacked/BaseDexReaderTest.java
@@ -30,10 +30,8 @@
package com.android.tools.smali.dexlib2.dexbacked;
-import com.android.tools.smali.dexlib2.dexbacked.DexBuffer;
-import com.android.tools.smali.dexlib2.dexbacked.DexReader;
-import junit.framework.Assert;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Test;
public class BaseDexReaderTest {
@@ -69,7 +67,7 @@ public class BaseDexReaderTest {
private void performSizedIntTest(int expectedValue, byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSizedInt(buf.length));
}
@@ -84,7 +82,7 @@ public class BaseDexReaderTest {
private void performSizedIntFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.readSizedInt(buf.length);
Assert.fail();
@@ -124,7 +122,7 @@ public class BaseDexReaderTest {
private void performSizedSmallUintTest(int expectedValue, byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSizedSmallUint(buf.length));
}
@@ -143,7 +141,7 @@ public class BaseDexReaderTest {
private void performSizedSmallUintFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.readSizedSmallUint(buf.length);
Assert.fail();
@@ -194,7 +192,7 @@ public class BaseDexReaderTest {
private void performSizedRightExtendedIntTest(int expectedValue, byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSizedRightExtendedInt(buf.length));
}
@@ -209,7 +207,7 @@ public class BaseDexReaderTest {
private void performSizedRightExtendedIntFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.readSizedRightExtendedInt(buf.length);
Assert.fail();
@@ -303,7 +301,7 @@ public class BaseDexReaderTest {
private void performSizedRightExtendedLongTest(long expectedValue, byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSizedRightExtendedLong(buf.length));
}
@@ -318,7 +316,7 @@ public class BaseDexReaderTest {
private void performSizedRightExtendedLongFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.readSizedRightExtendedLong(buf.length);
Assert.fail();
@@ -412,7 +410,7 @@ public class BaseDexReaderTest {
private void performSizedLongTest(long expectedValue, byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
Assert.assertEquals(expectedValue, reader.readSizedLong(buf.length));
}
@@ -427,7 +425,7 @@ public class BaseDexReaderTest {
private void performSizedLongFailureTest(byte[] buf) {
DexBuffer dexBuf = new DexBuffer(buf);
- DexReader reader = dexBuf.readerAt(0);
+ DexReader<? extends DexBuffer> reader = dexBuf.readerAt(0);
try {
reader.readSizedLong(buf.length);
Assert.fail();
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/util/InstructionOffsetMapTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/util/InstructionOffsetMapTest.java
index 555239a3..882fce2d 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/util/InstructionOffsetMapTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/util/InstructionOffsetMapTest.java
@@ -56,14 +56,13 @@ import com.android.tools.smali.dexlib2.immutable.instruction.ImmutableInstructio
import com.android.tools.smali.dexlib2.immutable.instruction.ImmutableInstruction35c;
import com.android.tools.smali.dexlib2.immutable.instruction.ImmutableInstruction3rc;
import com.android.tools.smali.dexlib2.immutable.instruction.ImmutableInstruction51l;
-import com.android.tools.smali.dexlib2.util.InstructionOffsetMap;
import com.google.common.collect.ImmutableList;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.Opcode;
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodImplementation;
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference;
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableTypeReference;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Test;
public class InstructionOffsetMapTest {
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexDataWriterTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexDataWriterTest.java
index edc44000..6c869c6b 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexDataWriterTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexDataWriterTest.java
@@ -30,9 +30,9 @@
package com.android.tools.smali.dexlib2.writer;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.ValueType;
import com.android.tools.smali.util.ExceptionWithContext;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterSleb128Test.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterSleb128Test.java
index 1703b380..e2ea6b7d 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterSleb128Test.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterSleb128Test.java
@@ -30,7 +30,7 @@
package com.android.tools.smali.dexlib2.writer;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterTest.java
index b4c94e58..b301a333 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterTest.java
@@ -33,7 +33,6 @@ package com.android.tools.smali.dexlib2.writer;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.AnnotationVisibility;
import com.android.tools.smali.dexlib2.Opcodes;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
@@ -49,6 +48,7 @@ import com.android.tools.smali.dexlib2.immutable.value.ImmutableAnnotationEncode
import com.android.tools.smali.dexlib2.immutable.value.ImmutableNullEncodedValue;
import com.android.tools.smali.dexlib2.writer.io.MemoryDataStore;
import com.android.tools.smali.dexlib2.writer.pool.DexPool;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterUleb128Test.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterUleb128Test.java
index a66879c3..a26e7382 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterUleb128Test.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/DexWriterUleb128Test.java
@@ -30,7 +30,7 @@
package com.android.tools.smali.dexlib2.writer;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/util/TryListBuilderTest.java b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/util/TryListBuilderTest.java
index 64c1da31..f64b26c9 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/util/TryListBuilderTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/dexlib2/writer/util/TryListBuilderTest.java
@@ -31,11 +31,11 @@
package com.android.tools.smali.dexlib2.writer.util;
import com.google.common.collect.ImmutableList;
-import junit.framework.Assert;
import com.android.tools.smali.dexlib2.iface.ExceptionHandler;
import com.android.tools.smali.dexlib2.iface.TryBlock;
import com.android.tools.smali.dexlib2.immutable.ImmutableExceptionHandler;
import com.android.tools.smali.dexlib2.immutable.ImmutableTryBlock;
+import org.junit.Assert;
import org.junit.Test;
import java.util.List;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/util/AbstractForwardSequentialListTest.java b/dexlib2/src/test/java/com/android/tools/smali/util/AbstractForwardSequentialListTest.java
index 5ea49c5e..1b6a8fc7 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/util/AbstractForwardSequentialListTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/util/AbstractForwardSequentialListTest.java
@@ -30,8 +30,7 @@
package com.android.tools.smali.util;
-import com.android.tools.smali.util.AbstractForwardSequentialList;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
diff --git a/dexlib2/src/test/java/com/android/tools/smali/util/NumberUtilsTest.java b/dexlib2/src/test/java/com/android/tools/smali/util/NumberUtilsTest.java
index ee401bb4..9d8b1721 100644
--- a/dexlib2/src/test/java/com/android/tools/smali/util/NumberUtilsTest.java
+++ b/dexlib2/src/test/java/com/android/tools/smali/util/NumberUtilsTest.java
@@ -30,8 +30,7 @@
package com.android.tools.smali.util;
-import com.android.tools.smali.util.NumberUtils;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
public class NumberUtilsTest {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 25d32653..d0d403e2 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/smali/build.gradle b/smali/build.gradle
index cbc2e7ed..fbb6394e 100644
--- a/smali/build.gradle
+++ b/smali/build.gradle
@@ -94,13 +94,17 @@ dependencies {
processResources.inputs.property('version', version)
processResources.expand('version': version)
+processResources.dependsOn('generateGrammarSource')
// Build a separate jar that contains all dependencies
task fatJar(type: Jar, dependsOn: jar) {
+ dependsOn ':dexlib2:jar'
+ dependsOn ':util:jar'
from sourceSets.main.output
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
- classifier = 'fat'
+ duplicatesStrategy = 'exclude'
+ archiveClassifier = 'fat'
manifest {
attributes('Main-Class': 'com.android.tools.smali.smali.Main')
@@ -168,5 +172,7 @@ task proguard(type: proguard.gradle.ProGuardTask, dependsOn: fatJar) {
sourcesJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
+sourcesJar.dependsOn('generateGrammarSource')
+sourcesJar.dependsOn('jflex')
tasks.getByPath(':release').dependsOn(proguard)
diff --git a/smali/src/main/java/com/android/tools/smali/smali/Smali.java b/smali/src/main/java/com/android/tools/smali/smali/Smali.java
index 8094fa9f..86c6eb26 100644
--- a/smali/src/main/java/com/android/tools/smali/smali/Smali.java
+++ b/smali/src/main/java/com/android/tools/smali/smali/Smali.java
@@ -31,6 +31,8 @@
package com.android.tools.smali.smali;
import com.google.common.collect.Lists;
+
+import java.nio.charset.StandardCharsets;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -192,19 +194,17 @@ public class Smali {
private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, SmaliOptions options)
throws Exception {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(smaliFile);
- InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
+ try (FileInputStream fis = new FileInputStream(smaliFile)) {
+ InputStreamReader reader = new InputStreamReader(fis, StandardCharsets.UTF_8);
LexerErrorInterface lexer = new smaliFlexLexer(reader, options.apiLevel);
- ((smaliFlexLexer)lexer).setSourceFile(smaliFile);
- CommonTokenStream tokens = new CommonTokenStream((TokenSource)lexer);
+ ((smaliFlexLexer) lexer).setSourceFile(smaliFile);
+ CommonTokenStream tokens = new CommonTokenStream((TokenSource) lexer);
if (options.printTokens) {
tokens.getTokens();
- for (int i=0; i<tokens.size(); i++) {
+ for (int i = 0; i < tokens.size(); i++) {
Token token = tokens.get(i);
if (token.getChannel() == smaliParser.HIDDEN) {
continue;
@@ -250,26 +250,20 @@ public class Smali {
dexGen.smali_file();
return dexGen.getNumberOfSyntaxErrors() == 0;
- } finally {
- if (fis != null) {
- fis.close();
- }
}
}
private static boolean printTokensForSingleFile(File smaliFile, SmaliOptions options)
throws Exception {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(smaliFile);
- InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
+ try (FileInputStream fis = new FileInputStream(smaliFile)) {
+ InputStreamReader reader = new InputStreamReader(fis, StandardCharsets.UTF_8);
LexerErrorInterface lexer = new smaliFlexLexer(reader, options.apiLevel);
- ((smaliFlexLexer)lexer).setSourceFile(smaliFile);
- CommonTokenStream tokens = new CommonTokenStream((TokenSource)lexer);
+ ((smaliFlexLexer) lexer).setSourceFile(smaliFile);
+ CommonTokenStream tokens = new CommonTokenStream((TokenSource) lexer);
tokens.fill();
- for (int i=0; i<tokens.size(); i++) {
+ for (int i = 0; i < tokens.size(); i++) {
Token token = tokens.get(i);
if (token.getChannel() == smaliParser.HIDDEN) {
continue;
@@ -286,10 +280,6 @@ public class Smali {
System.out.flush();
return lexer.getNumberOfSyntaxErrors() == 0;
- } finally {
- if (fis != null) {
- fis.close();
- }
}
}
}
diff --git a/smali/src/test/java/com/android/tools/smali/smali/ImplicitReferenceTest.java b/smali/src/test/java/com/android/tools/smali/smali/ImplicitReferenceTest.java
index 68ec59b3..d4574b57 100644
--- a/smali/src/test/java/com/android/tools/smali/smali/ImplicitReferenceTest.java
+++ b/smali/src/test/java/com/android/tools/smali/smali/ImplicitReferenceTest.java
@@ -30,10 +30,8 @@
package com.android.tools.smali.smali;
-import com.android.tools.smali.smali.SmaliTestUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import junit.framework.Assert;
import org.antlr.runtime.RecognitionException;
import com.android.tools.smali.dexlib2.Opcode;
import com.android.tools.smali.dexlib2.ValueType;
@@ -49,6 +47,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference;
import com.android.tools.smali.dexlib2.iface.value.FieldEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.MethodEncodedValue;
import com.android.tools.smali.dexlib2.iface.value.TypeEncodedValue;
+import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
diff --git a/third_party/NOTICE b/third_party/NOTICE
index ef173603..a4068b9a 100644
--- a/third_party/NOTICE
+++ b/third_party/NOTICE
@@ -83,6 +83,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*******************************************************************************
+Various portions of the code are taken from https://github.com/google/guava,
+and are used in accordance with the following license:
Content of http://www.apache.org/licenses/LICENSE-2.0:
diff --git a/third_party/baksmali/src/main/java/com/android/tools/smali/baksmali/Baksmali.java b/third_party/baksmali/src/main/java/com/android/tools/smali/baksmali/Baksmali.java
index 7f9d1fe0..06299abc 100644
--- a/third_party/baksmali/src/main/java/com/android/tools/smali/baksmali/Baksmali.java
+++ b/third_party/baksmali/src/main/java/com/android/tools/smali/baksmali/Baksmali.java
@@ -40,6 +40,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -160,7 +161,7 @@ public class Baksmali {
}
BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(
- new FileOutputStream(smaliFile), "UTF8"));
+ new FileOutputStream(smaliFile), StandardCharsets.UTF_8));
writer = new BaksmaliWriter(
bufWriter,
diff --git a/util/src/test/java/com/android/tools/smali/util/ClassFileNameHandlerTest.java b/util/src/test/java/com/android/tools/smali/util/ClassFileNameHandlerTest.java
index de5e3c0a..cdc98742 100644
--- a/util/src/test/java/com/android/tools/smali/util/ClassFileNameHandlerTest.java
+++ b/util/src/test/java/com/android/tools/smali/util/ClassFileNameHandlerTest.java
@@ -32,15 +32,16 @@ package com.android.tools.smali.util;
import com.google.common.base.Strings;
import com.google.common.io.Files;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
public class ClassFileNameHandlerTest {
- private final Charset UTF8 = Charset.forName("UTF-8");
+ private final Charset UTF8 = StandardCharsets.UTF_8;
@Test
public void test1ByteEncodings() {
diff --git a/util/src/test/java/com/android/tools/smali/util/LinearSearchTest.java b/util/src/test/java/com/android/tools/smali/util/LinearSearchTest.java
index f4519e5e..92063a60 100644
--- a/util/src/test/java/com/android/tools/smali/util/LinearSearchTest.java
+++ b/util/src/test/java/com/android/tools/smali/util/LinearSearchTest.java
@@ -30,10 +30,9 @@
package com.android.tools.smali.util;
-import com.android.tools.smali.util.LinearSearch;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
import java.util.List;