Merge "Don't mark identifier name strings if not minifying"
diff --git a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
index ae022a5..aec690d 100644
--- a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
@@ -7,8 +7,9 @@
import static com.android.tools.r8.utils.FileUtils.isArchive;
import static com.android.tools.r8.utils.FileUtils.isClassFile;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.io.ByteStreams;
@@ -56,7 +57,7 @@
private ArchiveClassFileProvider(FilteredClassPath archive) throws IOException {
assert isArchive(archive.getPath());
- origin = new Resource.PathOrigin(archive.getPath(), Origin.root());
+ origin = new PathOrigin(archive.getPath(), Origin.root());
zipFile = new ZipFile(archive.getPath().toFile());
final Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
diff --git a/src/main/java/com/android/tools/r8/Diagnostic.java b/src/main/java/com/android/tools/r8/Diagnostic.java
index 1c1961d..b0868cc 100644
--- a/src/main/java/com/android/tools/r8/Diagnostic.java
+++ b/src/main/java/com/android/tools/r8/Diagnostic.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
/**
* Interface for all diagnostic message produced by D8 and R8.
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
index 8e69699..10f24f5 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
/**
* A DiagnosticsHandler can be provided to customize handling of diagnostics information.
diff --git a/src/main/java/com/android/tools/r8/Resource.java b/src/main/java/com/android/tools/r8/Resource.java
index b2bc53d..bbd5954 100644
--- a/src/main/java/com/android/tools/r8/Resource.java
+++ b/src/main/java/com/android/tools/r8/Resource.java
@@ -4,161 +4,18 @@
package com.android.tools.r8;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
/** Represents application resources. */
public abstract class Resource {
- /**
- * Origin description of a resource.
- *
- * <p>An origin is a list of parts that describe where a resource originates from. The first part
- * is the most recent part and is associated with the present resource, each successive part is
- * then associated with the context of the previous part.
- *
- * <p>For example, for a class file, say {@code my/class/Foo.class}, that is contained within a
- * jar archive, say {@code myjar.jar}, the Origin of of this resource will be {@code
- * myjar.jar:my/class/Foo.class} where each part is separated by a colon.
- *
- * <p>There are two top-most origins which have no parent: {@code Origin.root()} and {@code
- * Origin.unknown()}. The former is the parent of any file path, while the latter is an unknown
- * origin (e.g., for generated resources of raw bytes).
- */
- public abstract static class Origin implements Comparable<Origin> {
-
- private static final Origin ROOT =
- new Origin() {
- @Override
- public String part() {
- return "";
- }
-
- @Override
- List<String> buildParts(int size) {
- return new ArrayList<>(size);
- }
- };
-
- private static final Origin UNKNOWN =
- new Origin() {
- @Override
- public String part() {
- return "<unknown>";
- }
-
- @Override
- List<String> buildParts(int size) {
- List<String> parts = new ArrayList<>(size + 1);
- parts.add(part());
- return parts;
- }
- };
-
- public static Origin root() {
- return ROOT;
- }
-
- public static Origin unknown() {
- return UNKNOWN;
- }
-
- private final Origin parent;
-
- private Origin() {
- this.parent = null;
- }
-
- protected Origin(Origin parent) {
- assert parent != null;
- this.parent = parent;
- }
-
- public abstract String part();
-
- public Origin parent() {
- return parent;
- }
-
- public List<String> parts() {
- return buildParts(0);
- }
-
- List<String> buildParts(int size) {
- List<String> parts = parent().buildParts(size + 1);
- parts.add(part());
- return parts;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- }
- if (!(obj instanceof Origin)) {
- return false;
- }
- Origin self = this;
- Origin other = (Origin) obj;
- while (self != null && other != null && self.part().equals(other.part())) {
- self = self.parent();
- other = other.parent();
- }
- return self == other;
- }
-
- @Override
- public int compareTo(Origin other) {
- // Lexicographic ordering from root to leaf.
- List<String> thisParts = parts();
- List<String> otherParts = other.parts();
- int len = Math.min(thisParts.size(), otherParts.size());
- for (int i = 0; i < len; i++) {
- int compare = thisParts.get(i).compareTo(otherParts.get(i));
- if (compare != 0) {
- return compare;
- }
- }
- return Integer.compare(thisParts.size(), otherParts.size());
- }
-
- @Override
- public int hashCode() {
- int hash = 1;
- for (String part : parts()) {
- hash = 31 * hash + part.hashCode();
- }
- return hash;
- }
-
- @Override
- public String toString() {
- return String.join(":", parts());
- }
- }
-
- /** Path component in an origin description. */
- public static class PathOrigin extends Origin {
- private final Path path;
-
- public PathOrigin(Path path, Origin parent) {
- super(parent);
- assert path != null;
- this.path = path;
- }
-
- @Override
- public String part() {
- return path.toString();
- }
- }
-
/** Origin of the resource. */
public final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java b/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
index e904e53..948178a 100644
--- a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
+++ b/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
@@ -12,8 +12,8 @@
import com.android.tools.r8.D8Command;
import com.android.tools.r8.D8Output;
import com.android.tools.r8.Resource;
-import com.android.tools.r8.Resource.Origin;
-import com.android.tools.r8.Resource.PathOrigin;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.OutputMode;
diff --git a/src/main/java/com/android/tools/r8/dex/DexFileReader.java b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
index 4b0d6e2..17d634b 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFileReader.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
@@ -8,8 +8,8 @@
import static com.android.tools.r8.utils.EncodedValueUtils.parseSigned;
import static com.android.tools.r8.utils.EncodedValueUtils.parseUnsigned;
-import com.android.tools.r8.Resource.Origin;
-import com.android.tools.r8.Resource.PathOrigin;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.code.Instruction;
import com.android.tools.r8.code.InstructionFactory;
import com.android.tools.r8.graph.ClassAccessFlags;
diff --git a/src/main/java/com/android/tools/r8/graph/ClassKind.java b/src/main/java/com/android/tools/r8/graph/ClassKind.java
index f8c4cbd..a526c3f 100644
--- a/src/main/java/com/android/tools/r8/graph/ClassKind.java
+++ b/src/main/java/com/android/tools/r8/graph/ClassKind.java
@@ -1,6 +1,6 @@
package com.android.tools.r8.graph;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.ProgramResource;
import java.util.function.Consumer;
import java.util.function.Predicate;
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index d5fc0be..82cdbe1 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
diff --git a/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java b/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
index 292b368..4094453 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.Unreachable;
diff --git a/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java b/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
index f2e262b..a38c01d 100644
--- a/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.Unreachable;
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 4d16548..c96ee92 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.utils.ProgramResource;
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 2c573f4..1985869 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -7,7 +7,7 @@
import static org.objectweb.asm.Opcodes.ACC_DEPRECATED;
import static org.objectweb.asm.Opcodes.ASM6;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DexValue.DexValueAnnotation;
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index ce2de41..06eeeea 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.graph;
import com.android.tools.r8.ApiLevelException;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.errors.InvalidDebugInfoException;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.Position;
diff --git a/src/main/java/com/android/tools/r8/origin/Origin.java b/src/main/java/com/android/tools/r8/origin/Origin.java
new file mode 100644
index 0000000..79efa54
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/origin/Origin.java
@@ -0,0 +1,136 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.origin;
+
+import com.android.tools.r8.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Origin description of a resource.
+ *
+ * <p>An origin is a list of parts that describe where a resource originates from. The first part
+ * is the most recent part and is associated with the present resource, each successive part is
+ * then associated with the context of the previous part.
+ *
+ * <p>For example, for a class file, say {@code my/class/Foo.class}, that is contained within a
+ * jar archive, say {@code myjar.jar}, the Origin of of this resource will be {@code
+ * myjar.jar:my/class/Foo.class} where each part is separated by a colon.
+ *
+ * <p>There are two top-most origins which have no parent: {@code Origin.root()} and {@code
+ * Origin.unknown()}. The former is the parent of any file path, while the latter is an unknown
+ * origin (e.g., for generated resources of raw bytes).
+ */
+public abstract class Origin implements Comparable<Origin> {
+
+ private static final Origin ROOT =
+ new Origin() {
+ @Override
+ public String part() {
+ return "";
+ }
+
+ @Override
+ List<String> buildParts(int size) {
+ return new ArrayList<>(size);
+ }
+ };
+
+ private static final Origin UNKNOWN =
+ new Origin() {
+ @Override
+ public String part() {
+ return "<unknown>";
+ }
+
+ @Override
+ List<String> buildParts(int size) {
+ List<String> parts = new ArrayList<>(size + 1);
+ parts.add(part());
+ return parts;
+ }
+ };
+
+ public static Origin root() {
+ return ROOT;
+ }
+
+ public static Origin unknown() {
+ return UNKNOWN;
+ }
+
+ private final Origin parent;
+
+ private Origin() {
+ this.parent = null;
+ }
+
+ protected Origin(Origin parent) {
+ assert parent != null;
+ this.parent = parent;
+ }
+
+ public abstract String part();
+
+ public Origin parent() {
+ return parent;
+ }
+
+ public List<String> parts() {
+ return buildParts(0);
+ }
+
+ List<String> buildParts(int size) {
+ List<String> parts = parent().buildParts(size + 1);
+ parts.add(part());
+ return parts;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof Origin)) {
+ return false;
+ }
+ Origin self = this;
+ Origin other = (Origin) obj;
+ while (self != null && other != null && self.part().equals(other.part())) {
+ self = self.parent();
+ other = other.parent();
+ }
+ return self == other;
+ }
+
+ @Override
+ public int compareTo(Origin other) {
+ // Lexicographic ordering from root to leaf.
+ List<String> thisParts = parts();
+ List<String> otherParts = other.parts();
+ int len = Math.min(thisParts.size(), otherParts.size());
+ for (int i = 0; i < len; i++) {
+ int compare = thisParts.get(i).compareTo(otherParts.get(i));
+ if (compare != 0) {
+ return compare;
+ }
+ }
+ return Integer.compare(thisParts.size(), otherParts.size());
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 1;
+ for (String part : parts()) {
+ hash = 31 * hash + part.hashCode();
+ }
+ return hash;
+ }
+
+ @Override
+ public String toString() {
+ return String.join(":", parts());
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/origin/PathOrigin.java b/src/main/java/com/android/tools/r8/origin/PathOrigin.java
new file mode 100644
index 0000000..919c4f6
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/origin/PathOrigin.java
@@ -0,0 +1,23 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.origin;
+
+import java.nio.file.Path;
+
+/** Path component in an origin description. */
+public class PathOrigin extends Origin {
+ private final Path path;
+
+ public PathOrigin(Path path, Origin parent) {
+ super(parent);
+ assert path != null;
+ this.path = path;
+ }
+
+ @Override
+ public String part() {
+ return path.toString();
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index ddac51f..f9f3f01 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.ClassFileResourceProvider;
import com.android.tools.r8.Resource;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.VDexFile;
import com.android.tools.r8.dex.VDexFileReader;
import com.android.tools.r8.errors.CompilationError;
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java b/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
index 0f85cac..62a5e76 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.OutputSink;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 8bb1514..1616a71 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.errors.InvalidDebugInfoException;
import com.android.tools.r8.graph.DexEncodedMethod;
diff --git a/src/main/java/com/android/tools/r8/utils/OneShotByteResource.java b/src/main/java/com/android/tools/r8/utils/OneShotByteResource.java
index cc9c1e3..e64ebfb 100644
--- a/src/main/java/com/android/tools/r8/utils/OneShotByteResource.java
+++ b/src/main/java/com/android/tools/r8/utils/OneShotByteResource.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.Resource;
+import com.android.tools.r8.origin.Origin;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/main/java/com/android/tools/r8/utils/PreloadedClassFileProvider.java b/src/main/java/com/android/tools/r8/utils/PreloadedClassFileProvider.java
index 01ea7ba..ec5fccb 100644
--- a/src/main/java/com/android/tools/r8/utils/PreloadedClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/PreloadedClassFileProvider.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.ClassFileResourceProvider;
import com.android.tools.r8.Resource;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
import com.google.common.collect.Sets;
import java.util.Collections;
import java.util.HashMap;
diff --git a/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java b/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
index 2cce6da..f2290b3 100644
--- a/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
+++ b/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
@@ -8,8 +8,8 @@
import static com.android.tools.r8.utils.FileUtils.isDexFile;
import com.android.tools.r8.Resource;
-import com.android.tools.r8.Resource.Origin;
-import com.android.tools.r8.Resource.PathOrigin;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.google.common.io.ByteStreams;
diff --git a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
index d2c6560..cd5bbcd 100644
--- a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Resource.Origin;
+import com.android.tools.r8.origin.Origin;
public class StringDiagnostic implements Diagnostic {
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
index 94f53f4..6e03828 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
@@ -5,8 +5,8 @@
import static com.android.tools.r8.utils.DescriptorUtils.getPathFromDescriptor;
-import com.android.tools.r8.Resource.Origin;
-import com.android.tools.r8.Resource.PathOrigin;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.naming.MemberNaming.FieldSignature;