@Override public Mutant getMutation(final MutationIdentifier id) { final ClassContext context = new ClassContext(); context.setTargetMutation(Optional.ofNullable(id)); final Optional<byte[]> bytes = this.byteSource.getBytes(id.getClassName() .asJavaName()); final ClassReader reader = new ClassReader(bytes.get()); final ClassWriter w = new ComputeClassWriter(this.byteSource, this.computeCache, FrameOptions.pickFlags(bytes.get())); final MutatingClassVisitor mca = new MutatingClassVisitor(w, context, filterMethods(), FCollection.filter(this.mutators, isMutatorFor(id))); reader.accept(mca, ClassReader.EXPAND_FRAMES); final List<MutationDetails> details = context.getMutationDetails(context .getTargetMutation().get()); return new Mutant(details.get(0), w.toByteArray()); }
private byte[] transformBytes(final ClassLoader loader, final String className, final byte[] classfileBuffer) { final ClassReader reader = new ClassReader(classfileBuffer); final ClassWriter writer = new ComputeClassWriter( new ClassloaderByteArraySource(loader), this.computeCache, FrameOptions.pickFlags(classfileBuffer)); final int id = CodeCoverageStore.registerClass(className); reader.accept(new CoverageClassVisitor(id, writer), ClassReader.EXPAND_FRAMES); return writer.toByteArray(); }
private static byte[] transformBytes(final ClassLoader loader, final String className, final byte[] classfileBuffer) { final ClassReader reader = new ClassReader(classfileBuffer); final ClassWriter writer = new ComputeClassWriter( new ClassloaderByteArraySource(loader), COMPUTE_CACHE, FrameOptions.pickFlags(classfileBuffer)); // The transformed classes will be given a different id than the one already loaded. // Not clear if this is desirable or not. At the point of writing this comment // pitest will merge coverage of all classes with the same fully qualified name. // If this changes this might become a bug, however it would also probably not be possible // to support powermock if this assumption changed, so this code would most likely be deleted. final int id = CodeCoverageStore.registerClass(className); reader.accept(new CoverageClassVisitor(id, writer), ClassReader.EXPAND_FRAMES); return writer.toByteArray(); }
@Override public Mutant getMutation(final MutationIdentifier id) { final ClassContext context = new ClassContext(); context.setTargetMutation(Optional.ofNullable(id)); final Optional<byte[]> bytes = this.byteSource.getBytes(id.getClassName() .asJavaName()); final ClassReader reader = new ClassReader(bytes.get()); final ClassWriter w = new ComputeClassWriter(this.byteSource, this.computeCache, FrameOptions.pickFlags(bytes.get())); final MutatingClassVisitor mca = new MutatingClassVisitor(w, context, filterMethods(), FCollection.filter(this.mutators, isMutatorFor(id))); reader.accept(mca, ClassReader.EXPAND_FRAMES); final List<MutationDetails> details = context.getMutationDetails(context .getTargetMutation().get()); return new Mutant(details.get(0), w.toByteArray()); }
private byte[] transformBytes(final ClassLoader loader, final String className, final byte[] classfileBuffer) { final ClassReader reader = new ClassReader(classfileBuffer); final ClassWriter writer = new ComputeClassWriter( new ClassloaderByteArraySource(loader), this.computeCache, FrameOptions.pickFlags(classfileBuffer)); final int id = CodeCoverageStore.registerClass(className); reader.accept(new CoverageClassVisitor(id, writer), ClassReader.EXPAND_FRAMES); return writer.toByteArray(); }
private static byte[] transformBytes(final ClassLoader loader, final String className, final byte[] classfileBuffer) { final ClassReader reader = new ClassReader(classfileBuffer); final ClassWriter writer = new ComputeClassWriter( new ClassloaderByteArraySource(loader), COMPUTE_CACHE, FrameOptions.pickFlags(classfileBuffer)); // The transformed classes will be given a different id than the one already loaded. // Not clear if this is desirable or not. At the point of writing this comment // pitest will merge coverage of all classes with the same fully qualified name. // If this changes this might become a bug, however it would also probably not be possible // to support powermock if this assumption changed, so this code would most likely be deleted. final int id = CodeCoverageStore.registerClass(className); reader.accept(new CoverageClassVisitor(id, writer), ClassReader.EXPAND_FRAMES); return writer.toByteArray(); }