blob: 2392f0a4fd1a0789c01d7b5470124511633ce29a [file] [log] [blame]
// 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.Keep;
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.StringUtils;
import java.util.List;
/**
* Diagnostic for super types of library classes which are not library classes but required for
* desugaring.
*/
@Keep
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();
}
}