use of org.apache.xbean.asm5.ClassReader in project tomee by apache.
the class DynamicSubclass method copyClassAnnotations.
private static void copyClassAnnotations(final Class<?> clazz, final ClassVisitor newClass) throws ProxyGenerationException {
try {
final ClassReader classReader = new ClassReader(readClassFile(clazz));
final ClassVisitor visitor = new CopyClassAnnotations(newClass);
classReader.accept(visitor, ClassReader.SKIP_CODE);
} catch (final IOException e) {
throw new ProxyGenerationException(e);
}
}
use of org.apache.xbean.asm5.ClassReader in project tomee by apache.
the class DependenceValidationTest method file.
private static void file(final File file, final DependencyVisitor dependencyVisitor) {
try {
final InputStream in = IO.read(file);
try {
final ClassReader classReader = new ClassReader(in);
classReader.accept(dependencyVisitor, ClassWriter.COMPUTE_MAXS);
} finally {
IO.close(in);
}
} catch (final IOException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
use of org.apache.xbean.asm5.ClassReader in project jodd by oblac.
the class ProxyAspectData method getCachedAdviceClassReader.
/**
* Returns class reader for advice.
*/
private ClassReader getCachedAdviceClassReader(Class<? extends ProxyAdvice> advice) {
if (adviceClassReaderCache == null) {
adviceClassReaderCache = new HashMap<>();
}
ClassReader adviceReader = adviceClassReaderCache.get(advice);
if (adviceReader == null) {
adviceReader = createAdviceClassReader(advice);
adviceClassReaderCache.put(advice, adviceReader);
}
return adviceReader;
}
use of org.apache.xbean.asm5.ClassReader in project jodd by oblac.
the class Paramo method resolveParameters.
/**
* Resolves method parameters from a method or constructor.
* Returns an empty array when target does not contain any parameter.
* No caching is involved in this process, i.e. class bytecode
* is examined every time this method is called.
*/
public static MethodParameter[] resolveParameters(AccessibleObject methodOrCtor) {
Class[] paramTypes;
Class declaringClass;
String name;
if (methodOrCtor instanceof Method) {
Method method = (Method) methodOrCtor;
paramTypes = method.getParameterTypes();
name = method.getName();
declaringClass = method.getDeclaringClass();
} else {
Constructor constructor = (Constructor) methodOrCtor;
paramTypes = constructor.getParameterTypes();
declaringClass = constructor.getDeclaringClass();
name = CTOR_METHOD;
}
if (paramTypes.length == 0) {
return MethodParameter.EMPTY_ARRAY;
}
InputStream stream;
try {
stream = ClassLoaderUtil.getClassAsStream(declaringClass);
} catch (IOException ioex) {
throw new ParamoException("Failed to read class bytes: " + declaringClass.getName(), ioex);
}
if (stream == null) {
throw new ParamoException("Class not found: " + declaringClass);
}
try {
ClassReader reader = new ClassReader(stream);
MethodFinder visitor = new MethodFinder(declaringClass, name, paramTypes);
reader.accept(visitor, 0);
return visitor.getResolvedParameters();
} catch (IOException ioex) {
throw new ParamoException(ioex);
} finally {
StreamUtil.close(stream);
}
}
use of org.apache.xbean.asm5.ClassReader in project intellij-community by JetBrains.
the class AbstractClassGenerator method create.
protected Object create(Object key) {
try {
Class gen = null;
synchronized (source) {
ClassLoader loader = getClassLoader();
Map cache2 = null;
cache2 = (Map) source.cache.get(loader);
if (cache2 == null) {
cache2 = new HashMap();
cache2.put(NAME_KEY, new HashSet());
source.cache.put(loader, cache2);
} else if (useCache) {
Reference ref = (Reference) cache2.get(key);
gen = (Class) SoftReference.dereference(ref);
}
if (gen == null) {
Object save = CURRENT.get();
CURRENT.set(this);
try {
this.key = key;
if (attemptLoad) {
try {
gen = loader.loadClass(getClassName());
} catch (ClassNotFoundException e) {
// ignore
}
}
if (gen == null) {
byte[] b = strategy.generate(this);
String className = ClassNameReader.getClassName(new $ClassReader(b));
getClassNameCache(loader).add(className);
gen = ReflectUtils.defineClass(className, b, loader);
}
if (useCache) {
cache2.put(key, new WeakReference(gen));
}
return firstInstance(gen);
} finally {
CURRENT.set(save);
}
}
}
return firstInstance(gen);
} catch (RuntimeException e) {
throw e;
} catch (Error e) {
throw e;
} catch (Exception e) {
throw new CodeGenerationException(e);
}
}
Aggregations