| // Copyright (c) 2019, 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.naming; |
| |
| import com.android.tools.r8.origin.Origin; |
| import com.android.tools.r8.position.Position; |
| import com.android.tools.r8.utils.StringDiagnostic; |
| |
| public class ApplyMappingError extends StringDiagnostic { |
| |
| private static final String EXISTING_MESSAGE_START = |
| "'%s' cannot be mapped to '%s' because it is in conflict with an existing "; |
| private static final String EXISTING_MESSAGE_END = |
| ". This usually happens when compiling a test application against a source application and " |
| + "there are used classes in the test that was not given a -keep rule when compiling the " |
| + "app. Try either renaming '%s' such that it will not collide or add a keep rule to " |
| + "keep '%s'."; |
| |
| protected static final String EXISTING_CLASS_MESSAGE = |
| EXISTING_MESSAGE_START + "class with the same name" + EXISTING_MESSAGE_END; |
| protected static final String EXISTING_MEMBER_MESSAGE = |
| EXISTING_MESSAGE_START + "member with the same signature" + EXISTING_MESSAGE_END; |
| |
| private ApplyMappingError(String message, Position position) { |
| super(message, Origin.unknown(), position); |
| } |
| |
| static ApplyMappingError mapToExistingClass( |
| String originalName, String renamedName, Position position) { |
| return new ApplyMappingError( |
| String.format(EXISTING_CLASS_MESSAGE, originalName, renamedName, renamedName, originalName), |
| position); |
| } |
| |
| static ApplyMappingError mapToExistingMember( |
| String originalName, String renamedName, Position position) { |
| return new ApplyMappingError( |
| String.format( |
| EXISTING_MEMBER_MESSAGE, originalName, renamedName, renamedName, originalName), |
| position); |
| } |
| } |