/** {@inheritDoc} */ @Override public byte[] loadReplace(InputStream in, final String originalName, final String replaceName) { ClassReader rdr; try { rdr = new ClassReader(in); } catch (IOException e) { throw new RuntimeException(e); } ClassWriter w = new ClassWriter(Opcodes.ASM4); rdr.accept(new RemappingClassAdapter(w, new Remapper() { /** */ String replaceType = replaceName.replace('.', '/'); /** */ String nameType = originalName.replace('.', '/'); @Override public String map(String type) { if (type.equals(replaceType)) return nameType; return type; } }), ClassReader.EXPAND_FRAMES); return w.toByteArray(); }
remapper.inputOutput.put( "appeng/api/parts/LayerBase", n.superName ); remapper.inputOutput.put( originalName, n.name ); n.accept( new RemappingClassAdapter( cw, remapper ) );
@Override public ClassVisitor transform(ClassVisitor v) { return new RemappingClassAdapter(v, remapper); }
private static byte[] renameClazz(Remapper remapper, InputStream clazz) { try { ClassWriter writer = new ClassWriter(1); ClassReader reader = new ClassReader(clazz); reader.accept(new ClassForNameFixVisitor(new RemappingClassAdapter(writer, remapper), remapper), 8); return writer.toByteArray(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }
static byte[] createFaviconServletExtension(String name) throws IOException { ClassReader reader = new ClassReader(FaviconServletExtension.class.getClassLoader().getResourceAsStream(FaviconServletExtension.class.getName().replace('.', '/') + ".class")); String slashName = name.replace('.', '/'); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/undertow/internal/FaviconServletExtension")) { return slashName; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, ClassReader.EXPAND_FRAMES); writer.visitEnd(); return writer.toByteArray(); }
static byte[] createFaviconErrorHandler(String name) throws IOException { ClassReader reader = new ClassReader(FaviconErrorHandler.class.getClassLoader().getResourceAsStream(FaviconErrorHandler.class.getName().replace('.', '/') + ".class")); String slashName = name.replace('.', '/'); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/undertow/internal/FaviconErrorHandler")) { return slashName; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, ClassReader.EXPAND_FRAMES); writer.visitEnd(); return writer.toByteArray(); } }
private void remapClass(Class<?> classToMap, ZipOutputStream jar) throws IOException { String internalName = Type.getInternalName(classToMap); String resourceName = internalName.concat(".class"); URL resource = WorkerProcessClassPathProvider.class.getClassLoader().getResource(resourceName); if (resource == null) { throw new IllegalStateException("Could not locate classpath resource for class " + classToMap.getName()); } InputStream inputStream = resource.openStream(); ClassReader classReader; try { classReader = new ClassReader(inputStream); } finally { inputStream.close(); } ClassWriter classWriter = new ClassWriter(0); ClassVisitor remappingVisitor = new RemappingClassAdapter(classWriter, remapper); classReader.accept(remappingVisitor, ClassReader.EXPAND_FRAMES); byte[] remappedClass = classWriter.toByteArray(); String remappedClassName = remapper.map(internalName).concat(".class"); jar.putNextEntry(new ZipEntry(remappedClassName)); jar.write(remappedClass); }
static byte[] create() throws IOException { ClassReader reader = new ClassReader(FaviconExceptionMapper.class.getClassLoader().getResourceAsStream(FaviconExceptionMapper.class.getName().replace('.', '/') + ".class")); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/jaxrs/FaviconExceptionMapper")) { return "org/wildfly/swarm/generated/FaviconExceptionMapper"; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, 0); writer.visitAnnotation("Ljavax/ws/rs/ext/Provider;", true).visitEnd(); writer.visitEnd(); return writer.toByteArray(); } }
static byte[] create() throws IOException { ClassReader reader = new ClassReader(FaviconExceptionMapper.class.getClassLoader().getResourceAsStream(FaviconExceptionMapper.class.getName().replace('.', '/') + ".class")); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/jaxrs/internal/FaviconExceptionMapper")) { return "org/wildfly/swarm/generated/FaviconExceptionMapper"; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, 0); writer.visitAnnotation("Ljavax/ws/rs/ext/Provider;", true).visitEnd(); writer.visitEnd(); return writer.toByteArray(); } }
private void addRemappedClass(final PatternRemapper remapper, final JarOutputStream jos, final String name, final InputStream is) throws IOException { if (!remapper.hasPatterns()) { try { jos.putNextEntry(new JarEntry(name)); IOUtils.copy(is, jos); } catch (final ZipException e) { this.logger.error("Failed to zip files.",e); } } final ClassReader classReader = new ClassReader(is); final ClassWriter classWriter = new ClassWriter(0); final ClassVisitor classVisitor = new RemappingClassAdapter(classWriter, remapper); try { classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES); } catch (final Throwable e) { throw new RuntimeException(e); } final byte[] renamedClass = classWriter.toByteArray(); final String mappedName = remapper.map(name.substring(0, name.indexOf('.'))); try { jos.putNextEntry(new JarEntry(mappedName + ".class")); IOUtils.write(renamedClass, jos); } catch (final ZipException e) { this.logger.error(e.getMessage(), e); } }
@Override public Result scan(Transformable struct) throws IOException { if (!isEnabled()) return Result.KEEP; try { if (ClassNameUtils.isClass(struct.name)) { String name = struct.name.substring(0, struct.name.length() - 6); for (ClassKeepTransitive pattern : patterns) if (pattern.matches(name)) roots.add(name); DependencyCollector collector = new DependencyCollector(); dependencies.put(name, collector.dependencies); new ClassReader(new ByteArrayInputStream(struct.data)).accept(new RemappingClassAdapter(null, collector), ClassReader.EXPAND_FRAMES); collector.dependencies.remove(name); } } catch (Exception e) { LOG.warn("Error reading " + struct.name + ": " + e.getMessage()); } return Result.KEEP; }
static byte[] create(String name, String path) throws IOException { ClassReader reader = new ClassReader(DefaultApplication.class.getClassLoader().getResourceAsStream(DefaultApplication.class.getName().replace('.', '/') + ".class")); String slashName = name.replace('.', '/' ); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/jaxrs/DefaultApplication")) { return slashName; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, 0); AnnotationVisitor ann = writer.visitAnnotation("Ljavax/ws/rs/ApplicationPath;", true); ann.visit("value", path); ann.visitEnd(); writer.visitEnd(); return writer.toByteArray(); } }
static byte[] create(String name, String path) throws IOException { ClassReader reader = new ClassReader(DefaultApplication.class.getClassLoader().getResourceAsStream(DefaultApplication.class.getName().replace('.', '/') + ".class")); String slashName = name.replace('.', '/'); ClassWriter writer = new ClassWriter(0); Remapper remapper = new Remapper() { @Override public String map(String typeName) { if (typeName.equals("org/wildfly/swarm/jaxrs/internal/DefaultApplication")) { return slashName; } return super.map(typeName); } }; RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper); reader.accept(adapter, 0); AnnotationVisitor ann = writer.visitAnnotation("Ljavax/ws/rs/ApplicationPath;", true); ann.visit("value", path); ann.visitEnd(); writer.visitEnd(); return writer.toByteArray(); } }
new CheckClassVisitorFsm(CompilationConfig.ASM_API_VERSION, writerVisitor), true); ClassVisitor remappingAdapter = new RemappingClassAdapter(writerVisitor, re); if (verifyBytecode) { remappingAdapter = new DrillCheckClassAdapter(CompilationConfig.ASM_API_VERSION,