| // Copyright (c) 2022, 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.Diagnostic; |
| import com.android.tools.r8.Keep; |
| import com.android.tools.r8.graph.DexClass; |
| import com.android.tools.r8.graph.DexProgramClass; |
| import com.android.tools.r8.origin.Origin; |
| import com.android.tools.r8.position.Position; |
| import com.google.common.collect.ImmutableList; |
| import java.util.Comparator; |
| import java.util.List; |
| |
| @Keep |
| public class CheckEnumUnboxedDiagnostic implements Diagnostic { |
| |
| private final List<String> messages; |
| |
| CheckEnumUnboxedDiagnostic(List<String> messages) { |
| this.messages = messages; |
| } |
| |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| /** The origin of a -checkenumunboxed failure is not unique. (The whole app is to blame.) */ |
| @Override |
| public Origin getOrigin() { |
| return Origin.unknown(); |
| } |
| |
| /** The position of a -checkenumunboxed failure is always unknown. */ |
| @Override |
| public Position getPosition() { |
| return Position.UNKNOWN; |
| } |
| |
| @Override |
| public String getDiagnosticMessage() { |
| StringBuilder builder = new StringBuilder("Enum unboxing checks failed."); |
| for (String message : messages) { |
| builder.append(System.lineSeparator()); |
| builder.append(message); |
| } |
| return builder.toString(); |
| } |
| |
| public static class Builder { |
| |
| private final ImmutableList.Builder<String> messagesBuilder = ImmutableList.builder(); |
| |
| public Builder addFailedEnums(List<DexProgramClass> failed) { |
| failed.sort(Comparator.comparing(DexClass::getType)); |
| for (DexProgramClass clazz : failed) { |
| messagesBuilder.add("Enum " + clazz.getTypeName() + " was not unboxed."); |
| } |
| return this; |
| } |
| |
| public CheckEnumUnboxedDiagnostic build() { |
| return new CheckEnumUnboxedDiagnostic(messagesBuilder.build()); |
| } |
| } |
| } |