public Annotation[] getAllFieldAnnotations(Field field, Locatable srcPos) { Annotation[] r = field.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }
/** * Wraps the annotation into a proxy so that the returned object will also implement * {@link Locatable}. */ public static <A extends Annotation> A create( A annotation, Locatable parentSourcePos ) { if(annotation==null) return null; Class<? extends Annotation> type = annotation.annotationType(); if(quicks.containsKey(type)) { // use the existing proxy implementation if available return (A)quicks.get(type).newInstance(parentSourcePos,annotation); } // otherwise take the slow route ClassLoader cl = SecureLoader.getClassClassLoader(LocatableAnnotation.class); try { Class loadableT = Class.forName(type.getName(), false, cl); if(loadableT !=type) return annotation; // annotation type not loadable from this class loader return (A)Proxy.newProxyInstance(cl, new Class[]{ type, Locatable.class }, new LocatableAnnotation(annotation,parentSourcePos)); } catch (ClassNotFoundException e) { // annotation not loadable return annotation; } catch (IllegalArgumentException e) { // Proxy.newProxyInstance throws this if it cannot resolve this annotation // in this classloader return annotation; } }
public Annotation[] getAllMethodAnnotations(Method method, Locatable srcPos) { Annotation[] r = method.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }
/** * Wraps the annotation into a proxy so that the returned object will also implement * {@link Locatable}. */ public static <A extends Annotation> A create( A annotation, Locatable parentSourcePos ) { if(annotation==null) return null; Class<? extends Annotation> type = annotation.annotationType(); if(quicks.containsKey(type)) { // use the existing proxy implementation if available return (A)quicks.get(type).newInstance(parentSourcePos,annotation); } // otherwise take the slow route ClassLoader cl = SecureLoader.getClassClassLoader(LocatableAnnotation.class); try { Class loadableT = Class.forName(type.getName(), false, cl); if(loadableT !=type) return annotation; // annotation type not loadable from this class loader return (A)Proxy.newProxyInstance(cl, new Class[]{ type, Locatable.class }, new LocatableAnnotation(annotation,parentSourcePos)); } catch (ClassNotFoundException e) { // annotation not loadable return annotation; } catch (IllegalArgumentException e) { // Proxy.newProxyInstance throws this if it cannot resolve this annotation // in this classloader return annotation; } }
public <A extends Annotation> A getClassAnnotation(Class<A> a, Class clazz, Locatable srcPos) { return LocatableAnnotation.create(((Class<?>)clazz).getAnnotation(a),srcPos); }
/** * Wraps the annotation into a proxy so that the returned object will also implement * {@link Locatable}. */ public static <A extends Annotation> A create( A annotation, Locatable parentSourcePos ) { if(annotation==null) return null; Class<? extends Annotation> type = annotation.annotationType(); if(quicks.containsKey(type)) { // use the existing proxy implementation if available return (A)quicks.get(type).newInstance(parentSourcePos,annotation); } // otherwise take the slow route ClassLoader cl = SecureLoader.getClassClassLoader(LocatableAnnotation.class); try { Class loadableT = Class.forName(type.getName(), false, cl); if(loadableT !=type) return annotation; // annotation type not loadable from this class loader return (A)Proxy.newProxyInstance(cl, new Class[]{ type, Locatable.class }, new LocatableAnnotation(annotation,parentSourcePos)); } catch (ClassNotFoundException e) { // annotation not loadable return annotation; } catch (IllegalArgumentException e) { // Proxy.newProxyInstance throws this if it cannot resolve this annotation // in this classloader return annotation; } }
public <A extends Annotation> A getFieldAnnotation(Class<A> annotation, Field field, Locatable srcPos) { return LocatableAnnotation.create(field.getAnnotation(annotation),srcPos); }
/** * Wraps the annotation into a proxy so that the returned object will also implement * {@link Locatable}. */ public static <A extends Annotation> A create( A annotation, Locatable parentSourcePos ) { if(annotation==null) return null; Class<? extends Annotation> type = annotation.annotationType(); if(quicks.containsKey(type)) { // use the existing proxy implementation if available return (A)quicks.get(type).newInstance(parentSourcePos,annotation); } // otherwise take the slow route ClassLoader cl = SecureLoader.getClassClassLoader(LocatableAnnotation.class); try { Class loadableT = Class.forName(type.getName(), false, cl); if(loadableT !=type) return annotation; // annotation type not loadable from this class loader return (A)Proxy.newProxyInstance(cl, new Class[]{ type, Locatable.class }, new LocatableAnnotation(annotation,parentSourcePos)); } catch (ClassNotFoundException e) { // annotation not loadable return annotation; } catch (IllegalArgumentException e) { // Proxy.newProxyInstance throws this if it cannot resolve this annotation // in this classloader return annotation; } }
public <A extends Annotation> A getMethodAnnotation(Class<A> annotation, Method method, Locatable srcPos) { return LocatableAnnotation.create(method.getAnnotation(annotation),srcPos); }
public <A extends Annotation> A getMethodParameterAnnotation(Class<A> annotation, Method method, int paramIndex, Locatable srcPos) { Annotation[] pa = method.getParameterAnnotations()[paramIndex]; for( Annotation a : pa ) { if(a.annotationType()==annotation) return LocatableAnnotation.create((A)a,srcPos); } return null; }
public <A extends Annotation> A getPackageAnnotation(Class<A> a, Class clazz, Locatable srcPos) { Package p = clazz.getPackage(); if(p==null) return null; Map<Package,Annotation> cache = packageCache.get(a); if(cache==null) { cache = new HashMap<Package,Annotation>(); packageCache.put(a,cache); } if(cache.containsKey(p)) return (A)cache.get(p); else { A ann = LocatableAnnotation.create(p.getAnnotation(a),srcPos); cache.put(p,ann); return ann; } }
public Annotation[] getAllMethodAnnotations(Method method, Locatable srcPos) { Annotation[] r = method.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }
public Annotation[] getAllFieldAnnotations(Field field, Locatable srcPos) { Annotation[] r = field.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }
public <A extends Annotation> A getClassAnnotation(Class<A> a, Class clazz, Locatable srcPos) { return LocatableAnnotation.create(((Class<?>)clazz).getAnnotation(a),srcPos); }
public <A extends Annotation> A getFieldAnnotation(Class<A> annotation, Field field, Locatable srcPos) { return LocatableAnnotation.create(field.getAnnotation(annotation),srcPos); }
public <A extends Annotation> A getMethodAnnotation(Class<A> annotation, Method method, Locatable srcPos) { return LocatableAnnotation.create(method.getAnnotation(annotation),srcPos); }
public <A extends Annotation> A getMethodParameterAnnotation(Class<A> annotation, Method method, int paramIndex, Locatable srcPos) { Annotation[] pa = method.getParameterAnnotations()[paramIndex]; for( Annotation a : pa ) { if(a.annotationType()==annotation) return LocatableAnnotation.create((A)a,srcPos); } return null; }
public <A extends Annotation> A getPackageAnnotation(Class<A> a, Class clazz, Locatable srcPos) { Package p = clazz.getPackage(); if(p==null) return null; Map<Package,Annotation> cache = packageCache.get(a); if(cache==null) { cache = new HashMap<Package,Annotation>(); packageCache.put(a,cache); } if(cache.containsKey(p)) return (A)cache.get(p); else { A ann = LocatableAnnotation.create(p.getAnnotation(a),srcPos); cache.put(p,ann); return ann; } }
public Annotation[] getAllFieldAnnotations(Field field, Locatable srcPos) { Annotation[] r = field.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }
public Annotation[] getAllMethodAnnotations(Method method, Locatable srcPos) { Annotation[] r = method.getAnnotations(); for( int i=0; i<r.length; i++ ) { r[i] = LocatableAnnotation.create(r[i],srcPos); } return r; }