Remove Location and use only Origin
Because:
- Location has added no simplification in using the API, the change to
PathOrigin was in fact the helping point.
- API user needs to instanceof PathOrigin and TextRangeXxxx anyway so
TextRange can just be an Origin with no change to Origin API.
- In the end, as it was, Location was adding supplementary code and
instances for no benefit.
- Location vs Origin was not very simple API to understand because the
concept were too close.
Change-Id: I1a5af41893a9b2687f71ec02ed6831cfd59c0167
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index c35871f..33f9aeb 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -89,8 +89,7 @@
// options consumer will not be visible to the sink.
return FileSystemOutputSink.create(outputPath, getInternalOptions());
} catch (IOException e) {
- throw reporter.fatalError(
- new IOExceptionDiagnostic(e, new Location(new PathOrigin(outputPath))));
+ throw reporter.fatalError(new IOExceptionDiagnostic(e, new PathOrigin(outputPath)));
}
}
}
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 17d7724..7d37f43 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -112,7 +112,7 @@
private static void run(String[] args)
throws IOException, CompilationException, CompilationFailedException {
- D8Command.Builder builder = D8Command.parse(args, new Location(CommandLineOrigin.INSTANCE));
+ D8Command.Builder builder = D8Command.parse(args, CommandLineOrigin.INSTANCE);
if (builder.getOutputPath() == null) {
builder.setOutputPath(Paths.get("."));
}
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 31d1ad9..b922bbf 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OutputMode;
@@ -149,7 +150,7 @@
return new Builder(app);
}
- static Builder parse(String[] args, Location location) {
+ static Builder parse(String[] args, Origin origin) {
CompilationMode modeSet = null;
Path outputPath = null;
Builder builder = builder();
@@ -166,7 +167,7 @@
if (modeSet == CompilationMode.RELEASE) {
builder.getReporter().error(new StringDiagnostic(
"Cannot compile in both --debug and --release mode.",
- location));
+ origin));
continue;
}
builder.setMode(CompilationMode.DEBUG);
@@ -175,7 +176,7 @@
if (modeSet == CompilationMode.DEBUG) {
builder.getReporter().error(new StringDiagnostic(
"Cannot compile in both --debug and --release mode.",
- location));
+ origin));
continue;
}
builder.setMode(CompilationMode.RELEASE);
@@ -187,7 +188,7 @@
if (outputPath != null) {
builder.getReporter().error(new StringDiagnostic(
"Cannot output both to '" + outputPath.toString() + "' and '" + output + "'",
- location));
+ origin));
continue;
}
outputPath = Paths.get(output);
@@ -204,7 +205,7 @@
} else {
if (arg.startsWith("--")) {
builder.getReporter().error(new StringDiagnostic("Unknown option: " + arg,
- location));
+ origin));
continue;
}
builder.addProgramFiles(Paths.get(arg));
diff --git a/src/main/java/com/android/tools/r8/DexSegments.java b/src/main/java/com/android/tools/r8/DexSegments.java
index 54f5e1c..be50c0e 100644
--- a/src/main/java/com/android/tools/r8/DexSegments.java
+++ b/src/main/java/com/android/tools/r8/DexSegments.java
@@ -64,7 +64,7 @@
} else {
if (arg.startsWith("--")) {
builder.getReporter().error(new StringDiagnostic("Unknown option: " + arg,
- new Location(CommandLineOrigin.INSTANCE)));
+ CommandLineOrigin.INSTANCE));
}
builder.addProgramFiles(Paths.get(arg));
}
diff --git a/src/main/java/com/android/tools/r8/Diagnostic.java b/src/main/java/com/android/tools/r8/Diagnostic.java
index 78f21f8..b0868cc 100644
--- a/src/main/java/com/android/tools/r8/Diagnostic.java
+++ b/src/main/java/com/android/tools/r8/Diagnostic.java
@@ -3,11 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
+import com.android.tools.r8.origin.Origin;
+
/**
* Interface for all diagnostic message produced by D8 and R8.
*/
public interface Diagnostic {
- Location getLocation();
+ Origin getOrigin();
String getDiagnosticMessage();
}
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
index 31c9da0..8212835 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
+import com.android.tools.r8.origin.Origin;
+
/**
* A DiagnosticsHandler can be provided to customize handling of diagnostics information.
*
@@ -16,8 +18,8 @@
* @param error Diagnostic containing error information.
*/
default void error(Diagnostic error) {
- if (error.getLocation() != Location.UNKNOWN) {
- System.err.print("Error in " + error.getLocation() + ":\n ");
+ if (error.getOrigin() != Origin.unknown()) {
+ System.err.print("Error in " + error.getOrigin() + ":\n ");
} else {
System.err.print("Error: ");
}
@@ -30,8 +32,8 @@
* @param warning Diagnostic containing warning information.
*/
default void warning(Diagnostic warning) {
- if (warning.getLocation() != Location.UNKNOWN) {
- System.err.print("Warning in " + warning.getLocation() + ":\n ");
+ if (warning.getOrigin() != Origin.unknown()) {
+ System.err.print("Warning in " + warning.getOrigin() + ":\n ");
} else {
System.err.print("Warning: ");
}
@@ -44,8 +46,8 @@
* @param info Diagnostic containing the information.
*/
default void info(Diagnostic info) {
- if (info.getLocation() != Location.UNKNOWN) {
- System.out.print("In " + info.getLocation() + ":\n ");
+ if (info.getOrigin() != Origin.unknown()) {
+ System.out.print("In " + info.getOrigin() + ":\n ");
}
System.out.println(info.getDiagnosticMessage());
}
diff --git a/src/main/java/com/android/tools/r8/Disassemble.java b/src/main/java/com/android/tools/r8/Disassemble.java
index dfeb3ac..8f3efac 100644
--- a/src/main/java/com/android/tools/r8/Disassemble.java
+++ b/src/main/java/com/android/tools/r8/Disassemble.java
@@ -111,7 +111,7 @@
} else {
if (arg.startsWith("--")) {
builder.getReporter().error(new StringDiagnostic("Unknown option: " + arg,
- new Location(CommandLineOrigin.INSTANCE)));;
+ CommandLineOrigin.INSTANCE));
}
builder.addProgramFiles(Paths.get(arg));
}
diff --git a/src/main/java/com/android/tools/r8/Location.java b/src/main/java/com/android/tools/r8/Location.java
deleted file mode 100644
index 1d1e763..0000000
--- a/src/main/java/com/android/tools/r8/Location.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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;
-
-import com.android.tools.r8.origin.Origin;
-
-/**
- * Describe the location of an event.
- */
-public class Location {
-
- /**
- * Location is unknown or event is not location related.
- */
- public static final Location UNKNOWN = new Location(Origin.unknown());
-
- private final Origin origin;
-
- public Location(Origin origin) {
- assert origin != null;
- this.origin = origin;
- }
-
- /**
- * Returns the {@link Origin} of the resource concerned by this {@link Location}
- */
- public Origin getOrigin() {
- return origin;
- }
-
- /**
- * Returns a basic textual description of this {@link Location}.
- */
- public String getDescription() {
- if (origin == Origin.unknown()) {
- return "<Unknown>";
- }
- return origin.toString();
- }
-}
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index c424047..627f3f7 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -500,7 +500,7 @@
private static void run(String[] args)
throws IOException, CompilationException, CompilationFailedException {
- R8Command.Builder builder = R8Command.parse(args, new Location(CommandLineOrigin.INSTANCE));
+ R8Command.Builder builder = R8Command.parse(args, CommandLineOrigin.INSTANCE);
if (builder.getOutputPath() == null) {
builder.setOutputPath(Paths.get("."));
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 15cb593..cbb5f22 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -344,13 +344,13 @@
return new Builder(app, diagnosticsHandler);
}
- public static Builder parse(String[] args, Location argsLocation) {
+ public static Builder parse(String[] args, Origin argsOrigin) {
Builder builder = builder();
- parse(args, argsLocation, builder, new ParseState());
+ parse(args, argsOrigin, builder, new ParseState());
return builder;
}
- private static ParseState parse(String[] args, Location argsLocation, Builder builder,
+ private static ParseState parse(String[] args, Origin argsOrigin, Builder builder,
ParseState state) {
for (int i = 0; i < args.length; i++) {
String arg = args[i].trim();
@@ -363,14 +363,14 @@
} else if (arg.equals("--debug")) {
if (state.mode == CompilationMode.RELEASE) {
builder.getReporter().error(new StringDiagnostic(
- "Cannot compile in both --debug and --release mode.", argsLocation));
+ "Cannot compile in both --debug and --release mode.", argsOrigin));
}
state.mode = CompilationMode.DEBUG;
builder.setMode(state.mode);
} else if (arg.equals("--release")) {
if (state.mode == CompilationMode.DEBUG) {
builder.getReporter().error(new StringDiagnostic(
- "Cannot compile in both --debug and --release mode.", argsLocation));
+ "Cannot compile in both --debug and --release mode.", argsOrigin));
}
state.mode = CompilationMode.RELEASE;
builder.setMode(state.mode);
@@ -383,7 +383,7 @@
+ "' and '"
+ outputPath
+ "'",
- argsLocation));
+ argsOrigin));
}
builder.setOutputPath(Paths.get(outputPath));
} else if (arg.equals("--lib")) {
@@ -411,7 +411,7 @@
} else if (arg.startsWith("@")) {
// TODO(zerny): Replace this with pipe reading.
Path argsFile = Paths.get(arg.substring(1));
- Location argsFileLocation = new Location(new PathOrigin(argsFile));
+ Origin argsFileOrigin = new PathOrigin(argsFile);
try {
List<String> linesInFile = FileUtils.readTextFile(argsFile);
List<String> argsInFile = new ArrayList<>();
@@ -425,15 +425,15 @@
}
// TODO(zerny): We need to define what CWD should be for files referenced in an args file.
state = parse(argsInFile.toArray(new String[argsInFile.size()]),
- argsFileLocation, builder, state);
+ argsFileOrigin, builder, state);
} catch (IOException e) {
builder.getReporter().error(new StringDiagnostic(
"Failed to read arguments from file " + argsFile + ": " + e.getMessage(),
- argsFileLocation));
+ argsFileOrigin));
}
} else {
if (arg.startsWith("--")) {
- builder.getReporter().error(new StringDiagnostic("Unknown option: " + arg, argsLocation));
+ builder.getReporter().error(new StringDiagnostic("Unknown option: " + arg, argsOrigin));
}
builder.addProgramFiles(Paths.get(arg));
}
diff --git a/src/main/java/com/android/tools/r8/errors/CompilationError.java b/src/main/java/com/android/tools/r8/errors/CompilationError.java
index 9305bb6..5c3220d 100644
--- a/src/main/java/com/android/tools/r8/errors/CompilationError.java
+++ b/src/main/java/com/android/tools/r8/errors/CompilationError.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.errors;
import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Location;
import com.android.tools.r8.origin.Origin;
/**
@@ -15,31 +14,27 @@
*/
public class CompilationError extends RuntimeException implements Diagnostic {
- private final Location location;
+ private final Origin origin;
public CompilationError(String message) {
- this(message, Location.UNKNOWN);
+ this(message, Origin.unknown());
}
public CompilationError(String message, Throwable cause) {
- this(message, cause, Location.UNKNOWN);
- }
-
- public CompilationError(String message, Location location) {
- this(message, null, location);
+ this(message, cause, Origin.unknown());
}
public CompilationError(String message, Origin origin) {
- this(message, new Location(origin));
+ this(message, null, origin);
}
- public CompilationError(String message, Throwable cause, Location location) {
+ public CompilationError(String message, Throwable cause, Origin location) {
super(message, cause);
- this.location = location;
+ this.origin = location;
}
@Override
- public Location getLocation() {
- return location;
+ public Origin getOrigin() {
+ return origin;
}
@Override
diff --git a/src/main/java/com/android/tools/r8/naming/DictionaryReader.java b/src/main/java/com/android/tools/r8/naming/DictionaryReader.java
index f184aef..1f15a48 100644
--- a/src/main/java/com/android/tools/r8/naming/DictionaryReader.java
+++ b/src/main/java/com/android/tools/r8/naming/DictionaryReader.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
-import com.android.tools.r8.Location;
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
@@ -67,7 +66,7 @@
} catch (IOException e) {
reporter.error(new StringDiagnostic(
"Unable to create dictionary from file " + path.toString(),
- new Location(new PathOrigin(path))));
+ new PathOrigin(path)));
}
return namesBuilder.build();
} else {
diff --git a/src/main/java/com/android/tools/r8/TextRangeLocation.java b/src/main/java/com/android/tools/r8/origin/TextRangeOrigin.java
similarity index 75%
rename from src/main/java/com/android/tools/r8/TextRangeLocation.java
rename to src/main/java/com/android/tools/r8/origin/TextRangeOrigin.java
index 23cd3d6..4df5540 100644
--- a/src/main/java/com/android/tools/r8/TextRangeLocation.java
+++ b/src/main/java/com/android/tools/r8/origin/TextRangeOrigin.java
@@ -2,14 +2,12 @@
// 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;
-
-import com.android.tools.r8.origin.Origin;
+package com.android.tools.r8.origin;
/**
- * A location with a position in a text file.
+ * An {@link Origin} with a position in a text file.
*/
-public class TextRangeLocation extends Location {
+public class TextRangeOrigin extends Origin {
/**
* A position in a text file determined by line and column.
@@ -70,14 +68,14 @@
private final TextPosition start;
private final TextPosition end;
- public static Location get(Origin origin, int startLine, int startColumn) {
- return get(origin, startLine, startColumn, startLine, startColumn);
+ public static Origin get(Origin fileOrigin, int startLine, int startColumn) {
+ return get(fileOrigin, startLine, startColumn, startLine, startColumn);
}
- public static Location get(Origin origin, int startLine, int startColumn, int endLine,
+ public static Origin get(Origin fileOrigin, int startLine, int startColumn, int endLine,
int endColumn) {
- if (origin == Origin.unknown()) {
- return Location.UNKNOWN;
+ if (fileOrigin == Origin.unknown()) {
+ return Origin.unknown();
} else {
assert startLine > 0
&& endLine >= startLine
@@ -90,12 +88,12 @@
} else {
end = new TextPosition(endLine, endColumn);
}
- return new TextRangeLocation(origin, start, end);
+ return new TextRangeOrigin(fileOrigin, start, end);
}
}
- private TextRangeLocation(Origin origin, TextPosition start, TextPosition end) {
- super(origin);
+ private TextRangeOrigin(Origin fileOrigin, TextPosition start, TextPosition end) {
+ super(fileOrigin);
this.start = start;
this.end = end;
}
@@ -115,7 +113,7 @@
}
@Override
- public String getDescription() {
- return super.getDescription() + " line " + getStart().getLine();
+ public String part() {
+ return " line " + getStart().getLine();
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
index a775ab8..631fbc0 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -3,9 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking;
-import com.android.tools.r8.Location;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.naming.DictionaryReader;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.InternalOptions.PackageObfuscationMode;
import com.android.tools.r8.utils.Reporter;
import com.google.common.collect.ImmutableList;
@@ -45,7 +45,7 @@
private Path packageObfuscationDictionary;
private boolean useUniqueClassMemberNames;
private boolean keepParameterNames;
- private Location keepParameterNamesOptionLocation;
+ private Origin keepParameterNamesOptionOrigin;
private ProguardClassFilter.Builder adaptClassStrings = ProguardClassFilter.builder();
private boolean forceProguardCompatibility = false;
private boolean overloadAggressively;
@@ -169,18 +169,18 @@
return useUniqueClassMemberNames;
}
- public void setKeepParameterNames(boolean keepParameterNames, Location optionLocation) {
- assert optionLocation != null || !keepParameterNames;
+ public void setKeepParameterNames(boolean keepParameterNames, Origin optionOrigin) {
+ assert optionOrigin != null || !keepParameterNames;
this.keepParameterNames = keepParameterNames;
- this.keepParameterNamesOptionLocation = optionLocation;
+ this.keepParameterNamesOptionOrigin = optionOrigin;
}
boolean isKeepParameterNames() {
return keepParameterNames;
}
- Location getKeepParameterNamesOptionLocation() {
- return keepParameterNamesOptionLocation;
+ Origin getKeepParameterNamesOptionOrigin() {
+ return keepParameterNamesOptionOrigin;
}
public void addAdaptClassStringsPattern(ProguardClassNameList pattern) {
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index fe9d4e1..9c5fc27 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -3,8 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking;
-import com.android.tools.r8.Location;
-import com.android.tools.r8.TextRangeLocation;
+import com.android.tools.r8.origin.TextRangeOrigin;
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexItemFactory;
@@ -91,7 +90,7 @@
// are not.
reporter.fatalError(new StringDiagnostic(
"-keepparameternames is not supported",
- configurationBuilder.getKeepParameterNamesOptionLocation()));
+ configurationBuilder.getKeepParameterNamesOptionOrigin()));
}
}
@@ -185,7 +184,7 @@
(option = Iterables.find(UNSUPPORTED_FLAG_OPTIONS, this::skipFlag, null)) != null) {
reporter.error(new StringDiagnostic(
"Unsupported option: -" + option,
- getLocation(optionLine, optionColumn)));
+ getOrigin(optionLine, optionColumn)));
} else if (acceptString("renamesourcefileattribute")) {
skipWhitespace();
if (isOptionalArgumentGiven()) {
@@ -200,7 +199,7 @@
configurationBuilder.addRule(rule);
} else if (acceptString("keepparameternames")) {
configurationBuilder.setKeepParameterNames(true,
- getLocation(optionLine, optionColumn));
+ getOrigin(optionLine, optionColumn));
} else if (acceptString("checkdiscard")) {
ProguardCheckDiscardRule rule = parseCheckDiscardRule();
configurationBuilder.addRule(rule);
@@ -218,7 +217,7 @@
if (expectedOptimizationPasses == null) {
throw reporter.fatalError(new StringDiagnostic(
"Missing n of \"-optimizationpasses n\"",
- getLocation(optionLine, optionColumn)));
+ getOrigin(optionLine, optionColumn)));
}
warnIgnoringOptions("optimizationpasses", optionLine, optionColumn);
} else if (acceptString("dontobfuscate")) {
@@ -330,7 +329,7 @@
} else {
String unknownOption = acceptString();
reporter.error(new StringDiagnostic("Unknown option \"-" + unknownOption + "\"",
- getLocation(optionLine, optionColumn)));
+ getOrigin(optionLine, optionColumn)));
}
return true;
}
@@ -541,7 +540,7 @@
String unknownOption = acceptString();
throw reporter.fatalError(new StringDiagnostic(
"Unknown option \"-" + unknownOption + "\"",
- getLocation(startLine, startColumn)));
+ getOrigin(startLine, startColumn)));
}
} else {
builder.setType(ProguardKeepRuleType.KEEP);
@@ -631,7 +630,7 @@
return ProguardClassType.ENUM;
} else {
throw reporter.fatalError(new StringDiagnostic("Expected interface|class|enum",
- getLocation(startLine, startColumn)));
+ getOrigin(startLine, startColumn)));
}
}
@@ -1168,43 +1167,43 @@
}
private ProguardRuleParserException parseError(String message) {
- return new ProguardRuleParserException(message, snippetForPosition(), getLocation());
+ return new ProguardRuleParserException(message, snippetForPosition(), getOrigin());
}
private ProguardRuleParserException parseError(String message, Throwable cause) {
- return new ProguardRuleParserException(message, snippetForPosition(), getLocation(), cause);
+ return new ProguardRuleParserException(message, snippetForPosition(), getOrigin(), cause);
}
private ProguardRuleParserException parseError(String message, int startLine, int startColumn,
Throwable cause) {
return new ProguardRuleParserException(message, snippetForPosition(startLine, startColumn),
- getLocation(startLine, startColumn), cause);
+ getOrigin(startLine, startColumn), cause);
}
private ProguardRuleParserException parseError(String message, int startLine, int startColumn) {
return new ProguardRuleParserException(message, snippetForPosition(startLine, startColumn),
- getLocation(startLine, startColumn));
+ getOrigin(startLine, startColumn));
}
private void warnIgnoringOptions(String optionName, int startLine, int startColumn) {
reporter.warning(new StringDiagnostic(
"Ignoring option: -" + optionName,
- getLocation(startLine, startColumn)));
+ getOrigin(startLine, startColumn)));
}
private void warnOverridingOptions(String optionName, String victim, int optionLine,
int optionColumn) {
reporter.warning(
new StringDiagnostic("Option -" + optionName + " overrides -" + victim,
- getLocation(optionLine, optionColumn)));
+ getOrigin(optionLine, optionColumn)));
}
- private Location getLocation(int startLine, int startColumn) {
- return TextRangeLocation.get(origin, startLine, startColumn, line, getColumn());
+ private Origin getOrigin(int startLine, int startColumn) {
+ return TextRangeOrigin.get(origin, startLine, startColumn, line, getColumn());
}
- private Location getLocation() {
- return TextRangeLocation.get(origin, line, getColumn());
+ private Origin getOrigin() {
+ return TextRangeOrigin.get(origin, line, getColumn());
}
private int getColumn() {
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardRuleParserException.java b/src/main/java/com/android/tools/r8/shaking/ProguardRuleParserException.java
index 01396c8..4b9308c 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardRuleParserException.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardRuleParserException.java
@@ -4,29 +4,29 @@
package com.android.tools.r8.shaking;
import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Location;
+import com.android.tools.r8.origin.Origin;
public class ProguardRuleParserException extends Exception implements Diagnostic {
private final String message;
private final String snippet;
- private final Location location;
+ private final Origin origin;
- public ProguardRuleParserException(String message, String snippet, Location location) {
+ public ProguardRuleParserException(String message, String snippet, Origin origin) {
this.message = message;
this.snippet = snippet;
- this.location = location;
+ this.origin = origin;
}
- public ProguardRuleParserException(String message, String snippet, Location location,
+ public ProguardRuleParserException(String message, String snippet, Origin origin,
Throwable cause) {
- this(message, snippet,location);
+ this(message, snippet,origin);
initCause(cause);
}
@Override
- public Location getLocation() {
- return location;
+ public Origin getOrigin() {
+ return origin;
}
@Override
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 566bdb4..4b7b6d4 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.ClassFileResourceProvider;
-import com.android.tools.r8.Location;
import com.android.tools.r8.Resource;
import com.android.tools.r8.dex.VDexFile;
import com.android.tools.r8.dex.VDexFileReader;
@@ -755,8 +754,7 @@
programFileArchiveReaders
.add(new ProgramFileArchiveReader(filteredClassPath, ignoreDexInArchive));
} else {
- throw new CompilationError("Unsupported source file type",
- new Location(new PathOrigin(file)));
+ throw new CompilationError("Unsupported source file type", new PathOrigin(file));
}
}
@@ -785,8 +783,7 @@
assert classPath.isUnfiltered();
providerList.add(DirectoryClassFileProvider.fromDirectory(file));
} else {
- throw new CompilationError("Unsupported source file type",
- new Location(new PathOrigin(file)));
+ throw new CompilationError("Unsupported source file type", new PathOrigin(file));
}
}
}
diff --git a/src/main/java/com/android/tools/r8/utils/IOExceptionDiagnostic.java b/src/main/java/com/android/tools/r8/utils/IOExceptionDiagnostic.java
index f4ae918..8856f26 100644
--- a/src/main/java/com/android/tools/r8/utils/IOExceptionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/IOExceptionDiagnostic.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.utils;
-import com.android.tools.r8.Location;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -15,18 +15,18 @@
public class IOExceptionDiagnostic extends DiagnosticWithThrowable {
- private final Location location;
+ private final Origin origin;
private final String message;
public IOExceptionDiagnostic(IOException e) {
super(e);
- location = extractLocation(e);
+ origin = extractOrigin(e);
message = extractMessage(e);
}
- public IOExceptionDiagnostic(IOException e, Location location) {
+ public IOExceptionDiagnostic(IOException e, Origin origin) {
super(e);
- this.location = location;
+ this.origin = origin;
message = extractMessage(e);
}
@@ -42,21 +42,21 @@
return message;
}
- private Location extractLocation(IOException e) {
- Location location = Location.UNKNOWN;
+ private Origin extractOrigin(IOException e) {
+ Origin origin = Origin.unknown();
if (e instanceof FileSystemException) {
FileSystemException fse = (FileSystemException) e;
if (fse.getFile() != null && !fse.getFile().isEmpty()) {
- location = new Location(new PathOrigin(Paths.get(fse.getFile())));
+ origin = new PathOrigin(Paths.get(fse.getFile()));
}
}
- return location;
+ return origin;
}
@Override
- public Location getLocation() {
- return location;
+ public Origin getOrigin() {
+ return origin;
}
@Override
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 3e46816..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,30 +4,25 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Location;
import com.android.tools.r8.origin.Origin;
public class StringDiagnostic implements Diagnostic {
- private final Location location;
+ private final Origin origin;
private final String message;
public StringDiagnostic(String message) {
- this(message, Location.UNKNOWN);
+ this(message, Origin.unknown());
}
public StringDiagnostic(String message, Origin origin) {
- this(message, new Location(origin));
- }
-
- public StringDiagnostic(String message, Location location) {
- this.location = location;
+ this.origin = origin;
this.message = message;
}
@Override
- public Location getLocation() {
- return location;
+ public Origin getOrigin() {
+ return origin;
}
@Override
diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8DiagnosticsHandler.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8DiagnosticsHandler.java
index 87c738c..3dca445 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8DiagnosticsHandler.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8DiagnosticsHandler.java
@@ -6,11 +6,10 @@
import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Location;
-import com.android.tools.r8.TextRangeLocation;
import com.android.tools.r8.origin.ArchiveEntryOrigin;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.origin.TextRangeOrigin;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -45,19 +44,19 @@
protected void convertToMessage(Diagnostic diagnostic) {
String textMessage = diagnostic.getDiagnosticMessage();
- Location location = diagnostic.getLocation();
+ Origin origin = diagnostic.getOrigin();
String position;
- if (location instanceof TextRangeLocation && location.getOrigin() instanceof PathOrigin) {
- TextRangeLocation textRange = (TextRangeLocation) location;
- position = ((PathOrigin) location.getOrigin()).getPath().toFile() + ": "
+ if (origin instanceof TextRangeOrigin && origin.parent() instanceof PathOrigin) {
+ TextRangeOrigin textRange = (TextRangeOrigin) origin;
+ position = ((PathOrigin) origin.parent()).getPath().toFile() + ": "
+ textRange.getStart().getLine() + "," + textRange.getStart().getColumn()
+ " - " + textRange.getEnd().getLine() + "," + textRange.getEnd().getColumn();
- } else if (location.getOrigin() instanceof PathOrigin) {
- position = ((PathOrigin) location.getOrigin()).getPath().toFile().toString();
+ } else if (origin.parent() instanceof PathOrigin) {
+ position = ((PathOrigin) origin.parent()).getPath().toFile().toString();
} else {
position = "UNKNOWN";
- if (location != Location.UNKNOWN) {
- textMessage = location.getDescription() + ": " + textMessage;
+ if (origin != Origin.unknown()) {
+ textMessage = origin.toString() + ": " + textMessage;
}
}
diff --git a/src/test/java/com/android/tools/r8/D8CommandTest.java b/src/test/java/com/android/tools/r8/D8CommandTest.java
index 2244d29..c9db878 100644
--- a/src/test/java/com/android/tools/r8/D8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/D8CommandTest.java
@@ -253,6 +253,6 @@
private D8Command parse(String... args)
throws CompilationFailedException {
- return D8Command.parse(args, new Location(EmbeddedOrigin.INSTANCE)).build();
+ return D8Command.parse(args, EmbeddedOrigin.INSTANCE).build();
}
}
diff --git a/src/test/java/com/android/tools/r8/R8CommandTest.java b/src/test/java/com/android/tools/r8/R8CommandTest.java
index 699b87d..9f838a4 100644
--- a/src/test/java/com/android/tools/r8/R8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/R8CommandTest.java
@@ -251,6 +251,6 @@
private R8Command parse(String... args)
throws CompilationException, ProguardRuleParserException, IOException,
CompilationFailedException {
- return R8Command.parse(args, new Location(EmbeddedOrigin.INSTANCE)).build();
+ return R8Command.parse(args, EmbeddedOrigin.INSTANCE).build();
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index ca3c9d0..7f39d8e 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -14,7 +14,7 @@
import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TextRangeLocation;
+import com.android.tools.r8.origin.TextRangeOrigin;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.ClassAccessFlags;
import com.android.tools.r8.graph.DexItemFactory;
@@ -22,7 +22,6 @@
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.AbortException;
-import com.android.tools.r8.utils.DefaultDiagnosticsHandler;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions.PackageObfuscationMode;
import com.android.tools.r8.utils.Reporter;
@@ -981,9 +980,9 @@
int columnStart, String... messageParts) {
assertEquals(1, diagnostics.size());
Diagnostic diagnostic = diagnostics.get(0);
- assertEquals(path, ((PathOrigin) diagnostic.getLocation().getOrigin()).getPath());
- assertEquals(new TextRangeLocation.TextPosition(lineStart, columnStart),
- ((TextRangeLocation) diagnostic.getLocation()).getStart());
+ assertEquals(path, ((PathOrigin) diagnostic.getOrigin().parent()).getPath());
+ assertEquals(new TextRangeOrigin.TextPosition(lineStart, columnStart),
+ ((TextRangeOrigin) diagnostic.getOrigin()).getStart());
for (String part:messageParts) {
assertTrue(diagnostic.getDiagnosticMessage()+ "doesn't contain \"" + part + "\"",
diagnostic.getDiagnosticMessage().contains(part));
diff --git a/tests/api_usage_sample.jar b/tests/api_usage_sample.jar
index aa67d74..69af652 100644
--- a/tests/api_usage_sample.jar
+++ b/tests/api_usage_sample.jar
Binary files differ