blob: d523a530b3cc828a06cfd6819e145e1d09ce7d8c [file] [log] [blame]
// 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.apiusagesample;
import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic;
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.position.Position;
import com.android.tools.r8.position.TextPosition;
import com.android.tools.r8.position.TextRange;
import java.nio.file.Files;
import java.nio.file.Path;
class D8DiagnosticsHandler implements DiagnosticsHandler {
public D8DiagnosticsHandler() {
}
public static Origin getOrigin(Path root, Path entry) {
if (Files.isRegularFile(root)) {
return new ArchiveEntryOrigin(entry.toString(), new PathOrigin(root));
} else {
return new PathOrigin(root.resolve(entry.toString()));
}
}
@Override
public void error(Diagnostic error) {
convertToMessage(error);
}
@Override
public void warning(Diagnostic warning) {
if (warning instanceof InterfaceDesugarMissingTypeDiagnostic) {
desugarInterfaceMethodInfo((InterfaceDesugarMissingTypeDiagnostic) warning);
} else {
convertToMessage(warning);
}
}
@Override
public void info(Diagnostic info) {
convertToMessage(info);
}
void desugarInterfaceMethodInfo(InterfaceDesugarMissingTypeDiagnostic info) {
System.out.println("desugar is missing: " + info.getMissingType().toString());
System.out.println(" used from: " + info.getContextType().toString());
convertToMessage(info);
}
protected void convertToMessage(Diagnostic diagnostic) {
String textMessage = diagnostic.getDiagnosticMessage();
Origin origin = diagnostic.getOrigin();
Position positionInOrigin = diagnostic.getPosition();
String position;
if (origin instanceof PathOrigin) {
Path originFile = ((PathOrigin) origin).getPath();
if (positionInOrigin instanceof TextRange) {
TextRange textRange = (TextRange) positionInOrigin;
position = originFile + ": "
+ textRange.getStart().getLine() + "," + textRange.getStart().getColumn()
+ " - " + textRange.getEnd().getLine() + "," + textRange.getEnd().getColumn();
} else if (positionInOrigin instanceof TextPosition) {
TextPosition textPosition = (TextPosition) positionInOrigin;
position = originFile + ": "
+ textPosition.getLine() + "," + textPosition.getColumn();
} else {
position = originFile.toString();
}
} else if (origin.parent() instanceof PathOrigin) {
Path originFile = ((PathOrigin) origin.parent()).getPath();
position = originFile.toString();
} else {
position = "UNKNOWN";
if (origin != Origin.unknown()) {
textMessage = origin.toString() + ": " + textMessage;
}
}
System.out.println(position + ": " + textMessage);
}
}