| // Copyright (c) 2020, 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.errors; | |
| import com.android.tools.r8.keepanno.annotations.KeepForApi; | |
| import com.android.tools.r8.origin.Origin; | |
| import com.android.tools.r8.position.Position; | |
| import com.android.tools.r8.references.ClassReference; | |
| import com.android.tools.r8.references.MethodReference; | |
| import com.android.tools.r8.utils.internal.StringUtils; | |
| import java.util.List; | |
| /** | |
| * Diagnostic for super types of library classes which are not library classes but required for | |
| * desugaring. | |
| */ | |
| @KeepForApi | |
| public class InvalidLibrarySuperclassDiagnostic implements DesugarDiagnostic { | |
| private final Origin origin; | |
| private final List<MethodReference> methods; | |
| private final ClassReference libraryType; | |
| private final ClassReference invalidSuperType; | |
| private final String message; | |
| public InvalidLibrarySuperclassDiagnostic( | |
| Origin origin, | |
| ClassReference libraryType, | |
| ClassReference invalidSuperType, | |
| String message, | |
| List<MethodReference> methods) { | |
| assert origin != null; | |
| assert libraryType != null; | |
| assert invalidSuperType != null; | |
| assert message != null; | |
| this.origin = origin; | |
| this.libraryType = libraryType; | |
| this.invalidSuperType = invalidSuperType; | |
| this.message = message; | |
| this.methods = methods; | |
| } | |
| @Override | |
| public Origin getOrigin() { | |
| return origin; | |
| } | |
| @Override | |
| public Position getPosition() { | |
| return Position.UNKNOWN; | |
| } | |
| @Override | |
| public String getDiagnosticMessage() { | |
| StringBuilder builder = | |
| new StringBuilder() | |
| .append("Superclass `") | |
| .append(invalidSuperType.getTypeName()) | |
| .append("` of library class `") | |
| .append(libraryType.getTypeName()) | |
| .append("` is ") | |
| .append(message) | |
| .append( | |
| ". A superclass of a library class should be a library class. This is required for" | |
| + " the desugaring of "); | |
| StringUtils.append(builder, methods, ", ", StringUtils.BraceType.NONE); | |
| return builder.toString(); | |
| } | |
| } |