Java 类org.objectweb.asm.util.CheckClassAdapter 实例源码
项目:luna
文件:ASMBytecodeEmitter.java
private byte[] classNodeToBytes(ClassNode classNode) {
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
classNode.accept(writer);
byte[] bytes = writer.toByteArray();
// verify bytecode
if (verifyAndPrint) {
ClassReader reader = new ClassReader(bytes);
ClassVisitor tracer = new TraceClassVisitor(new PrintWriter(System.out));
ClassVisitor checker = new CheckClassAdapter(tracer, true);
reader.accept(checker, 0);
}
return bytes;
}
项目:Shuriken
文件:Validate.java
/**
* Verify class bytecode
*
* @param classBytes Class data
* @return Class data, if it was valid
* @throws ClassFormatError If class wasn't valid
*/
@Contract("null -> fail")
public static byte[] checkGeneratedClass(byte[] classBytes) throws ClassFormatError {
Ensure.notNull(classBytes, "Class data shouldn't be null!");
ClassReader cr = new ClassReader(classBytes);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
try {
CheckClassAdapter.verify(cr, false, pw);
}
catch (Exception ignored) {}
if(sw.toString().length() > 0) {
throw new ClassFormatError(sw.toString());
}
return classBytes;
}
项目:QDrill
文件:DrillCheckClassAdapter.java
/**
* See {@link org.objectweb.asm.util.CheckClassAdapter#CheckClassAdapter(ClassVisitor, boolean)}.
* @param api the api version
*/
protected DrillCheckClassAdapter(final int api, final ClassVisitor cv,
final boolean checkDataFlow) {
super(api);
/*
* We set up a chain of class visitors:
* this -> InnerAccessStripper -> CheckClassAdapter -> AccessRestorer -> cv
* Note the AccessRestorer references accessStripper to get the original
* access bits; the inner class could not be constructed before the call to
* super(), hence the need to set the delegate after that.
*/
accessStripper = new InnerClassAccessStripper(api, new CheckClassAdapter(
new AccessRestorer(api, cv), checkDataFlow));
setDelegate(accessStripper);
}
项目:Parabot-317-API-Minified-OS-Scape
文件:JarArchive.java
@Override
public void write(File file) throws IOException {
JarOutputStream jos = new JarOutputStream(new FileOutputStream(file));
try {
for (Iterator<ClassNode> itr = iterator(); itr.hasNext(); ) {
ClassNode node = itr.next();
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
node.accept(new CheckClassAdapter(writer, true));
byte[] bytes = writer.toByteArray();
jos.putNextEntry(new JarEntry(node.name.concat(".class")));
jos.write(bytes);
}
} finally {
jos.close();
}
}
项目:anvil
文件:Publicizer.java
private static void publicize(Path inPath, Path outPath) throws IOException {
try (JarInputStream in = new JarInputStream(Files.newInputStream(inPath))) {
try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(outPath))) {
JarEntry entry;
while ((entry = in.getNextJarEntry()) != null) {
if (entry.isDirectory()) {
continue;
}
String name = entry.getName();
out.putNextEntry(new JarEntry(name));
if (name.endsWith(".class")) {
ClassWriter writer = new ClassWriter(0);
ClassReader reader = new ClassReader(in);
reader.accept(new CheckClassAdapter(new ClassDefinalizer(new ClassPublicizer(writer)), true), 0);
out.write(writer.toByteArray());
} else {
ByteStreams.copy(in, out);
}
}
}
}
}
项目:rembulan
文件:ASMBytecodeEmitter.java
private byte[] classNodeToBytes(ClassNode classNode) {
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
classNode.accept(writer);
byte[] bytes = writer.toByteArray();
// verify bytecode
if (verifyAndPrint) {
ClassReader reader = new ClassReader(bytes);
ClassVisitor tracer = new TraceClassVisitor(new PrintWriter(System.out));
ClassVisitor checker = new CheckClassAdapter(tracer, true);
reader.accept(checker, 0);
}
return bytes;
}
项目:CCTweaks-Lua
文件:AsmUtils.java
/**
* Validate a generated class
*
* @param reader The class to read
* @param loader The appropriate class loader
* @throws RuntimeException On bad validation
*/
public static void validateClass(ClassReader reader, ClassLoader loader) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
Exception error = null;
try {
CheckClassAdapter.verify(reader, loader, false, printWriter);
} catch (Exception e) {
error = e;
}
String contents = writer.toString();
if (error != null || contents.length() > 0) {
throw new IllegalStateException(writer.toString(), error);
}
}
项目:NonDex
文件:Instrumenter.java
private void instrumentClass(String className,
Function<ClassVisitor, ClassVisitor> createShuffler,
ZipFile rt, ZipOutputStream outZip) throws IOException {
InputStream classStream = null;
try {
classStream = rt.getInputStream(rt.getEntry(className));
} catch (IOException exc) {
Logger.getGlobal().log(Level.WARNING, "Cannot find " + className + " are you sure this is a valid rt.jar?");
Logger.getGlobal().log(Level.WARNING, "Continuing without instrumenting: " + className);
}
ClassReader cr = new ClassReader(classStream);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
ClassVisitor cv = createShuffler.apply(cw);
cr.accept(cv, 0);
byte[] arr = cw.toByteArray();
cr = new ClassReader(arr);
cr.accept(new CheckClassAdapter(new ClassWriter(0)), 0);
ZipEntry zipEntry = new ZipEntry(className);
outZip.putNextEntry(zipEntry);
outZip.write(arr, 0, arr.length);
outZip.closeEntry();
}
项目:drill
文件:DrillCheckClassAdapter.java
/**
* See {@link org.objectweb.asm.util.CheckClassAdapter#CheckClassAdapter(ClassVisitor, boolean)}.
* @param api the api version
*/
protected DrillCheckClassAdapter(final int api, final ClassVisitor cv,
final boolean checkDataFlow) {
super(api);
/*
* We set up a chain of class visitors:
* this -> InnerAccessStripper -> CheckClassAdapter -> AccessRestorer -> cv
* Note the AccessRestorer references accessStripper to get the original
* access bits; the inner class could not be constructed before the call to
* super(), hence the need to set the delegate after that.
*/
accessStripper = new InnerClassAccessStripper(api, new CheckClassAdapter(
new AccessRestorer(api, cv), checkDataFlow));
setDelegate(accessStripper);
}
项目:vmboiler
文件:Example.java
public static MethodHandle createFunction(Supplier<byte[]> generator, MethodType methodType) {
byte[] array = generator.get();
ClassReader reader = new ClassReader(array);
CheckClassAdapter.verify(reader, true, new PrintWriter(System.out));
Class<?> type = new ClassLoader() {
Class<?> createClass() {
return defineClass("Foo", array, 0, array.length);
}
}.createClass();
try {
return MethodHandles.publicLookup().findStatic(type, "foo", methodType);
} catch (NoSuchMethodException | IllegalAccessException e) {
throw new AssertionError(e);
}
}
项目:Patcher
文件:RewriteClassLoader.java
public void validateClass(ClassReader reader) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
Exception error = null;
try {
CheckClassAdapter.verify(reader, this, false, printWriter);
} catch (Exception e) {
error = e;
}
String contents = writer.toString();
if (error != null || contents.length() > 0) {
reader.accept(new TraceClassVisitor(printWriter), 0);
throw new RuntimeException("Generation error\nDump for " + reader.getClassName() + "\n" + writer.toString(), error);
}
}
项目:evosuite
文件:TestRuntimeValuesDeterminer.java
@Override
public Class<?> loadClass(String fullyQualifiedTargetClass) throws ClassNotFoundException {
if (!testClass.equals(fullyQualifiedTargetClass)) {
return super.loadClass(fullyQualifiedTargetClass);
}
String className = fullyQualifiedTargetClass.replace('.', '/');
InputStream is = java.lang.ClassLoader.getSystemResourceAsStream(className + ".class");
if (is == null) {
throw new ClassNotFoundException("Class " + fullyQualifiedTargetClass + "could not be found!");
}
ClassReader reader = null;
try {
reader = new ClassReader(is);
} catch (IOException exc) {
throw new ClassNotFoundException();
}
ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS);
ClassVisitor cv = new TestValuesDeterminerClassVisitor(fullyQualifiedTargetClass, writer);
CheckClassAdapter checkClassAdapter = new CheckClassAdapter(cv);
reader.accept(checkClassAdapter, ClassReader.SKIP_FRAMES);
byte[] byteBuffer = writer.toByteArray();
Class<?> result = defineClass(fullyQualifiedTargetClass, byteBuffer, 0, byteBuffer.length);
return result;
}
项目:luaj.luajc
文件:AsmUtils.java
/**
* Validate a generated class
*
* @param reader The class to read
* @param loader The appropriate class loader
* @throws RuntimeException On bad validation
*/
public static void validateClass(ClassReader reader, ClassLoader loader) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
Exception error = null;
try {
CheckClassAdapter.verify(reader, loader, false, printWriter);
} catch (Exception e) {
error = e;
}
String contents = writer.toString();
if (error != null || contents.length() > 0) {
throw new ValidationException(reader, writer.toString(), error);
}
}
项目:vmboiler
文件:Example.java
public static MethodHandle createFunction(Supplier<byte[]> generator, MethodType methodType) {
byte[] array = generator.get();
ClassReader reader = new ClassReader(array);
CheckClassAdapter.verify(reader, true, new PrintWriter(System.out));
Class<?> type = new ClassLoader() {
Class<?> createClass() {
return defineClass("Foo", array, 0, array.length);
}
}.createClass();
try {
return MethodHandles.publicLookup().findStatic(type, "foo", methodType);
} catch (NoSuchMethodException | IllegalAccessException e) {
throw new AssertionError(e);
}
}
项目:TurtleFix
文件:Transformer.java
@Override
public byte[] transform(String s, String s2, byte[] bytes) {
if (bytes == null) {
return bytes;
}
try {
ClassReader cr = new ClassReader(bytes);
ClassNode classNode = new ClassNode();
cr.accept(classNode, ClassReader.EXPAND_FRAMES);
if (transform(s, s2, classNode)) {
ClassWriter cw = new ClassWriter(cr, COMPUTE_MAXS);
classNode.accept(new CheckClassAdapter(cw));
bytes = cw.toByteArray();
}
} catch (Throwable t) {
t.printStackTrace();
}
return bytes;
}
项目:closure-templates
文件:SoyClassWriter.java
private SoyClassWriter(Writer writer, Builder builder) {
super(writer.api(), Flags.DEBUG ? new CheckClassAdapter(writer, false) : writer);
this.writer = writer;
this.typeInfo = builder.type;
super.visit(
Opcodes.V1_7,
builder.access,
builder.type.internalName(),
null /* not generic */,
builder.baseClass.internalName(),
builder.interfaces.toArray(new String[builder.interfaces.size()]));
if (builder.fileName != null) {
super.visitSource(
builder.fileName,
// No JSR-45 style source maps, instead we write the line numbers in the normal locations.
null);
}
}
项目:invokedynamic-talk-code
文件:BeanJsonifierIndyDump.java
public static byte[] dump() throws Exception {
ClassWriter cw = new ClassWriter(0);
ClassVisitor cv = new CheckClassAdapter(cw);
cv.visit(52, ACC_PUBLIC + ACC_SUPER, "json/BeanJsonifier2",
"Ljava/lang/Object;Ljson/Jsonifier<Ljson/Bean;>;", "java/lang/Object",
new String[] { "json/Jsonifier" });
cv.visitSource("BeanJsonifier2.java", null);
generateConstructor(cv);
generateMarshal(cv);
generateBridge(cv);
cv.visitEnd();
return cw.toByteArray();
}
项目:invokedynamic-talk-code
文件:IndyJsonifierBytecodeGenerator.java
public byte[] generateBytecode() {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
ClassVisitor cv = new CheckClassAdapter(cw, true);
cv.visit(
52,
ACC_PUBLIC,
jsonifierClassPath,
"Ljava/lang/Object;Ljson/Jsonifier<L" + jsonPath+ ";>;",
BASE_CLASS_INTERNAL_NAME,
new String[] { "json/Jsonifier" });
cv.visitSource(getClass().getName().replace('.', '/') + ".java", null);
generateConstructor(cv);
generateMarshal(cv);
generateMarshalBridge(cv);
cv.visitEnd();
return cw.toByteArray();
}
项目:pinpoint
文件:ASMBytecodeDisassembler.java
public String dumpVerify(byte[] bytecode, ClassLoader classLoader) {
if (bytecode == null) {
throw new NullPointerException("bytecode must not be null");
}
if (classLoader == null) {
throw new NullPointerException("classLoader must not be null");
}
final StringWriter out = new StringWriter();
final PrintWriter writer = new PrintWriter(out);
final ClassReader cr = new ClassReader(bytecode);
CheckClassAdapter.verify(cr, classLoader, true, writer);
return out.toString();
}
项目:GAlette
文件:GAletteInstrumentation.java
/**
* Weave tracking method call if the annotations present.
*/
private static void weaveIfNecessary(ClassReader classReader, File dest) throws IOException {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
ModifierClassWriter mcw = new ModifierClassWriter(Opcodes.ASM5, cw);
classReader.accept(new CheckClassAdapter(mcw), ClassReader.EXPAND_FRAMES);
if (!mcw.isProceed()) {
return;
}
OutputStream out = null;
try {
out = new FileOutputStream(dest);
out.write(cw.toByteArray());
out.flush();
} finally {
closeQuietly(out);
}
}
项目:javaslicer
文件:Transformer.java
@SuppressWarnings("unused")
private static void printClass(final byte[] classfileBuffer, final String classname) {
/*
final TraceClassVisitor v = new TraceClassVisitor(new PrintWriter(System.out));
new ClassReader(classfileBuffer).accept(v, ClassReader.SKIP_DEBUG);
*/
final ClassNode cn = new ClassNode();
final ClassReader cr = new ClassReader(classfileBuffer);
//cr.accept(new CheckClassAdapter(cn), ClassReader.SKIP_DEBUG);
cr.accept(new CheckClassAdapter(cn), 0);
for (final Object methodObj : cn.methods) {
final MethodNode method = (MethodNode) methodObj;
final Analyzer a = new Analyzer(new BasicVerifier());
//final Analyzer a = new Analyzer(new SimpleVerifier());
try {
a.analyze(cn.name, method);
} catch (final AnalyzerException e) {
System.err.println("// error in method " + classname + "." + method.name
+ method.desc + ":" + e);
}
printMethod(a, System.err, method);
}
}
项目:HeapDL
文件:Transformer.java
private void checkBytecode(ClassLoader loader, String className,
byte[] bc, int wFlags) {
ClassReader debugReader = new ClassReader(bc);
ClassWriter debugWriter = new ContextClassWriter(loader, wFlags);
try {
ClassNode debugNode = new ClassNode(Opcodes.ASM5);
debugReader.accept(debugNode, ClassReader.EXPAND_FRAMES);
debugNode.accept(new CheckClassAdapter(debugWriter));
// debugReader.accept(new CheckClassAdapter(debugWriter), 0);
} catch (RuntimeException ex) {
System.err.println("Bytecode check failed for " + className + ":");
ex.printStackTrace();
System.exit(-1);
}
}
项目:QDrill
文件:DrillCheckClassAdapter.java
/**
* See {@link org.objectweb.asm.util.CheckClassAdapter#verify(ClassReader, boolean, PrintWriter)}.
*/
public static void verify(final ClassReader cr, final boolean dump,
final PrintWriter pw) {
/*
* For plain verification, we don't need to restore the original access
* bytes the way we do when the check adapter is used as part of a chain, so
* we can just strip it and use the ASM version directly.
*/
final ClassWriter classWriter = new ClassWriter(0);
cr.accept(new InnerClassAccessStripper(CompilationConfig.ASM_API_VERSION,
classWriter), ClassReader.SKIP_DEBUG);
final ClassReader strippedCr = new ClassReader(classWriter.toByteArray());
CheckClassAdapter.verify(strippedCr, dump, pw);
}
项目:continuations
文件:InstrumentationTask.java
private void instrumentClass(MethodDatabase db, File f) {
db.log(LogLevel.INFO, "Instrumenting class %s", f);
try {
ClassReader r;
FileInputStream fis = new FileInputStream(f);
try {
r = new ClassReader(fis);
} finally {
fis.close();
}
ClassWriter cw = new DBClassWriter(db, r);
ClassVisitor cv = check ? new CheckClassAdapter(cw) : cw;
InstrumentClass ic = new InstrumentClass(cv, db, false);
r.accept(ic, ClassReader.SKIP_FRAMES);
byte[] newClass = cw.toByteArray();
if(writeClasses) {
FileOutputStream fos = new FileOutputStream(f);
try {
fos.write(newClass);
} finally {
fos.close();
}
}
} catch (IOException ex) {
throw new BuildException("Instrumenting file " + f, ex);
}
}
项目:continuations
文件:JavaAgent.java
static byte[] instrumentClass(MethodDatabase db, byte[] data, boolean check) {
ClassReader r = new ClassReader(data);
ClassWriter cw = new DBClassWriter(db, r);
ClassVisitor cv = check ? new CheckClassAdapter(cw) : cw;
InstrumentClass ic = new InstrumentClass(cv, db, false);
r.accept(ic, ClassReader.SKIP_FRAMES);
return cw.toByteArray();
}
项目:tiny-remapper
文件:TinyRemapper.java
private byte[] apply(final RClass cls) {
ClassReader reader = new ClassReader(cls.data);
ClassWriter writer = new ClassWriter(0);
int flags = removeFrames ? ClassReader.SKIP_FRAMES : ClassReader.EXPAND_FRAMES;
reader.accept(new ClassRemapper(check ? new CheckClassAdapter(writer) : writer, remapper), flags);
// TODO: compute frames (-Xverify:all -XX:-FailOverToOldVerifier)
return writer.toByteArray();
}
项目:yql-plus
文件:GeneratedClassLoader.java
public void analyze(OutputStream out) {
for (Map.Entry<String, byte[]> e : classBytes.entrySet()) {
ClassReader reader = new ClassReader(e.getValue());
ClassVisitor visitor = new CheckClassAdapter(new TraceClassVisitor(new PrintWriter(out, true)));
reader.accept(visitor, 0);
}
}
项目:runelite
文件:JarUtil.java
private static void validateDataFlow(String name, byte[] data)
{
try
{
ClassReader cr = new ClassReader(data);
ClassWriter cw = new ClassWriter(cr, 0);
ClassVisitor cv = new CheckClassAdapter(cw, true);
cr.accept(cv, 0);
}
catch (Exception ex)
{
logger.warn("Class {} failed validation", name, ex);
}
}
项目:drill
文件:DrillCheckClassAdapter.java
/**
* See {@link org.objectweb.asm.util.CheckClassAdapter#verify(ClassReader, boolean, PrintWriter)}.
*/
public static void verify(final ClassReader cr, final boolean dump,
final PrintWriter pw) {
/*
* For plain verification, we don't need to restore the original access
* bytes the way we do when the check adapter is used as part of a chain, so
* we can just strip it and use the ASM version directly.
*/
final ClassWriter classWriter = new ClassWriter(0);
cr.accept(new InnerClassAccessStripper(CompilationConfig.ASM_API_VERSION,
classWriter), ClassReader.SKIP_DEBUG);
final ClassReader strippedCr = new ClassReader(classWriter.toByteArray());
CheckClassAdapter.verify(strippedCr, dump, pw);
}
项目:constexpr-java
文件:TestUtil.java
public static void verifyClass(byte[] bytes) {
StringWriter sw = new StringWriter();
PrintWriter printer = new PrintWriter(sw);
CheckClassAdapter.verify(new ClassReader(bytes), false, printer);
String result = sw.toString();
if (result.length() > 0) {
throw new RuntimeException(result);
}
}
项目:salta
文件:RecipeCompiler.java
public Class<?> loadClass(ClassCompilationContext ctx) {
// generate bytecode
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
ctx.getClazz().accept(cw);
// load class
Class<?> cls;
byte[] bb = cw.toByteArray();
String className = Type.getObjectType(ctx.getClazz().name).getClassName();
// try {
// Files.write(bb, new File("target/compiledRecipes/" + ctx.clazz.name
// + ".class"));
// } catch (IOException e2) {
// throw new SaltaException("Error while writing generated class", e2);
// }
try {
cls = getLoader().defineClass(className, bb);
ctx.initFields(cls);
} catch (Throwable e) {
System.out.println("Error while loading compiled recipe class");
ClassReader cr = new ClassReader(bb);
cr.accept(new TraceClassVisitor(null, new ASMifier(), new PrintWriter(System.out)), 0);
CheckClassAdapter.verify(cr, false, new PrintWriter(System.err));
throw new SaltaException("Error while loading compiled recipe", e);
}
// return result
return cls;
}
项目:transportlanguage
文件:BytecodeCompiler.java
/**
* Compiles the program while checking the ASM visitor calls made by the compiler.
* This method is for debug purposes only and should not be used in production.
*/
public void compileDebug() {
// Set debug visitor
this.visitor = new CheckClassAdapter(this.writer, false);
// Call compile as normal
this.compile();
}
项目:lin-check
文件:TestThreadExecutionGenerator.java
private static byte[] generateClass(String internalClassName, Type testClassType, List<Actor> actors,
List<Object> objArgs, boolean waitsEnabled)
{
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
CheckClassAdapter cca = new CheckClassAdapter(cw, false);
cca.visit(52, ACC_PUBLIC + ACC_SUPER, internalClassName, null, TEST_THREAD_EXECUTION_TYPE.getInternalName(), null);
generateConstructor(cca);
generateRun(cca, testClassType, actors, objArgs, waitsEnabled);
cca.visitEnd();
return cw.toByteArray();
}
项目:Jiffy
文件:Transformer.java
private boolean verifyClassBytes(final byte[] bytes) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw);
CheckClassAdapter.verify(new ClassReader(bytes), false, pw);
final String result = sw.toString();
if (result.length() > 0)
logger.error(result);
return result.length() == 0;
}
项目:GemFireLite
文件:GemliteHelper.java
public final static void checkAsmBytes(byte[] bytes, PrintWriter pw)
{
try
{
ClassReader cr = new ClassReader(bytes);
CheckClassAdapter.verify(cr, true, pw);
}
catch (Exception e)
{
e.printStackTrace();
}
}
项目:GemFireLite
文件:Test1.java
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);
}
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);
}
项目:QuickTheories
文件:CoverageTransformerTest.java
private byte[] assertValidClass(final Class<?> clazz)
throws IllegalClassFormatException {
final byte[] bs = transform(clazz);
// printClass(bs);
final StringWriter sw = new StringWriter();
CheckClassAdapter.verify(new ClassReader(bs), false, new PrintWriter(sw));
assertTrue(sw.toString(), sw.toString().length() == 0);
return bs;
}
项目:form-follows-function
文件:Verifier.java
private static boolean verifyClass(String name, InputStream is, PrintWriter err, boolean verbose) throws IOException {
ClassReader cr = new ClassReader(is);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
ClassVisitor cv = new CheckClassAdapter(cw);
cr.accept(cv, 0);
return verify(name, new ClassReader(cw.toByteArray()), err, verbose);
}
项目:evosuite
文件:TracingTestRunner.java
/** {@inheritDoc} */
@Override
public Class<?> loadClass(String fullyQualifiedTargetClass) throws ClassNotFoundException {
if (isSystemClass(fullyQualifiedTargetClass)) {
logger.info("Not instrumenting class '{}'.", fullyQualifiedTargetClass);
return super.loadClass(fullyQualifiedTargetClass);
}
logger.info("Instrumenting class '{}'.", fullyQualifiedTargetClass);
String className = fullyQualifiedTargetClass.replace('.', '/');
InputStream is = java.lang.ClassLoader.getSystemResourceAsStream(className + ".class");
if (is == null) {
throw new ClassNotFoundException("Class " + fullyQualifiedTargetClass + "could not be found!");
}
ClassReader reader = null;
try {
reader = new ClassReader(is);
} catch (IOException exc) {
throw new ClassNotFoundException();
}
ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS);
ClassVisitor cv = new StatementTracingVisitor(fullyQualifiedTargetClass, writer);
CheckClassAdapter checkClassAdapter = new CheckClassAdapter(cv);
reader.accept(checkClassAdapter, ClassReader.SKIP_FRAMES);
byte[] byteBuffer = writer.toByteArray();
Class<?> result = defineClass(fullyQualifiedTargetClass, byteBuffer, 0, byteBuffer.length);
return result;
}
项目:FullRobolectricTestSample
文件:AsmInstrumentingClassLoader.java
private byte[] getInstrumentedBytes(String className, ClassNode classNode, boolean containsStubs) throws ClassNotFoundException {
new ClassInstrumentor(classNode, containsStubs).instrument();
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS) {
@Override
public int newNameType(String name, String desc) {
return super.newNameType(name, desc.charAt(0) == ')' ? remapParams(desc) : remapParamType(desc));
}
@Override
public int newClass(String value) {
value = remapType(value);
return super.newClass(value);
}
};
classNode.accept(classWriter);
byte[] classBytes = classWriter.toByteArray();
if (debug) {
try {
FileOutputStream fileOutputStream = new FileOutputStream("tmp/" + className + ".class");
fileOutputStream.write(classBytes);
fileOutputStream.close();
CheckClassAdapter.verify(new ClassReader(classBytes), true, new PrintWriter(new FileWriter("tmp/" + className + ".analysis", false)));
new ClassReader(classBytes).accept(new TraceClassVisitor(new PrintWriter(new FileWriter("tmp/" + className + ".dis", false))), 0);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return classBytes;
}