/** * Finds annotation in class info. Returns <code>null</code> if annotation doesn't exist. */ default AnnotationInfo getAnnotation(final Class<? extends Annotation> an) { AnnotationInfo[] anns = getAnnotations(); if (anns == null) { return null; } String anName = an.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return ann; } } return null; }
/** * Visits replacement code for {@link ProxyTarget#targetClass()}. */ public static void targetClass(final MethodVisitor mv, final MethodInfo methodInfo) { ClassInfo classInfo = methodInfo.getClassInfo(); mv.visitLdcInsn(Type.getType('L' + classInfo.getReference() + ';')); }
firstTime.value = false; ClassInfo ci = mi.getClassInfo(); assertEquals("BigFatJoe", ci.getClassname()); assertEquals(BigFatJoe.class.getPackage().getName(), ci.getPackage()); assertEquals("jodd/proxetta/fixtures/data/BigFatJoe", ci.getReference()); assertEquals("jodd/proxetta/fixtures/data/SmallSkinnyZoe", ci.getSuperName()); AnnotationInfo[] anns = ci.getAnnotations(); assertNotNull(anns); assertEquals(3, anns.length); AnnotationInfo ai = anns[0]; assertSame(ai, ci.getAnnotation(MadvocAction.class)); assertEquals(MadvocAction.class.getName(), ai.getAnnotationClassname()); assertEquals("L" + MadvocAction.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature()); assertEquals("madvocAction", ai.getElement("value")); ai = anns[1]; assertSame(ai, ci.getAnnotation(PetiteBean.class)); assertEquals(PetiteBean.class.getName(), ai.getAnnotationClassname()); assertEquals("L" + PetiteBean.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature()); ai = anns[2]; assertSame(ai, ci.getAnnotation(InterceptedBy.class)); assertEquals(InterceptedBy.class.getName(), ai.getAnnotationClassname()); assertEquals("L" + InterceptedBy.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature());
/** * Returns <code>true</code> if class is annotated with one of provided annotation. */ default boolean hasAnnotation(final Class<? extends Annotation>... an) { AnnotationInfo[] anns = getAnnotations(); if (anns == null) { return false; } for (Class<? extends Annotation> annotationClass : an) { String anName = annotationClass.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return true; } } } return false; }
/** * Visits replacement code for {@link ProxyTarget#targetClass()}. */ public static void targetClass(final MethodVisitor mv, final MethodInfo methodInfo) { ClassInfo classInfo = methodInfo.getClassInfo(); mv.visitLdcInsn(Type.getType('L' + classInfo.getReference() + ';')); }
/** * Visits replacement code for {@link ProxyTarget#targetClassAnnotation(String, String)}. */ public static void targetClassAnnotation(final MethodVisitor mv, final ClassInfo classInfo, final String[] args) { AnnotationInfo[] anns = classInfo.getAnnotations(); if (anns != null) { targetAnnotation(mv, anns, args); } else { mv.visitInsn(Opcodes.ACONST_NULL); } }
/** * Finds annotation in class info. Returns <code>null</code> if annotation doesn't exist. */ default AnnotationInfo getAnnotation(final Class<? extends Annotation> an) { AnnotationInfo[] anns = getAnnotations(); if (anns == null) { return null; } String anName = an.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return ann; } } return null; }
/** * Finds annotation in class info. Returns <code>null</code> if annotation doesn't exist. */ public AnnotationInfo getAnnotation(ClassInfo classInfo, Class<? extends Annotation> an) { AnnotationInfo[] anns = classInfo.getAnnotations(); if (anns == null) { return null; } String anName = an.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return ann; } } return null; }
/** * Returns <code>true</code> if class is annotated with one of provided annotation. */ public boolean hasAnnotation(ClassInfo classInfo, Class<? extends Annotation>... an) { AnnotationInfo[] anns = classInfo.getAnnotations(); if (anns == null) { return false; } for (Class<? extends Annotation> annotationClass : an) { String anName = annotationClass.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return true; } } } return false; }
/** * Returns <code>true</code> if class is annotated with one of provided annotation. */ default boolean hasAnnotation(final Class<? extends Annotation>... an) { AnnotationInfo[] anns = getAnnotations(); if (anns == null) { return false; } for (Class<? extends Annotation> annotationClass : an) { String anName = annotationClass.getName(); for (AnnotationInfo ann : anns) { if (ann.getAnnotationClassname().equals(anName)) { return true; } } } return false; }
/** * Visits replacement code for {@link ProxyTarget#targetClassAnnotation(String, String)}. */ public static void targetClassAnnotation(final MethodVisitor mv, final ClassInfo classInfo, final String[] args) { AnnotationInfo[] anns = classInfo.getAnnotations(); if (anns != null) { targetAnnotation(mv, anns, args); } else { mv.visitInsn(Opcodes.ACONST_NULL); } }