List of usage examples for org.objectweb.asm ClassWriter COMPUTE_FRAMES
int COMPUTE_FRAMES
To view the source code for org.objectweb.asm ClassWriter COMPUTE_FRAMES.
Click Source Link
From source file:Test1.java
License:Apache License
private static void implementInterface(ClassNode cn) throws Exception { // MethodNode fromMethod = new MethodNode(ACC_PUBLIC, "fromData", // "(Ljava/io/DataInput;)V", null, new String[] { // "java/io/IOException", // "java/lang/ClassNotFoundException" }); // mv = cw.visitMethod(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V", // null, new String[] { "java/io/IOException" }); MethodNode toMethod = new MethodNode(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V", null, new String[] { "java/io/IOException" }); InsnList instToMethod = toMethod.instructions; for (int i = 0; i < cn.fields.size(); i++) { FieldNode fn = (FieldNode) cn.fields.get(i); toMethod(cn.name, fn, instToMethod); }//from w w w.jav a 2 s.co m instToMethod.add(new InsnNode(RETURN)); cn.methods.add(toMethod); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cn.accept(cw); byte[] bt = cw.toByteArray(); ClassReader cr = new ClassReader(bt); CheckClassAdapter ca = new CheckClassAdapter(cw); FileOutputStream fo = new FileOutputStream("d:/x1.log"); PrintWriter pw = new PrintWriter(fo); ca.verify(cr, true, pw); ByteArrayClassLoader bacl = new ByteArrayClassLoader(bt); Class cls = bacl.loadClass("ynd.test.Ac01"); DataSerializable di = (DataSerializable) cls.newInstance(); di.toData(null); }
From source file:allout58.mods.techtree.asm.TechTreeModClassTransformer.java
License:Open Source License
private byte[] apply(byte[] bytes, String name, int id) { Preconditions.checkNotNull(bytes);/*w ww. jav a 2 s .co m*/ ClassReader reader = new ClassReader(bytes); ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); ClassVisitor visitor = null; switch (id) { case 0: visitor = new CraftingContainerVisitor(name, writer); break; case 1: visitor = new CraftingPlayerVisitor(name, writer); break; } try { if (visitor != null) reader.accept(visitor, 0); return writer.toByteArray(); } catch (Exception e) { FMLRelaunchLog.severe("Error transforming %s: %s", name, e); return bytes; } }
From source file:analysis.RuntimeTemplateGenerator.java
License:Open Source License
public JarClasses generateTemplate() { ClassReader classReader;/*from ww w . j a v a2s .c o m*/ ClassVisitor classVisitor; ClassWriter classWriter; Map<String, JarClasses.Entry> entries = new HashMap<String, JarClasses.Entry>(); for (ClassReference ref : references) { classReader = classes.get(ref.getName()); classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); classVisitor = getClassTransformer(ref, classWriter); classReader.accept(classVisitor, ClassReader.SKIP_FRAMES); entries.put(ref.getName(), new JarClasses.Entry(classWriter.toByteArray(), ref.getName())); } return new JarClasses(entries); }
From source file:asmlib.UninitializedCallChecker.java
License:Open Source License
public static void verify(ClassReader cr, PrintWriter pw) { // O AnalyzerAdapter // precisa que as frames estejam delimitadas no cdigo para funcionar correctamente. // Frames parecem ser obrigatrias a partir do Java 6, mas muitas classes no as tm // por isso fazemos mais um pass com um ClassWriter, para obtermos uma classe com // as frames calculadas. ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cr.accept(cw, 0);// ww w. ja v a 2 s .c o m cr = new ClassReader(cw.toByteArray()); try { cr.accept(new GenericMethodVisitorAdapter(new EmptyClassVisitor(), UninitializedCallChecker.class, cr.getClassName(), pw), ClassReader.EXPAND_FRAMES); } catch (ArrayIndexOutOfBoundsException e) { } }
From source file:blue.origami.asm.OClassWriter.java
License:Apache License
OClassWriter(OClassDecl cdecl) {
super(ClassWriter.COMPUTE_FRAMES);
// super(ClassWriter.COMPUTE_MAXS);
this.cname = cdecl.getName().replace(".", "/");
Type superType = cdecl.getSupertype().asmType();
String[] inames = null;/*from w w w .j a v a 2 s. c o m*/
OType[] inf = cdecl.getInterfaces();
if (inf.length > 0) {
inames = new String[inf.length];
map(inf, inames, t -> t.asmType().getInternalName());
}
this.visit(V1_8, cdecl.getAnno().acc(), this.cname, cdecl.getSignature(), superType.getInternalName(),
inames);
this.visitSource(cdecl.getSourceName(), null);
this.cdecl = cdecl;
}
From source file:blusunrize.immersiveengineering.common.asm.IEClassTransformer.java
@Override public byte[] transform(String name, String transformedName, byte[] basicClass) { if (basicClass != null && transformerMap.containsKey(transformedName)) { MethodTransformer[] transformers = transformerMap.get(transformedName); ClassReader reader = new ClassReader(basicClass); ClassNode node = new ClassNode(); reader.accept(node, 0);// w ww. ja va 2s. c o m for (MethodNode method : node.methods) for (MethodTransformer methodTransformer : transformers) if ((methodTransformer.functionName.equals(method.name) || methodTransformer.srgName.equals(method.name)) && methodTransformer.functionDesc.equals(method.desc)) methodTransformer.function.accept(method); ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); node.accept(writer); return writer.toByteArray(); } return basicClass; }
From source file:boilerplate.processor.BinaryProcessor.java
License:Open Source License
public void processBinary(Binary binary) throws IOException { String type = binary.getClassName(); type = type.replace('.', '/'); byte[] data = binary.loadBytes(); ClassReader reader = new ClassReader(data); ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); ClassVisitor visitor = writer;/*from ww w.ja v a2 s .c om*/ visitor = new CheckClassAdapter(visitor); // visitor = new TraceClassVisitor(visitor, new // PrintWriter(System.out)); visitor = new ToStringAdapter(logger, type, visitor); visitor = new EqualsAdapter(logger, type, visitor); reader.accept(visitor, 0); data = writer.toByteArray(); binary.saveBytes(data); }
From source file:br.ufpr.gres.core.MutationTest.java
License:Apache License
public Mutant getMutation(final MutationIdentifier id, byte[] classToMutate) { Collection<IMutationOperator> mutators = MUTATORS.stream().collect(Collectors.toList()); Collection<IMutationOperator> mutatorsFiltered = mutators.stream() .filter(p -> id.getMutator().equals(p.getName())).collect(Collectors.toList()); final ClassContext context = new ClassContext(); context.setTargetMutation(id);// w w w . j a v a 2 s . c om // Lembrar de usar isso aqui (ClassPathByteArraySource - pitest) // GregorMutater... carregar os bytes // final Optional<byte[]> bytes = this.byteSource.getBytes(id.getClassName() // .asJavaName()); //final PremutationClassInfo classInfo = performPreScan(classToMutate); final ClassReader reader = new ClassReader(classToMutate); final ClassWriter w = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); final MutatingClassVisitor mca = new MutatingClassVisitor(mutatorsFiltered, context, w); reader.accept(mca, ClassReader.EXPAND_FRAMES); final List<MutationDetails> details = context.getCollectedMutations(); return new Mutant(details.stream().filter(p -> p.getId().equals(id)).findFirst().get(), w.toByteArray()); }
From source file:br.ufpr.gres.core.MutationTest.java
License:Apache License
public Mutant getHigherOrderMutant(final ArrayList<MutationIdentifier> ids, byte[] classToMutate) { Collection<IMutationOperator> mutators = MUTATORS.stream().collect(Collectors.toList()); //Collection<IMutationOperator> mutatorsFiltered = mutators.stream().filter(p ->.getMutator().equals(p.getName())).collect(Collectors.toList()); final ClassContext context = new ClassContext(); context.setTargetMutation(ids);// w w w . jav a 2 s .co m // Lembrar de usar isso aqui (ClassPathByteArraySource - pitest) // GregorMutater... carregar os bytes // final Optional<byte[]> bytes = this.byteSource.getBytes(id.getClassName() // .asJavaName()); //final PremutationClassInfo classInfo = performPreScan(classToMutate); final ClassReader reader = new ClassReader(classToMutate); final ClassWriter w = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); final MutatingClassVisitor mca = new MutatingClassVisitor(mutators, context, w); reader.accept(mca, ClassReader.EXPAND_FRAMES); List<MutationDetails> details = new ArrayList<>(); for (MutationDetails detail : context.getCollectedMutations()) { if (ids.stream().anyMatch(p -> p.equals(detail.getId()))) { details.add(detail); } } return new Mutant(details, w.toByteArray()); }
From source file:br.ufpr.gres.core.Mutator.java
License:Apache License
public static Mutant getMutation(Collection<IMutationOperator> mutators, ArrayList<MutationIdentifier> ids, byte[] classToMutate) { final ClassContext context = new ClassContext(); context.setTargetMutation(ids);// www . ja v a 2 s. c om final ClassReader reader = new ClassReader(classToMutate); final ClassWriter w = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); final MutatingClassVisitor mca = new MutatingClassVisitor(mutators, context, w); reader.accept(mca, ClassReader.EXPAND_FRAMES); List<MutationDetails> details = new ArrayList<>(); for (MutationDetails detail : context.getCollectedMutations()) { if (ids.stream().anyMatch(p -> p.equals(detail.getId()))) { details.add(detail); } } return new Mutant(details, w.toByteArray()); }