42 * documentation and/or other materials provided with the distribution.
43 * 3. Neither the name of the copyright holders nor the names of its
44 * contributors may be used to endorse or promote products derived from
45 * this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
48 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
51 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
52 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
53 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
55 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
57 * THE POSSIBILITY OF SUCH DAMAGE.
58 */
59
60 package jdk.internal.org.objectweb.asm.commons;
61
62 import jdk.internal.org.objectweb.asm.AnnotationVisitor;
63 import jdk.internal.org.objectweb.asm.ClassVisitor;
64 import jdk.internal.org.objectweb.asm.FieldVisitor;
65 import jdk.internal.org.objectweb.asm.MethodVisitor;
66 import jdk.internal.org.objectweb.asm.Opcodes;
67 import jdk.internal.org.objectweb.asm.TypePath;
68
69 /**
70 * A {@link ClassVisitor} for type remapping.
71 *
72 * @author Eugene Kuleshov
73 */
74 public class ClassRemapper extends ClassVisitor {
75
76 protected final Remapper remapper;
77
78 protected String className;
79
80 public ClassRemapper(final ClassVisitor cv, final Remapper remapper) {
81 this(Opcodes.ASM5, cv, remapper);
82 }
83
84 protected ClassRemapper(final int api, final ClassVisitor cv,
85 final Remapper remapper) {
86 super(api, cv);
87 this.remapper = remapper;
88 }
89
90 @Override
91 public void visit(int version, int access, String name, String signature,
92 String superName, String[] interfaces) {
93 this.className = name;
94 super.visit(version, access, remapper.mapType(name), remapper
95 .mapSignature(signature, false), remapper.mapType(superName),
96 interfaces == null ? null : remapper.mapTypes(interfaces));
97 }
98
99 @Override
100 public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
101 AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc),
102 visible);
103 return av == null ? null : createAnnotationRemapper(av);
104 }
105
106 @Override
107 public AnnotationVisitor visitTypeAnnotation(int typeRef,
108 TypePath typePath, String desc, boolean visible) {
109 AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath,
110 remapper.mapDesc(desc), visible);
111 return av == null ? null : createAnnotationRemapper(av);
112 }
113
114 @Override
115 public FieldVisitor visitField(int access, String name, String desc,
116 String signature, Object value) {
117 FieldVisitor fv = super.visitField(access,
118 remapper.mapFieldName(className, name, desc),
119 remapper.mapDesc(desc), remapper.mapSignature(signature, true),
120 remapper.mapValue(value));
121 return fv == null ? null : createFieldRemapper(fv);
122 }
123
124 @Override
125 public MethodVisitor visitMethod(int access, String name, String desc,
126 String signature, String[] exceptions) {
127 String newDesc = remapper.mapMethodDesc(desc);
128 MethodVisitor mv = super.visitMethod(access, remapper.mapMethodName(
129 className, name, desc), newDesc, remapper.mapSignature(
130 signature, false),
131 exceptions == null ? null : remapper.mapTypes(exceptions));
132 return mv == null ? null : createMethodRemapper(mv);
133 }
134
141 }
142
143 @Override
144 public void visitOuterClass(String owner, String name, String desc) {
145 super.visitOuterClass(remapper.mapType(owner), name == null ? null
146 : remapper.mapMethodName(owner, name, desc),
147 desc == null ? null : remapper.mapMethodDesc(desc));
148 }
149
150 protected FieldVisitor createFieldRemapper(FieldVisitor fv) {
151 return new FieldRemapper(fv, remapper);
152 }
153
154 protected MethodVisitor createMethodRemapper(MethodVisitor mv) {
155 return new MethodRemapper(mv, remapper);
156 }
157
158 protected AnnotationVisitor createAnnotationRemapper(AnnotationVisitor av) {
159 return new AnnotationRemapper(av, remapper);
160 }
161 }
|
42 * documentation and/or other materials provided with the distribution.
43 * 3. Neither the name of the copyright holders nor the names of its
44 * contributors may be used to endorse or promote products derived from
45 * this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
48 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
51 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
52 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
53 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
55 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
57 * THE POSSIBILITY OF SUCH DAMAGE.
58 */
59
60 package jdk.internal.org.objectweb.asm.commons;
61
62 import java.util.List;
63
64 import jdk.internal.org.objectweb.asm.AnnotationVisitor;
65 import jdk.internal.org.objectweb.asm.Attribute;
66 import jdk.internal.org.objectweb.asm.ClassVisitor;
67 import jdk.internal.org.objectweb.asm.FieldVisitor;
68 import jdk.internal.org.objectweb.asm.MethodVisitor;
69 import jdk.internal.org.objectweb.asm.ModuleVisitor;
70 import jdk.internal.org.objectweb.asm.Opcodes;
71 import jdk.internal.org.objectweb.asm.TypePath;
72
73 /**
74 * A {@link ClassVisitor} for type remapping.
75 *
76 * @author Eugene Kuleshov
77 */
78 public class ClassRemapper extends ClassVisitor {
79
80 protected final Remapper remapper;
81
82 protected String className;
83
84 public ClassRemapper(final ClassVisitor cv, final Remapper remapper) {
85 this(Opcodes.ASM6, cv, remapper);
86 }
87
88 protected ClassRemapper(final int api, final ClassVisitor cv,
89 final Remapper remapper) {
90 super(api, cv);
91 this.remapper = remapper;
92 }
93
94 @Override
95 public void visit(int version, int access, String name, String signature,
96 String superName, String[] interfaces) {
97 this.className = name;
98 super.visit(version, access, remapper.mapType(name), remapper
99 .mapSignature(signature, false), remapper.mapType(superName),
100 interfaces == null ? null : remapper.mapTypes(interfaces));
101 }
102
103 @Override
104 public ModuleVisitor visitModule(String name, int flags, String version) {
105 ModuleVisitor mv = super.visitModule(remapper.mapModuleName(name), flags, version);
106 return mv == null ? null : createModuleRemapper(mv);
107 }
108
109 @Override
110 public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
111 AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc),
112 visible);
113 return av == null ? null : createAnnotationRemapper(av);
114 }
115
116 @Override
117 public AnnotationVisitor visitTypeAnnotation(int typeRef,
118 TypePath typePath, String desc, boolean visible) {
119 AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath,
120 remapper.mapDesc(desc), visible);
121 return av == null ? null : createAnnotationRemapper(av);
122 }
123
124 @Override
125 public void visitAttribute(Attribute attr) {
126 if (attr instanceof ModuleHashesAttribute) {
127 ModuleHashesAttribute hashesAttr = new ModuleHashesAttribute();
128 List<String> modules = hashesAttr.modules;
129 for(int i = 0; i < modules.size(); i++) {
130 modules.set(i, remapper.mapModuleName(modules.get(i)));
131 }
132 }
133 super.visitAttribute(attr);
134 }
135
136 @Override
137 public FieldVisitor visitField(int access, String name, String desc,
138 String signature, Object value) {
139 FieldVisitor fv = super.visitField(access,
140 remapper.mapFieldName(className, name, desc),
141 remapper.mapDesc(desc), remapper.mapSignature(signature, true),
142 remapper.mapValue(value));
143 return fv == null ? null : createFieldRemapper(fv);
144 }
145
146 @Override
147 public MethodVisitor visitMethod(int access, String name, String desc,
148 String signature, String[] exceptions) {
149 String newDesc = remapper.mapMethodDesc(desc);
150 MethodVisitor mv = super.visitMethod(access, remapper.mapMethodName(
151 className, name, desc), newDesc, remapper.mapSignature(
152 signature, false),
153 exceptions == null ? null : remapper.mapTypes(exceptions));
154 return mv == null ? null : createMethodRemapper(mv);
155 }
156
163 }
164
165 @Override
166 public void visitOuterClass(String owner, String name, String desc) {
167 super.visitOuterClass(remapper.mapType(owner), name == null ? null
168 : remapper.mapMethodName(owner, name, desc),
169 desc == null ? null : remapper.mapMethodDesc(desc));
170 }
171
172 protected FieldVisitor createFieldRemapper(FieldVisitor fv) {
173 return new FieldRemapper(fv, remapper);
174 }
175
176 protected MethodVisitor createMethodRemapper(MethodVisitor mv) {
177 return new MethodRemapper(mv, remapper);
178 }
179
180 protected AnnotationVisitor createAnnotationRemapper(AnnotationVisitor av) {
181 return new AnnotationRemapper(av, remapper);
182 }
183
184 protected ModuleVisitor createModuleRemapper(ModuleVisitor mv) {
185 return new ModuleRemapper(mv, remapper);
186 }
187 }
|