Skip to content

Commit 5aeaf4c

Browse files
committed
Do not copy @inherited annotations
These kind of annotations are already available on the subclass at runtime, so there is no need to copy them.
1 parent f588006 commit 5aeaf4c

3 files changed

Lines changed: 54 additions & 37 deletions

File tree

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/APTCodeModelHelper.java‎

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,41 @@
1515
*/
1616
package org.androidannotations.helper;
1717

18+
import static com.sun.codemodel.JExpr._new;
19+
import static com.sun.codemodel.JExpr.lit;
20+
import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX;
21+
22+
import java.io.StringWriter;
23+
import java.lang.annotation.Annotation;
24+
import java.lang.annotation.Inherited;
25+
import java.lang.reflect.Field;
26+
import java.util.ArrayList;
27+
import java.util.Collections;
28+
import java.util.HashMap;
29+
import java.util.LinkedHashMap;
30+
import java.util.List;
31+
import java.util.Map;
32+
33+
import javax.lang.model.element.AnnotationMirror;
34+
import javax.lang.model.element.AnnotationValue;
35+
import javax.lang.model.element.Element;
36+
import javax.lang.model.element.ExecutableElement;
37+
import javax.lang.model.element.TypeElement;
38+
import javax.lang.model.element.TypeParameterElement;
39+
import javax.lang.model.element.VariableElement;
40+
import javax.lang.model.type.ArrayType;
41+
import javax.lang.model.type.DeclaredType;
42+
import javax.lang.model.type.TypeKind;
43+
import javax.lang.model.type.TypeMirror;
44+
import javax.lang.model.type.WildcardType;
45+
import javax.lang.model.util.ElementFilter;
46+
import javax.lang.model.util.Types;
47+
48+
import org.androidannotations.annotations.EBean;
49+
import org.androidannotations.holder.EBeanHolder;
50+
import org.androidannotations.holder.EComponentHolder;
51+
import org.androidannotations.holder.GeneratedClassHolder;
52+
1853
import com.sun.codemodel.JAnnotatable;
1954
import com.sun.codemodel.JAnnotationUse;
2055
import com.sun.codemodel.JBlock;
@@ -32,38 +67,6 @@
3267
import com.sun.codemodel.JSuperWildcard;
3368
import com.sun.codemodel.JType;
3469
import com.sun.codemodel.JVar;
35-
import org.androidannotations.annotations.EBean;
36-
import org.androidannotations.holder.EBeanHolder;
37-
import org.androidannotations.holder.EComponentHolder;
38-
import org.androidannotations.holder.GeneratedClassHolder;
39-
40-
import javax.lang.model.element.AnnotationMirror;
41-
import javax.lang.model.element.AnnotationValue;
42-
import javax.lang.model.element.Element;
43-
import javax.lang.model.element.ExecutableElement;
44-
import javax.lang.model.element.TypeElement;
45-
import javax.lang.model.element.TypeParameterElement;
46-
import javax.lang.model.element.VariableElement;
47-
import javax.lang.model.type.ArrayType;
48-
import javax.lang.model.type.DeclaredType;
49-
import javax.lang.model.type.TypeKind;
50-
import javax.lang.model.type.TypeMirror;
51-
import javax.lang.model.type.WildcardType;
52-
import javax.lang.model.util.ElementFilter;
53-
import javax.lang.model.util.Types;
54-
import java.io.StringWriter;
55-
import java.lang.annotation.Annotation;
56-
import java.lang.reflect.Field;
57-
import java.util.ArrayList;
58-
import java.util.Collections;
59-
import java.util.HashMap;
60-
import java.util.LinkedHashMap;
61-
import java.util.List;
62-
import java.util.Map;
63-
64-
import static com.sun.codemodel.JExpr._new;
65-
import static com.sun.codemodel.JExpr.lit;
66-
import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX;
6770

6871
public class APTCodeModelHelper {
6972

@@ -249,9 +252,11 @@ private void addParamToMethod(JMethod method, VariableElement parameter, int mod
249252

250253
public void addNonAAAnotations(JAnnotatable annotatable, List<? extends AnnotationMirror> annotationMirrors, GeneratedClassHolder holder) {
251254
for (AnnotationMirror annotationMirror : annotationMirrors) {
252-
JClass annotationClass = typeMirrorToJClass(annotationMirror.getAnnotationType(), holder);
253-
if (!annotationClass.fullName().startsWith("org.androidannotations")) {
254-
addAnnotation(annotatable, annotationMirror, holder);
255+
if (annotationMirror.getAnnotationType().asElement().getAnnotation(Inherited.class) == null) {
256+
JClass annotationClass = typeMirrorToJClass(annotationMirror.getAnnotationType(), holder);
257+
if (!annotationClass.fullName().startsWith("org.androidannotations")) {
258+
addAnnotation(annotatable, annotationMirror, holder);
259+
}
255260
}
256261
}
257262
}
@@ -402,7 +407,7 @@ public JDefinedClass createDelegatingAnonymousRunnableClass(EComponentHolder hol
402407
/**
403408
* Gets all of the methods of the class and includes the methods of any
404409
* implemented interfaces.
405-
*
410+
*
406411
* @param typeElement
407412
* @return full list of methods.
408413
*/
@@ -508,7 +513,7 @@ public JExpression litObject(Object o) {
508513
}
509514
}
510515

511-
//TODO it would be nice to cache the result map for better performance
516+
// TODO it would be nice to cache the result map for better performance
512517
public TypeMirror getActualType(Element element, GeneratedClassHolder holder) {
513518
Types types = holder.processingEnvironment().getTypeUtils();
514519
DeclaredType typeMirror = (DeclaredType) element.getEnclosingElement().asType();

‎AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/copyannotations/CopyOtherAnnotationsTest.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,13 @@ public void testOverrideDoesNotAddedTwice() {
7575

7676
assertGeneratedClassDoesNotContain(toGeneratedFile(HasOtherAnnotations.class), methodSignature);
7777
}
78+
79+
@Test
80+
public void testInheritedAnnotationsNotCopied() {
81+
compileFiles(HasOtherAnnotations.class);
82+
83+
String[] annotation = { "@RunWith(Runner.class)" };
84+
85+
assertGeneratedClassDoesNotContain(toGeneratedFile(HasOtherAnnotations.class), annotation);
86+
}
7887
}

‎AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/copyannotations/HasOtherAnnotations.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@
2525
import org.androidannotations.annotations.Background;
2626
import org.androidannotations.annotations.EBean;
2727
import org.androidannotations.annotations.Trace;
28+
import org.junit.runner.RunWith;
29+
import org.junit.runner.Runner;
2830

2931
import dalvik.annotation.TestTargetClass;
3032

33+
@RunWith(Runner.class)
3134
@EBean
3235
@XmlType
3336
@TestTargetClass(String.class)

0 commit comments

Comments
 (0)