| // 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); | |
| } | |
| } |