• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // ASM: a very small and fast Java bytecode manipulation framework
2 // Copyright (c) 2000-2011 INRIA, France Telecom
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions
7 // are met:
8 // 1. Redistributions of source code must retain the above copyright
9 //    notice, this list of conditions and the following disclaimer.
10 // 2. Redistributions in binary form must reproduce the above copyright
11 //    notice, this list of conditions and the following disclaimer in the
12 //    documentation and/or other materials provided with the distribution.
13 // 3. Neither the name of the copyright holders nor the names of its
14 //    contributors may be used to endorse or promote products derived from
15 //    this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27 // THE POSSIBILITY OF SUCH DAMAGE.
28 
29 package org.objectweb.asm.commons;
30 
31 import java.util.Collections;
32 import java.util.Map;
33 
34 /**
35  * A {@link Remapper} using a {@link Map} to define its mapping.
36  *
37  * @author Eugene Kuleshov
38  */
39 public class SimpleRemapper extends Remapper {
40 
41   private final Map<String, String> mapping;
42 
43   /**
44    * Constructs a new {@link SimpleRemapper} with the given mapping.
45    *
46    * @param mapping a map specifying a remapping as follows:
47    *     <ul>
48    *       <li>for method names, the key is the owner, name and descriptor of the method (in the
49    *           form &lt;owner&gt;.&lt;name&gt;&lt;descriptor&gt;), and the value is the new method
50    *           name.
51    *       <li>for invokedynamic method names, the key is the name and descriptor of the method (in
52    *           the form .&lt;name&gt;&lt;descriptor&gt;), and the value is the new method name.
53    *       <li>for field and attribute names, the key is the owner and name of the field or
54    *           attribute (in the form &lt;owner&gt;.&lt;name&gt;), and the value is the new field
55    *           name.
56    *       <li>for internal names, the key is the old internal name, and the value is the new
57    *           internal name (see {@link org.objectweb.asm.Type#getInternalName()}).
58    *     </ul>
59    */
SimpleRemapper(final Map<String, String> mapping)60   public SimpleRemapper(final Map<String, String> mapping) {
61     this.mapping = mapping;
62   }
63 
64   /**
65    * Constructs a new {@link SimpleRemapper} with the given mapping.
66    *
67    * @param oldName the key corresponding to a method, field or internal name (see {@link
68    *     #SimpleRemapper(Map)} for the format of these keys).
69    * @param newName the new method, field or internal name (see {@link
70    *     org.objectweb.asm.Type#getInternalName()}).
71    */
SimpleRemapper(final String oldName, final String newName)72   public SimpleRemapper(final String oldName, final String newName) {
73     this.mapping = Collections.singletonMap(oldName, newName);
74   }
75 
76   @Override
mapMethodName(final String owner, final String name, final String descriptor)77   public String mapMethodName(final String owner, final String name, final String descriptor) {
78     String remappedName = map(owner + '.' + name + descriptor);
79     return remappedName == null ? name : remappedName;
80   }
81 
82   @Override
mapInvokeDynamicMethodName(final String name, final String descriptor)83   public String mapInvokeDynamicMethodName(final String name, final String descriptor) {
84     String remappedName = map('.' + name + descriptor);
85     return remappedName == null ? name : remappedName;
86   }
87 
88   @Override
mapAnnotationAttributeName(final String descriptor, final String name)89   public String mapAnnotationAttributeName(final String descriptor, final String name) {
90     String remappedName = map(descriptor + '.' + name);
91     return remappedName == null ? name : remappedName;
92   }
93 
94   @Override
mapFieldName(final String owner, final String name, final String descriptor)95   public String mapFieldName(final String owner, final String name, final String descriptor) {
96     String remappedName = map(owner + '.' + name);
97     return remappedName == null ? name : remappedName;
98   }
99 
100   @Override
map(final String key)101   public String map(final String key) {
102     return mapping.get(key);
103   }
104 }
105