|  | // Copyright (c) 2017, 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.naming.MemberNaming.Signature; | 
|  | import com.android.tools.r8.origin.Origin; | 
|  | import com.android.tools.r8.position.Position; | 
|  | import com.android.tools.r8.utils.StringDiagnostic; | 
|  |  | 
|  | public class ProguardMapError extends StringDiagnostic { | 
|  |  | 
|  | protected static final String DUPLICATE_TARGET_MESSAGE = "'%s' and '%s' map to same name: '%s'"; | 
|  | protected static final String DUPLICATE_SOURCE_MESSAGE = "'%s' already has a mapping"; | 
|  |  | 
|  | private ProguardMapError(String message, Position position) { | 
|  | super(message, Origin.unknown(), position); | 
|  | } | 
|  |  | 
|  | static ProguardMapError duplicateSourceClass(String typeName, Position position) { | 
|  | return new ProguardMapError(String.format(DUPLICATE_SOURCE_MESSAGE, typeName), position); | 
|  | } | 
|  |  | 
|  | static ProguardMapError duplicateSourceMember( | 
|  | String signature, String typeName, Position position) { | 
|  | return new ProguardMapError( | 
|  | String.format(DUPLICATE_SOURCE_MESSAGE, signature, typeName), position); | 
|  | } | 
|  |  | 
|  | static ProguardMapError duplicateTargetClass( | 
|  | String source, String other, String mappedName, Position position) { | 
|  | return new ProguardMapError( | 
|  | String.format(DUPLICATE_TARGET_MESSAGE, source, other, mappedName), position); | 
|  | } | 
|  |  | 
|  | static ProguardMapError duplicateTargetSignature( | 
|  | Signature source, Signature other, String mappedName, Position position) { | 
|  | return new ProguardMapError( | 
|  | String.format(DUPLICATE_TARGET_MESSAGE, source.toString(), other.toString(), mappedName), | 
|  | position); | 
|  | } | 
|  | } |