| // Copyright (c) 2021, 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.utils; |
| |
| import com.android.tools.r8.diagnostic.DefinitionContext; |
| import com.android.tools.r8.diagnostic.internal.DefinitionContextUtils; |
| import com.android.tools.r8.references.ClassReference; |
| import com.android.tools.r8.references.FieldReference; |
| import com.android.tools.r8.references.MethodReference; |
| import com.android.tools.r8.references.Reference; |
| |
| public class MissingDefinitionsDiagnosticTestUtils { |
| |
| public static String getMissingClassMessage( |
| Class<?> missingClass, DefinitionContext... referencedFrom) { |
| return getMissingClassMessage(Reference.classFromClass(missingClass), referencedFrom); |
| } |
| |
| public static String getMissingClassMessage( |
| ClassReference missingReference, DefinitionContext... referencedFrom) { |
| StringBuilder builder = |
| new StringBuilder("Missing class ").append(missingReference.getTypeName()); |
| appendReferencedFromSuffix(builder, referencedFrom); |
| return builder.toString(); |
| } |
| |
| public static String getMissingFieldMessage( |
| FieldReference missingReference, DefinitionContext... referencedFrom) { |
| StringBuilder builder = |
| new StringBuilder("Missing field ") |
| .append(FieldReferenceUtils.toSourceString(missingReference)); |
| appendReferencedFromSuffix(builder, referencedFrom); |
| return builder.toString(); |
| } |
| |
| public static String getMissingMethodMessage( |
| MethodReference missingReference, DefinitionContext... referencedFrom) { |
| StringBuilder builder = |
| new StringBuilder("Missing method ") |
| .append(MethodReferenceUtils.toSourceString(missingReference)); |
| appendReferencedFromSuffix(builder, referencedFrom); |
| return builder.toString(); |
| } |
| |
| private static void appendReferencedFromSuffix( |
| StringBuilder builder, DefinitionContext... referencedFrom) { |
| builder |
| .append(" (referenced from: ") |
| .append(DefinitionContextUtils.toSourceString(referencedFrom[0])); |
| int numberOfContexts = referencedFrom.length; |
| if (numberOfContexts > 1) { |
| builder.append(" and ").append(numberOfContexts - 1).append(" other context"); |
| if (numberOfContexts > 2) { |
| builder.append("s"); |
| } |
| } |
| builder.append(")"); |
| } |
| } |