diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java index 63fe1aceb8..d308aff977 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java @@ -481,17 +481,17 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices modelProcessor.register(new EServiceProcessor()); modelProcessor.register(new EReceiverProcessor()); modelProcessor.register(new EProviderProcessor()); - modelProcessor.register(new EFragmentProcessor(rClass)); - modelProcessor.register(new EViewGroupProcessor(rClass)); + modelProcessor.register(new EFragmentProcessor(processingEnv, rClass)); + modelProcessor.register(new EViewGroupProcessor(processingEnv, rClass)); modelProcessor.register(new EViewProcessor()); modelProcessor.register(new EBeanProcessor()); modelProcessor.register(new SharedPrefProcessor()); modelProcessor.register(new PrefProcessor(validatedModel)); modelProcessor.register(new RoboGuiceProcessor()); - modelProcessor.register(new ViewByIdProcessor(rClass)); + modelProcessor.register(new ViewByIdProcessor(processingEnv, rClass)); modelProcessor.register(new FragmentByIdProcessor(processingEnv, rClass)); modelProcessor.register(new FragmentByTagProcessor(processingEnv)); - modelProcessor.register(new FromHtmlProcessor(rClass)); + modelProcessor.register(new FromHtmlProcessor(processingEnv, rClass)); modelProcessor.register(new ClickProcessor(processingEnv, rClass)); modelProcessor.register(new LongClickProcessor(processingEnv, rClass)); modelProcessor.register(new TouchProcessor(processingEnv, rClass)); @@ -499,7 +499,7 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices modelProcessor.register(new ItemSelectedProcessor(processingEnv, rClass)); modelProcessor.register(new ItemLongClickProcessor(processingEnv, rClass)); for (AndroidRes androidRes : AndroidRes.values()) { - modelProcessor.register(new ResProcessor(androidRes, rClass)); + modelProcessor.register(new ResProcessor(processingEnv, androidRes, rClass)); } modelProcessor.register(new TransactionalProcessor()); modelProcessor.register(new ExtraProcessor(processingEnv)); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/AfterTextChange.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/AfterTextChange.java index da81a2b88b..0b03f3e937 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/AfterTextChange.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/AfterTextChange.java @@ -78,6 +78,8 @@ @Target(ElementType.METHOD) public @interface AfterTextChange { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/BeforeTextChange.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/BeforeTextChange.java index dc1d54df7a..201dcfa3b9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/BeforeTextChange.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/BeforeTextChange.java @@ -85,6 +85,8 @@ @Target(ElementType.METHOD) public @interface BeforeTextChange { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Click.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Click.java index 4c3f9abf2d..3d9d823b9d 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Click.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Click.java @@ -34,6 +34,8 @@ @Target(ElementType.METHOD) public @interface Click { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EActivity.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EActivity.java index 721450d6d9..f558e35fa1 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EActivity.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EActivity.java @@ -44,5 +44,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface EActivity { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EFragment.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EFragment.java index 785a09a63f..15406495b6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EFragment.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EFragment.java @@ -30,5 +30,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface EFragment { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EViewGroup.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EViewGroup.java index 7d910ae093..44779929d2 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EViewGroup.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/EViewGroup.java @@ -49,5 +49,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface EViewGroup { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FragmentById.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FragmentById.java index e60090151a..56b452f279 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FragmentById.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FragmentById.java @@ -30,5 +30,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface FragmentById { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FromHtml.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FromHtml.java index 51d3ceba7d..9479868249 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FromHtml.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/FromHtml.java @@ -23,5 +23,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface FromHtml { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/HttpsClient.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/HttpsClient.java index a8736bce5d..be5b5e8902 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/HttpsClient.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/HttpsClient.java @@ -61,11 +61,11 @@ public @interface HttpsClient { public static final String DEFAULT_PASSWD = "changeit"; - int trustStore() default Id.DEFAULT_VALUE; + int trustStore() default ResId.DEFAULT_VALUE; String trustStorePwd() default DEFAULT_PASSWD; - int keyStore() default Id.DEFAULT_VALUE; + int keyStore() default ResId.DEFAULT_VALUE; String keyStorePwd() default DEFAULT_PASSWD; diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemClick.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemClick.java index 34cda8c045..c8b78d2c0e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemClick.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemClick.java @@ -40,5 +40,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.METHOD) public @interface ItemClick { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemLongClick.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemLongClick.java index 1116789c57..c04fc96a57 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemLongClick.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemLongClick.java @@ -44,5 +44,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.METHOD) public @interface ItemLongClick { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemSelect.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemSelect.java index 7ece3b0498..42e5c693d9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemSelect.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ItemSelect.java @@ -41,5 +41,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.METHOD) public @interface ItemSelect { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/LongClick.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/LongClick.java index 9164e52ed6..7c744cb2f8 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/LongClick.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/LongClick.java @@ -41,5 +41,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.METHOD) public @interface LongClick { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsItem.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsItem.java index e626d1925c..1fe0955088 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsItem.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsItem.java @@ -34,6 +34,8 @@ @Target(ElementType.METHOD) public @interface OptionsItem { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsMenu.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsMenu.java index b5020fe025..3e507af4f0 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsMenu.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/OptionsMenu.java @@ -31,5 +31,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface OptionsMenu { - int value(); + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Id.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ResId.java similarity index 93% rename from AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Id.java rename to AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ResId.java index 98d2af222b..4bdee63b3f 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Id.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ResId.java @@ -15,11 +15,11 @@ */ package com.googlecode.androidannotations.annotations; -public abstract class Id { +public abstract class ResId { public static final int DEFAULT_VALUE = -1; - private Id() { + private ResId() { } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/TextChange.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/TextChange.java index 1c0d5339c2..485f8bbd31 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/TextChange.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/TextChange.java @@ -81,6 +81,8 @@ @Target(ElementType.METHOD) public @interface TextChange { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Touch.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Touch.java index 264df62499..90ac3d843e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Touch.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/Touch.java @@ -38,5 +38,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.METHOD) public @interface Touch { - int[] value() default Id.DEFAULT_VALUE; + int[] value() default ResId.DEFAULT_VALUE; + + String[] resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ViewById.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ViewById.java index 294691df31..73ce4b00e0 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ViewById.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/ViewById.java @@ -32,5 +32,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface ViewById { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/AnimationRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/AnimationRes.java index 93b692f47b..4a69975673 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/AnimationRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/AnimationRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface AnimationRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/BooleanRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/BooleanRes.java index f116208fe0..c1110eceb9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/BooleanRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/BooleanRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface BooleanRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorRes.java index 9b90c55e48..6a2435a3b4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with values from @@ -35,5 +35,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface ColorRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorStateListRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorStateListRes.java index 8ca7e17ac3..88067b90f4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorStateListRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/ColorStateListRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface ColorStateListRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelOffsetRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelOffsetRes.java index 62a631560f..49fc4df065 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelOffsetRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelOffsetRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface DimensionPixelOffsetRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelSizeRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelSizeRes.java index 83b9ba75f2..e8fb86a7dc 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelSizeRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionPixelSizeRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface DimensionPixelSizeRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionRes.java index 71459b9a63..fb66de9d66 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DimensionRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface DimensionRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DrawableRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DrawableRes.java index 4b53f2e90b..27211a8081 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DrawableRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/DrawableRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface DrawableRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/HtmlRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/HtmlRes.java index 5a119453e6..9eceed1ea4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/HtmlRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/HtmlRes.java @@ -20,10 +20,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface HtmlRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntArrayRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntArrayRes.java index 48d2e37d4e..5526987d60 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntArrayRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntArrayRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface IntArrayRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntegerRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntegerRes.java index cb4f3a015c..38917c3ff3 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntegerRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/IntegerRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface IntegerRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/LayoutRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/LayoutRes.java index 0bbf2b18b0..57d0e3e74c 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/LayoutRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/LayoutRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface LayoutRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/MovieRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/MovieRes.java index 5c0da61a7d..94d3d2adea 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/MovieRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/MovieRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface MovieRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringArrayRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringArrayRes.java index b855780ffb..3603b96a26 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringArrayRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringArrayRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with values from @@ -36,5 +36,7 @@ @Target(ElementType.FIELD) public @interface StringArrayRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringRes.java index e131543da6..0954164525 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/StringRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with values from @@ -40,5 +40,7 @@ @Target(ElementType.FIELD) public @interface StringRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextArrayRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextArrayRes.java index ded5ea5a78..a80212aca5 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextArrayRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextArrayRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface TextArrayRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextRes.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextRes.java index 66ef5d833a..bb16ccd65c 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextRes.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/annotations/res/TextRes.java @@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; /** * Use on fields in activity classes that should be injected with this specific @@ -29,5 +29,7 @@ @Retention(RetentionPolicy.SOURCE) @Target(ElementType.FIELD) public @interface TextRes { - int value() default Id.DEFAULT_VALUE; + int value() default ResId.DEFAULT_VALUE; + + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/AnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/AnnotationHelper.java index 8f04a30c4c..6c606a5679 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/AnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/AnnotationHelper.java @@ -18,6 +18,8 @@ import static com.googlecode.androidannotations.helper.ModelConstants.GENERATION_SUFFIX; import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.List; import javax.annotation.processing.ProcessingEnvironment; @@ -35,6 +37,15 @@ import javax.tools.Diagnostic; import javax.tools.Diagnostic.Kind; +import com.googlecode.androidannotations.annotations.OptionsItem; +import com.googlecode.androidannotations.annotations.ResId; +import com.googlecode.androidannotations.processing.EBeanHolder; +import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; +import com.googlecode.androidannotations.rclass.IRInnerClass; +import com.googlecode.androidannotations.rclass.RInnerClass; +import com.sun.codemodel.JFieldRef; + public class AnnotationHelper { private final ProcessingEnvironment processingEnv; @@ -199,4 +210,160 @@ public Types getTypeUtils() { return processingEnv.getTypeUtils(); } + /** + * Returns a list of {@link JFieldRef} linking to the R class, based on the + * given annotation + * + * @see #extractAnnotationResources(Element, Class, IRClass, Res, boolean) + */ + public List extractAnnotationFieldRefs(EBeanHolder holder, Element element, Class target, IRInnerClass rInnerClass, boolean useElementName) { + List fieldRefs = new ArrayList(); + + for (String refQualifiedName : extractAnnotationResources(element, target, rInnerClass, useElementName)) { + fieldRefs.add(RInnerClass.extractIdStaticRef(holder, refQualifiedName)); + } + + return fieldRefs; + } + + /** + * Method to handle all annotations dealing with resource ids that can be + * set using the value() parameter of the annotation (as int or int[]), the + * resName() parameter of the annotation (as String or String[]), the + * element name. + * + * @param element + * the annotated element + * @param target + * the annotation on the element + * @param rInnerClass + * the R innerClass the resources belong to + * @param useElementName + * Should we use a default fallback strategy that uses the + * element qualified name for a resource name + * @return the qualified names of the matching resources in the R inner + * class + */ + public List extractAnnotationResources(Element element, Class target, IRInnerClass rInnerClass, boolean useElementName) { + int[] values = extractAnnotationResIdValueParameter(element, target); + + List resourceIdQualifiedNames = new ArrayList(); + /* + * if nothing defined in the annotation value() parameter, we check for + * its resName() parameter + */ + if (defaultResIdValue(values)) { + + String[] resNames = extractAnnotationResNameParameter(element, target); + + if (defaultResName(resNames)) { + /* + * if we mustn't use the element name, then we'll return an + * empty list + */ + if (useElementName) { + /* + * fallback, using element name + */ + String elementName = extractElementName(element, target); + String clickQualifiedId = rInnerClass.getIdQualifiedName(elementName); + resourceIdQualifiedNames.add(clickQualifiedId); + } + } else { + /* + * The result will will contain all the resource qualified names + * based on the resource names in the resName() parameter + */ + for (String resName : resNames) { + String resourceIdQualifiedName = rInnerClass.getIdQualifiedName(resName); + resourceIdQualifiedNames.add(resourceIdQualifiedName); + } + } + + } else { + /* + * The result will will contain all the resource qualified names + * based on the integers in the value() parameter + */ + for (int value : values) { + String resourceIdQualifiedName = rInnerClass.getIdQualifiedName(value); + resourceIdQualifiedNames.add(resourceIdQualifiedName); + } + } + return resourceIdQualifiedNames; + } + + public String extractElementName(Element element, Class target) { + String elementName = element.getSimpleName().toString(); + int lastIndex = elementName.lastIndexOf(actionName(target)); + if (lastIndex != -1) { + elementName = elementName.substring(0, lastIndex); + } + return elementName; + } + + public boolean defaultResName(String[] resNames) { + return resNames.length == 0 || resNames.length == 1 && "".equals(resNames[0]); + } + + public boolean defaultResIdValue(int[] values) { + return values.length == 0 || values.length == 1 && values[0] == ResId.DEFAULT_VALUE; + } + + public String[] extractAnnotationResNameParameter(Element element, Class target) { + /* + * Annotation resName() parameter can be a String or a String[] + */ + Object annotationResName = extractAnnotationParameter(element, target, "resName"); + + String[] resNames; + if (annotationResName.getClass().isArray()) { + resNames = (String[]) annotationResName; + } else { + resNames = new String[1]; + resNames[0] = (String) annotationResName; + } + return resNames; + } + + public int[] extractAnnotationResIdValueParameter(Element element, Class target) { + /* + * Annotation value() parameter can be an int or an int[] + */ + Object annotationValue = extractAnnotationParameter(element, target, "value"); + + int[] values; + if (annotationValue.getClass().isArray()) { + values = (int[]) annotationValue; + } else { + values = new int[1]; + values[0] = (Integer) annotationValue; + } + return values; + } + + @SuppressWarnings("unchecked") + public T extractAnnotationParameter(Element element, Class target, String methodName) { + Annotation annotation = element.getAnnotation(target); + + Method method; + try { + method = annotation.getClass().getMethod(methodName); + return (T) method.invoke(annotation); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public String actionName(Class target) { + if (target == OptionsItem.class) { + return "Selected"; + } + String annotationSimpleName = target.getSimpleName(); + if (annotationSimpleName.endsWith("e")) { + return target.getSimpleName() + "d"; + } + return target.getSimpleName() + "ed"; + } + } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdAnnotationHelper.java index d92eb92cb0..a44fdf0266 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdAnnotationHelper.java @@ -16,13 +16,11 @@ package com.googlecode.androidannotations.helper; import java.lang.annotation.Annotation; -import java.util.ArrayList; import java.util.List; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; -import com.googlecode.androidannotations.annotations.Id; import com.googlecode.androidannotations.processing.EBeanHolder; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -38,65 +36,33 @@ public IdAnnotationHelper(ProcessingEnvironment processingEnv, Class extractAnnotationQualifiedIds(Element element) { - int[] idsValues = extractAnnotationValue(element); - IRInnerClass rInnerClass = rClass.get(Res.ID); - List clickQualifiedIds = new ArrayList(); - - if (idsValues.length == 1 && idsValues[0] == Id.DEFAULT_VALUE) { - String fieldName = element.getSimpleName().toString(); - int lastIndex = fieldName.lastIndexOf(actionName()); - if (lastIndex != -1) { - fieldName = fieldName.substring(0, lastIndex); - } - String clickQualifiedId = rInnerClass.getIdQualifiedName(fieldName); - clickQualifiedIds.add(clickQualifiedId); - - } else { - for (int idValue : idsValues) { - String clickQualifiedId = rInnerClass.getIdQualifiedName(idValue); - clickQualifiedIds.add(clickQualifiedId); - } - } - return clickQualifiedIds; + public boolean containsIdValue(Integer idValue, Res res) { + IRInnerClass rInnerClass = rClass.get(res); + return rInnerClass.containsIdValue(idValue); } - public List extractFieldRefsFromAnnotationValues(Element element, int[] idsValues, String methodSuffix, EBeanHolder holder) { - - List idsRefs = new ArrayList(); - IRInnerClass rInnerClass = rClass.get(Res.ID); - - if (idsValues.length == 1 && idsValues[0] == Id.DEFAULT_VALUE) { + public boolean containsField(String name, Res res) { + IRInnerClass rInnerClass = rClass.get(res); + return rInnerClass.containsField(name); + } - String fieldName = element.getSimpleName().toString(); - int lastIndex = fieldName.lastIndexOf(methodSuffix); + public List extractAnnotationResources(Element element, Res res, boolean useElementName) { + return super.extractAnnotationResources(element, getTarget(), rClass.get(res), useElementName); + } - if (lastIndex != -1) { - fieldName = fieldName.substring(0, lastIndex); - } + public List extractAnnotationFieldRefs(EBeanHolder holder, Element element, Res res, boolean useElementName) { + return super.extractAnnotationFieldRefs(holder, element, getTarget(), rClass.get(res), useElementName); + } - JFieldRef idRef = rInnerClass.getIdStaticRef(fieldName, holder); - idsRefs.add(idRef); + public JFieldRef extractOneAnnotationFieldRef(EBeanHolder holder, Element element, Res res, boolean useElementName) { + List jFieldRefs = extractAnnotationFieldRefs(holder, element, res, useElementName); + if (jFieldRefs.size() == 1) { + return jFieldRefs.get(0); } else { - for (int idValue : idsValues) { - - JFieldRef idRef = rInnerClass.getIdStaticRef(idValue, holder); - idsRefs.add(idRef); - - } + return null; } - return idsRefs; - } - boolean containsIdValue(Integer idValue, Res res) { - IRInnerClass rInnerClass = rClass.get(res); - return rInnerClass.containsIdValue(idValue); - } - - boolean containsField(String name, Res res) { - IRInnerClass rInnerClass = rClass.get(res); - return rInnerClass.containsField(name); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdValidatorHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdValidatorHelper.java index b48b7cde8d..675beaebd2 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdValidatorHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdValidatorHelper.java @@ -15,12 +15,13 @@ */ package com.googlecode.androidannotations.helper; +import java.lang.annotation.Annotation; import java.util.List; import java.util.Set; import javax.lang.model.element.Element; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass.Res; import com.googlecode.androidannotations.validation.IsValid; @@ -34,86 +35,85 @@ public IdValidatorHelper(IdAnnotationHelper idAnnotationHelper) { this.idAnnotationHelper = idAnnotationHelper; } - public void idExists(Element element, Res res, IsValid valid) { - idExists(element, res, true, valid); + public enum FallbackStrategy { + USE_ELEMENT_NAME, ALLOW_NO_RES_ID, NEED_RES_ID } - public void idExists(Element element, Res res, boolean defaultUseName, IsValid valid) { - idExists(element, res, defaultUseName, true, valid); - } - - public void idExists(Element element, Res res, boolean defaultUseName, boolean allowDefault, IsValid valid) { - - Integer idValue = annotationHelper.extractAnnotationValue(element); - - idExists(element, res, defaultUseName, allowDefault, valid, idValue); - } - - public void idExists(Element element, Res res, boolean defaultUseName, boolean allowDefault, IsValid valid, String methodName) { - - Integer idValue = annotationHelper.extractAnnotationValue(element, methodName); - - idExists(element, res, defaultUseName, allowDefault, valid, idValue); - } - - public void idsExists(Element element, Res res, IsValid valid) { - - int[] idsValues = annotationHelper.extractAnnotationValue(element); - - if (idsValues == null) { - valid.invalidate(); - annotationHelper.printAnnotationWarning(element, "The value of the %s annotation could not be determined at compile time, for unknown reasons. Please report this issue."); - } else if (idsValues[0] == Id.DEFAULT_VALUE) { - idExists(element, res, true, true, valid, idsValues[0]); - } else { - for (int idValue : idsValues) { - idExists(element, res, false, true, valid, idValue); - } - } - } - - private void idExists(Element element, Res res, boolean defaultUseName, boolean allowDefault, IsValid valid, Integer idValue) { - if (allowDefault && idValue.equals(Id.DEFAULT_VALUE)) { - if (defaultUseName) { - String elementName = element.getSimpleName().toString(); - int lastIndex = elementName.lastIndexOf(annotationHelper.actionName()); - if (lastIndex != -1) { - elementName = elementName.substring(0, lastIndex); - } - if (!idAnnotationHelper.containsField(elementName, res)) { + /** + * @param element + * @param res + * @param useElementName + * if true, we will use the elementName as a fallback strategy, + * and in such case it MUST match a valid resource id. if false, + * we validate based on allowNoResId. + * @param allowNoResId + * Only taken into account if useElementName is false and + * @param valid + */ + public void resIdsExist(Element element, Res res, FallbackStrategy fallbackStrategy, IsValid valid) { + + Class target = idAnnotationHelper.getTarget(); + int[] resIds = idAnnotationHelper.extractAnnotationResIdValueParameter(element, target); + + if (idAnnotationHelper.defaultResIdValue(resIds)) { + String[] resNames = idAnnotationHelper.extractAnnotationResNameParameter(element, target); + + if (idAnnotationHelper.defaultResName(resNames)) { + if (fallbackStrategy == FallbackStrategy.USE_ELEMENT_NAME) { + /* + * fallback, using element name + */ + String elementName = idAnnotationHelper.extractElementName(element, target); + + if (!idAnnotationHelper.containsField(elementName, res)) { + valid.invalidate(); + annotationHelper.printAnnotationError(element, "Resource name not found in R." + res.rName() + ": " + elementName); + } + } else if (fallbackStrategy == FallbackStrategy.NEED_RES_ID) { valid.invalidate(); - String message; - String snakeCaseName = CaseHelper.camelCaseToSnakeCase(elementName); - String rQualifiedPrefix = String.format("R.%s.", res.rName()); - if (snakeCaseName.equals(elementName)) { - message = "Id not found: " + rQualifiedPrefix + elementName; - } else { - message = "Id not found: " + rQualifiedPrefix + elementName + " or " + rQualifiedPrefix + snakeCaseName; + annotationHelper.printAnnotationError(element, "%s needs an annotation value"); + } + } else { + for (String resName : resNames) { + if (!idAnnotationHelper.containsField(resName, res)) { + valid.invalidate(); + annotationHelper.printAnnotationError(element, "Resource name not found in R." + res.rName() + ": " + resName); } - annotationHelper.printAnnotationError(element, message); } } } else { - if (!idAnnotationHelper.containsIdValue(idValue, res)) { - valid.invalidate(); - annotationHelper.printAnnotationError(element, "Id value not found in R." + res.rName() + ": " + idValue); + for (int resId : resIds) { + if (!idAnnotationHelper.containsIdValue(resId, res)) { + valid.invalidate(); + annotationHelper.printAnnotationError(element, "Resource id value not found in R." + res.rName() + ": " + resId); + } } } } + public void annotationParameterIsOptionalValidResId(Element element, Res res, String parameterName, IsValid valid) { + Integer resId = annotationHelper.extractAnnotationParameter(element, parameterName); + if (!resId.equals(ResId.DEFAULT_VALUE) && !idAnnotationHelper.containsIdValue(resId, res)) { + valid.invalidate(); + annotationHelper.printAnnotationError(element, "Id value not found in R." + res.rName() + ": " + resId); + } + } + public void uniqueId(Element element, AnnotationElements validatedElements, IsValid valid) { if (valid.isValid()) { - Element layoutElement = element.getEnclosingElement(); - List annotationQualifiedIds = idAnnotationHelper.extractAnnotationQualifiedIds(element); + List annotationQualifiedIds = idAnnotationHelper.extractAnnotationResources(element, Res.ID, true); + + Element elementEnclosingElement = element.getEnclosingElement(); Set annotatedElements = validatedElements.getAnnotatedElements(annotationHelper.getTarget()); for (Element uniqueCheckElement : annotatedElements) { - Element enclosingElement = uniqueCheckElement.getEnclosingElement(); + Element uniqueCheckEnclosingElement = uniqueCheckElement.getEnclosingElement(); + + if (elementEnclosingElement.equals(uniqueCheckEnclosingElement)) { - if (layoutElement.equals(enclosingElement)) { - List checkQualifiedIds = idAnnotationHelper.extractAnnotationQualifiedIds(uniqueCheckElement); + List checkQualifiedIds = idAnnotationHelper.extractAnnotationResources(uniqueCheckElement, Res.ID, true); for (String checkQualifiedId : checkQualifiedIds) { for (String annotationQualifiedId : annotationQualifiedIds) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/RestAnnotationHelper.java index 05e2671e11..ed4a73e7b8 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/RestAnnotationHelper.java @@ -95,7 +95,7 @@ public List extractUrlVariableNames(ExecutableElement element) { // String uriTemplate = urlPrefix + urlSuffix; List variableNames = new ArrayList(); - String uriTemplate = extractAnnotationValue(element); + String uriTemplate = extractAnnotationValueParameter(element); boolean hasValueInAnnotation = uriTemplate != null; if (hasValueInAnnotation) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/TargetAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/TargetAnnotationHelper.java index 85c24d4c9e..c06dd30f68 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/TargetAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/TargetAnnotationHelper.java @@ -16,7 +16,6 @@ package com.googlecode.androidannotations.helper; import java.lang.annotation.Annotation; -import java.lang.reflect.Method; import java.util.Map; import javax.annotation.processing.ProcessingEnvironment; @@ -36,24 +35,16 @@ public TargetAnnotationHelper(ProcessingEnvironment processingEnv, Class T extractAnnotationValue(Element element) { - return (T) extractAnnotationValue(element, "value"); + public T extractAnnotationValueParameter(Element element) { + return (T) extractAnnotationParameter(element, "value"); } @SuppressWarnings("unchecked") - public T extractAnnotationValue(Element element, String methodName) { - Annotation annotation = element.getAnnotation(target); - - Method method; - try { - method = annotation.getClass().getMethod(methodName); - return (T) method.invoke(annotation); - } catch (Exception e) { - throw new RuntimeException(e); - } + public T extractAnnotationParameter(Element element, String methodName) { + return (T) extractAnnotationParameter(element, target, methodName); } - public DeclaredType extractAnnotationClassValue(Element element) { + public DeclaredType extractAnnotationClassParameter(Element element) { AnnotationMirror annotationMirror = findAnnotationMirror(element, target); @@ -82,10 +73,7 @@ public Class getTarget() { } public String actionName() { - if (target.getSimpleName().endsWith("e")) { - return target.getSimpleName() + "d"; - } - return target.getSimpleName() + "ed"; + return actionName(target); } public static String annotationName(Class annotationClass) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/ValidatorHelper.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/ValidatorHelper.java index 3da4e79f8a..186f57cec9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/ValidatorHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/ValidatorHelper.java @@ -328,7 +328,7 @@ public void typeHasAnnotation(Class annotation, TypeMirror } public void typeOrTargetValueHasAnnotation(Class annotation, Element element, IsValid valid) { - DeclaredType targetAnnotationClassValue = annotationHelper.extractAnnotationClassValue(element); + DeclaredType targetAnnotationClassValue = annotationHelper.extractAnnotationClassParameter(element); if (targetAnnotationClassValue != null) { typeHasAnnotation(annotation, targetAnnotationClassValue, element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/AfterTextChangeProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/AfterTextChangeProcessor.java index 0560d9688c..d52c2e0d3d 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/AfterTextChangeProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/AfterTextChangeProcessor.java @@ -28,6 +28,7 @@ import com.googlecode.androidannotations.helper.APTCodeModelHelper; import com.googlecode.androidannotations.helper.TextWatcherHelper; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JExpression; @@ -85,9 +86,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti } - AfterTextChange annotation = element.getAnnotation(AfterTextChange.class); - - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "AfterTextChanged", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); for (JFieldRef idRef : idsRefs) { TextWatcherHolder textWatcherHolder = helper.getOrCreateListener(codeModel, holder, idRef, viewParameterType); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeanProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeanProcessor.java index 9c6f571e3f..b4d6bada94 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeanProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeanProcessor.java @@ -52,7 +52,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo EBeanHolder holder = eBeansHolder.getEnclosingEBeanHolder(element); - DeclaredType targetAnnotationClassValue = annotationHelper.extractAnnotationClassValue(element); + DeclaredType targetAnnotationClassValue = annotationHelper.extractAnnotationClassParameter(element); TypeMirror elementType; if (targetAnnotationClassValue != null) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeforeTextChangeProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeforeTextChangeProcessor.java index 0ca7d9b21c..195e4c9ed5 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeforeTextChangeProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/BeforeTextChangeProcessor.java @@ -29,6 +29,7 @@ import com.googlecode.androidannotations.helper.APTCodeModelHelper; import com.googlecode.androidannotations.helper.TextWatcherHelper; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JExpression; @@ -97,8 +98,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti } - BeforeTextChange annotation = element.getAnnotation(BeforeTextChange.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "BeforeTextChanged", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); for (JFieldRef idRef : idsRefs) { TextWatcherHolder textWatcherHolder = helper.getOrCreateListener(codeModel, holder, idRef, viewParameterType); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ClickProcessor.java index ecaa46d319..605220b3f9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ClickProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ClickProcessor.java @@ -28,9 +28,10 @@ import javax.lang.model.element.VariableElement; import com.googlecode.androidannotations.annotations.Click; -import com.googlecode.androidannotations.helper.IdAnnotationHelper; +import com.googlecode.androidannotations.helper.AnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JDefinedClass; @@ -47,10 +48,12 @@ */ public class ClickProcessor implements ElementProcessor { - private final IdAnnotationHelper helper; + private final AnnotationHelper helper; + private final IRClass rClass; public ClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { - helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); + this.rClass = rClass; + helper = new AnnotationHelper(processingEnv); } @Override @@ -71,8 +74,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasViewParameter = parameters.size() == 1; - Click annotation = element.getAnnotation(Click.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "Clicked", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, getTarget(), rClass.get(Res.ID), true); JDefinedClass onClickListenerClass = codeModel.anonymousClass(classes.VIEW_ON_CLICK_LISTENER); JMethod onClickMethod = onClickListenerClass.method(JMod.PUBLIC, codeModel.VOID, "onClick"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EActivityProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EActivityProcessor.java index 30d6e088d3..df9e2fbeb5 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EActivityProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EActivityProcessor.java @@ -39,13 +39,11 @@ import javax.lang.model.util.ElementFilter; import com.googlecode.androidannotations.annotations.EActivity; -import com.googlecode.androidannotations.annotations.Id; import com.googlecode.androidannotations.api.SdkVersionHelper; import com.googlecode.androidannotations.helper.AnnotationHelper; import com.googlecode.androidannotations.helper.ModelConstants; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.ClassType; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; @@ -149,13 +147,11 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti onCreateBody.invoke(_super(), onCreate).arg(onCreateSavedInstanceState); - EActivity layoutAnnotation = element.getAnnotation(EActivity.class); - int layoutIdValue = layoutAnnotation.value(); + List fieldRefs = annotationHelper.extractAnnotationFieldRefs(holder, element, EActivity.class, rClass.get(Res.LAYOUT), false); JFieldRef contentViewId; - if (layoutIdValue != Id.DEFAULT_VALUE) { - IRInnerClass rInnerClass = rClass.get(Res.LAYOUT); - contentViewId = rInnerClass.getIdStaticRef(layoutIdValue, holder); + if (fieldRefs.size() == 1) { + contentViewId = fieldRefs.get(0); } else { contentViewId = null; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EFragmentProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EFragmentProcessor.java index 7869fb2564..67e76c7923 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EFragmentProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EFragmentProcessor.java @@ -26,15 +26,15 @@ import java.lang.annotation.Annotation; +import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import com.googlecode.androidannotations.annotations.EFragment; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.ClassType; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; @@ -46,10 +46,10 @@ public class EFragmentProcessor implements ElementProcessor { - private final IRClass rClass; + private final IdAnnotationHelper helper; - public EFragmentProcessor(IRClass rClass) { - this.rClass = rClass; + public EFragmentProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { + helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -104,20 +104,6 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo holder.afterSetContentView = holder.eBean.method(PRIVATE, codeModel.VOID, "afterSetContentView_"); } - JFieldRef contentViewId; - { - // Extract contentViewId - EFragment layoutAnnotation = element.getAnnotation(EFragment.class); - int layoutIdValue = layoutAnnotation.value(); - - if (layoutIdValue != Id.DEFAULT_VALUE) { - IRInnerClass rInnerClass = rClass.get(Res.LAYOUT); - contentViewId = rInnerClass.getIdStaticRef(layoutIdValue, holder); - } else { - contentViewId = null; - } - } - { // onCreateView() JMethod onCreateView = holder.eBean.method(PUBLIC, classes.VIEW, "onCreateView"); @@ -129,6 +115,8 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo JBlock body = onCreateView.body(); body.assign(contentView, _super().invoke(onCreateView).arg(inflater).arg(container).arg(savedInstanceState)); + JFieldRef contentViewId = helper.extractOneAnnotationFieldRef(holder, element, Res.LAYOUT, false); + if (contentViewId != null) { body._if(contentView.eq(_null())) // ._then() // diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EViewGroupProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EViewGroupProcessor.java index fd6259dc50..377fddac58 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EViewGroupProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EViewGroupProcessor.java @@ -21,18 +21,18 @@ import java.lang.annotation.Annotation; +import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import com.googlecode.androidannotations.annotations.EViewGroup; -import com.googlecode.androidannotations.annotations.Id; import com.googlecode.androidannotations.helper.APTCodeModelHelper; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.ModelConstants; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.ClassType; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; @@ -60,13 +60,13 @@ public class EViewGroupProcessor implements ElementProcessor { + "are in a View." // ; - private final IRClass rClass; - private final APTCodeModelHelper codeModelHelper; - public EViewGroupProcessor(IRClass rClass) { - this.rClass = rClass; + private final IdAnnotationHelper helper; + + public EViewGroupProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { codeModelHelper = new APTCodeModelHelper(); + helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -127,13 +127,9 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo JBlock ifNotInflated = onFinishInflate.body()._if(JExpr.ref("mAlreadyInflated_").not())._then(); ifNotInflated.assign(mAlreadyInflated_, JExpr.TRUE); - // inflate layout if ID is given on annotation - EViewGroup layoutAnnotation = element.getAnnotation(EViewGroup.class); - int layoutIdValue = layoutAnnotation.value(); - JFieldRef contentViewId; - if (layoutIdValue != Id.DEFAULT_VALUE) { - IRInnerClass rInnerClass = rClass.get(Res.LAYOUT); - contentViewId = rInnerClass.getIdStaticRef(layoutIdValue, holder); + JFieldRef contentViewId = helper.extractOneAnnotationFieldRef(holder, element, Res.LAYOUT, false); + + if (contentViewId != null) { ifNotInflated.invoke("inflate").arg(invoke("getContext")).arg(contentViewId).arg(JExpr._this()); } ifNotInflated.invoke(holder.afterSetContentView); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FragmentByIdProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FragmentByIdProcessor.java index 53154153df..5c391f8be4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FragmentByIdProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FragmentByIdProcessor.java @@ -28,13 +28,11 @@ import javax.lang.model.type.TypeMirror; import com.googlecode.androidannotations.annotations.FragmentById; -import com.googlecode.androidannotations.annotations.Id; -import com.googlecode.androidannotations.helper.AnnotationHelper; import com.googlecode.androidannotations.helper.CanonicalNameConstants; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JFieldRef; @@ -43,12 +41,10 @@ public class FragmentByIdProcessor implements ElementProcessor { - private final IRClass rClass; - private final AnnotationHelper annotationHelper; + private final IdAnnotationHelper annotationHelper; public FragmentByIdProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { - annotationHelper = new AnnotationHelper(processingEnv); - this.rClass = rClass; + annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -67,17 +63,6 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo TypeMirror elementType = element.asType(); String typeQualifiedName = elementType.toString(); - FragmentById annotation = element.getAnnotation(FragmentById.class); - int idValue = annotation.value(); - - IRInnerClass rInnerClass = rClass.get(Res.ID); - JFieldRef idRef; - if (idValue == Id.DEFAULT_VALUE) { - idRef = rInnerClass.getIdStaticRef(fieldName, holder); - } else { - idRef = rInnerClass.getIdStaticRef(idValue, holder); - } - TypeMirror nativeFragmentType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.FRAGMENT).asType(); JMethod findFragmentById; @@ -121,6 +106,9 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo } JBlock methodBody = holder.afterSetContentView.body(); + + JFieldRef idRef = annotationHelper.extractOneAnnotationFieldRef(holder, element, Res.ID, true); + methodBody.assign(ref(fieldName), cast(holder.refClass(typeQualifiedName), invoke(findFragmentById).arg(idRef))); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FromHtmlProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FromHtmlProcessor.java index 1a7c49d84a..dbfef21ae6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FromHtmlProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/FromHtmlProcessor.java @@ -20,24 +20,24 @@ import java.lang.annotation.Annotation; +import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import com.googlecode.androidannotations.annotations.FromHtml; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JFieldRef; public class FromHtmlProcessor implements ElementProcessor { - private final IRClass rClass; + private final IdAnnotationHelper annotationHelper; - public FromHtmlProcessor(IRClass rClass) { - this.rClass = rClass; + public FromHtmlProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { + annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -52,16 +52,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti String fieldName = element.getSimpleName().toString(); - FromHtml annotation = element.getAnnotation(FromHtml.class); - int idValue = annotation.value(); - - IRInnerClass rInnerClass = rClass.get(Res.STRING); - JFieldRef idRef; - if (idValue == Id.DEFAULT_VALUE) { - idRef = rInnerClass.getIdStaticRef(fieldName, holder); - } else { - idRef = rInnerClass.getIdStaticRef(idValue, holder); - } + JFieldRef idRef = annotationHelper.extractOneAnnotationFieldRef(holder, element, Res.STRING, true); JBlock methodBody = holder.afterSetContentView.body(); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/HttpsClientProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/HttpsClientProcessor.java index 7bc4b3ffd5..0982d8a048 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/HttpsClientProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/HttpsClientProcessor.java @@ -30,7 +30,7 @@ import javax.lang.model.element.Element; import com.googlecode.androidannotations.annotations.HttpsClient; -import com.googlecode.androidannotations.annotations.Id; +import com.googlecode.androidannotations.annotations.ResId; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -73,8 +73,8 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo boolean allowAllHostnames = annotation.allowAllHostnames(); - boolean useCustomTrustStore = Id.DEFAULT_VALUE != trustStoreRawId ? true : false; - boolean useCustomKeyStore = Id.DEFAULT_VALUE != keyStoreRawId ? true : false; + boolean useCustomTrustStore = ResId.DEFAULT_VALUE != trustStoreRawId ? true : false; + boolean useCustomKeyStore = ResId.DEFAULT_VALUE != keyStoreRawId ? true : false; String fieldName = element.getSimpleName().toString(); JBlock methodBody = holder.init.body(); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemClickProcessor.java index e8f9375f1e..51262fe904 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemClickProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemClickProcessor.java @@ -29,6 +29,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; import com.sun.codemodel.JCodeModel; @@ -70,8 +71,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasItemParameter = parameters.size() == 1; - ItemClick annotation = element.getAnnotation(ItemClick.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemClicked", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); JDefinedClass onItemClickListenerAnonymousClass = codeModel.anonymousClass(classes.ON_ITEM_CLICK_LISTENER); JMethod onItemClickMethod = onItemClickListenerAnonymousClass.method(JMod.PUBLIC, codeModel.VOID, "onItemClick"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemLongClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemLongClickProcessor.java index 5148ab3ce2..468f8397f9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemLongClickProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemLongClickProcessor.java @@ -34,6 +34,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; import com.sun.codemodel.JCodeModel; @@ -77,8 +78,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasItemParameter = parameters.size() == 1; - ItemLongClick annotation = element.getAnnotation(ItemLongClick.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemLongClicked", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); JDefinedClass onItemLongClickListenerClass = codeModel.anonymousClass(classes.ON_ITEM_LONG_CLICK_LISTENER); JMethod onItemLongClickMethod = onItemLongClickListenerClass.method(JMod.PUBLIC, codeModel.BOOLEAN, "onItemLongClick"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemSelectedProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemSelectedProcessor.java index 98f312bfb3..a70c34c9af 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemSelectedProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemSelectedProcessor.java @@ -35,6 +35,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; import com.sun.codemodel.JCodeModel; @@ -73,8 +74,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti ExecutableElement executableElement = (ExecutableElement) element; List parameters = executableElement.getParameters(); - ItemSelect annotation = element.getAnnotation(ItemSelect.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemSelected", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); JDefinedClass onItemSelectedListenerClass = codeModel.anonymousClass(classes.ON_ITEM_SELECTED_LISTENER); JMethod onItemSelectedMethod = onItemSelectedListenerClass.method(JMod.PUBLIC, codeModel.VOID, "onItemSelected"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/LongClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/LongClickProcessor.java index a3ec7de254..b2053cb9f9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/LongClickProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/LongClickProcessor.java @@ -29,6 +29,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JDefinedClass; @@ -72,8 +73,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasItemParameter = parameters.size() == 1; - LongClick annotation = element.getAnnotation(LongClick.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "LongClicked", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); JDefinedClass listenerAnonymousClass = codeModel.anonymousClass(classes.ON_LONG_CLICK_LISTENER); JMethod listenerMethod = listenerAnonymousClass.method(JMod.PUBLIC, codeModel.BOOLEAN, "onLongClick"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/OptionsItemProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/OptionsItemProcessor.java index e7ed4e0d2e..bd95ba02cf 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/OptionsItemProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/OptionsItemProcessor.java @@ -35,6 +35,7 @@ import com.googlecode.androidannotations.helper.SherlockHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCase; import com.sun.codemodel.JClass; @@ -85,8 +86,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasItemParameter = parameters.size() == 1; - OptionsItem annotation = element.getAnnotation(OptionsItem.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "Selected", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); if (holder.onOptionsItemSelectedSwitch == null) { JMethod method = holder.eBean.method(JMod.PUBLIC, codeModel.BOOLEAN, "onOptionsItemSelected"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ResProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ResProcessor.java index 9695027992..dca7c16f71 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ResProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ResProcessor.java @@ -20,29 +20,30 @@ import java.lang.annotation.Annotation; +import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import javax.lang.model.type.TypeMirror; -import com.googlecode.androidannotations.annotations.Id; import com.googlecode.androidannotations.annotations.res.HtmlRes; import com.googlecode.androidannotations.helper.CanonicalNameConstants; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.model.AndroidRes; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JFieldRef; public class ResProcessor implements ElementProcessor { - private final IRClass rClass; private final AndroidRes androidValue; - public ResProcessor(AndroidRes androidValue, IRClass rClass) { - this.rClass = rClass; + private final IdAnnotationHelper annotationHelper; + + public ResProcessor(ProcessingEnvironment processingEnv, AndroidRes androidValue, IRClass rClass) { this.androidValue = androidValue; + annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -57,17 +58,9 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo String fieldName = element.getSimpleName().toString(); - int idValue = androidValue.idFromElement(element); - Res resInnerClass = androidValue.getRInnerClass(); - IRInnerClass rInnerClass = rClass.get(resInnerClass); - JFieldRef idRef; - if (idValue == Id.DEFAULT_VALUE) { - idRef = rInnerClass.getIdStaticRef(fieldName, holder); - } else { - idRef = rInnerClass.getIdStaticRef(idValue, holder); - } + JFieldRef idRef = annotationHelper.extractOneAnnotationFieldRef(holder, element, resInnerClass, true); JBlock methodBody = holder.init.body(); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TextChangeProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TextChangeProcessor.java index 59f852c87e..5252efad30 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TextChangeProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TextChangeProcessor.java @@ -29,6 +29,7 @@ import com.googlecode.androidannotations.helper.APTCodeModelHelper; import com.googlecode.androidannotations.helper.TextWatcherHelper; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JExpression; @@ -97,9 +98,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti } } - TextChange annotation = element.getAnnotation(TextChange.class); - - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "TextChanged", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); for (JFieldRef idRef : idsRefs) { TextWatcherHolder textWatcherHolder = helper.getOrCreateListener(codeModel, holder, idRef, viewParameterType); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TouchProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TouchProcessor.java index fd4c3e4597..ae6078ad10 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TouchProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/TouchProcessor.java @@ -32,6 +32,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.processing.EBeansHolder.Classes; import com.googlecode.androidannotations.rclass.IRClass; +import com.googlecode.androidannotations.rclass.IRClass.Res; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JDefinedClass; @@ -73,8 +74,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti boolean hasItemParameter = parameters.size() == 2; - Touch annotation = element.getAnnotation(Touch.class); - List idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "Touched", holder); + List idsRefs = helper.extractAnnotationFieldRefs(holder, element, Res.ID, true); JDefinedClass listenerClass = codeModel.anonymousClass(classes.ON_TOUCH_LISTENER); JMethod listenerMethod = listenerClass.method(JMod.PUBLIC, codeModel.BOOLEAN, "onTouch"); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ViewByIdProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ViewByIdProcessor.java index 4ad49c4064..b122fd244a 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ViewByIdProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ViewByIdProcessor.java @@ -21,24 +21,24 @@ import java.lang.annotation.Annotation; +import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import javax.lang.model.type.TypeMirror; -import com.googlecode.androidannotations.annotations.Id; import com.googlecode.androidannotations.annotations.ViewById; +import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; -import com.googlecode.androidannotations.rclass.IRInnerClass; import com.sun.codemodel.JBlock; import com.sun.codemodel.JCodeModel; import com.sun.codemodel.JFieldRef; public class ViewByIdProcessor implements ElementProcessor { - private final IRClass rClass; + private final IdAnnotationHelper annotationHelper; - public ViewByIdProcessor(IRClass rClass) { - this.rClass = rClass; + public ViewByIdProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { + annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); } @Override @@ -56,16 +56,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo TypeMirror uiFieldTypeMirror = element.asType(); String typeQualifiedName = uiFieldTypeMirror.toString(); - ViewById annotation = element.getAnnotation(ViewById.class); - int idValue = annotation.value(); - - IRInnerClass rInnerClass = rClass.get(Res.ID); - JFieldRef idRef; - if (idValue == Id.DEFAULT_VALUE) { - idRef = rInnerClass.getIdStaticRef(fieldName, holder); - } else { - idRef = rInnerClass.getIdStaticRef(idValue, holder); - } + JFieldRef idRef = annotationHelper.extractOneAnnotationFieldRef(holder, element, Res.ID, true); JBlock methodBody = holder.afterSetContentView.body(); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/rclass/RInnerClass.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/rclass/RInnerClass.java index 10b9e1ca07..652c6c3cad 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/rclass/RInnerClass.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/rclass/RInnerClass.java @@ -108,7 +108,7 @@ public JFieldRef getIdStaticRef(String name, EBeanHolder holder) { return extractIdStaticRef(holder, layoutFieldQualifiedName); } - private JFieldRef extractIdStaticRef(EBeanHolder holder, String layoutFieldQualifiedName) { + public static JFieldRef extractIdStaticRef(EBeanHolder holder, String layoutFieldQualifiedName) { if (layoutFieldQualifiedName != null) { int fieldSuffix = layoutFieldQualifiedName.lastIndexOf('.'); String fieldName = layoutFieldQualifiedName.substring(fieldSuffix + 1); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/AfterTextChangeValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/AfterTextChangeValidator.java index c90ce41dfc..a8f2f42086 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/AfterTextChangeValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/AfterTextChangeValidator.java @@ -26,6 +26,7 @@ import com.googlecode.androidannotations.annotations.AfterTextChange; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -53,11 +54,11 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoid(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/BeforeTextChangeValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/BeforeTextChangeValidator.java index 281a0fd3fe..171ed75794 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/BeforeTextChangeValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/BeforeTextChangeValidator.java @@ -27,6 +27,7 @@ import com.googlecode.androidannotations.annotations.BeforeTextChange; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -54,11 +55,11 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoid(executableElement, valid); @@ -90,19 +91,16 @@ private void haveBeforeTextChangedMethodParameters(ExecutableElement executableE textViewParameterFound = true; continue; } - if (parameter.asType().getKind() == TypeKind.INT - || "java.lang.Integer".equals(parameterType)) { + if (parameter.asType().getKind() == TypeKind.INT || "java.lang.Integer".equals(parameterType)) { String parameterName = parameter.toString(); - if ("start".equals(parameterName) - || "count".equals(parameterName) - || "after".equals(parameterName)) { + if ("start".equals(parameterName) || "count".equals(parameterName) || "after".equals(parameterName)) { continue; } annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter name. You can only have start, before, or count parameter name. Try to pick a parameter from android.text.TextWatcher.beforeTextChanged() method."); valid.invalidate(); continue; } - annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter ("+parameter.toString()+"). %s can only have a android.widget.TextView parameter and/or parameters from android.text.TextWatcher.beforeTextChanged() method."); + annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter (" + parameter.toString() + "). %s can only have a android.widget.TextView parameter and/or parameters from android.text.TextWatcher.beforeTextChanged() method."); valid.invalidate(); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ClickValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ClickValidator.java index a335203084..17cb69b6be 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ClickValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ClickValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.Click; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -49,11 +50,11 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EActivityValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EActivityValidator.java index bff1bdc60a..ff9835a7c5 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EActivityValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EActivityValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.helper.AndroidManifest; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -51,7 +52,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.extendsActivity(element, valid); - validatorHelper.idExists(element, Res.LAYOUT, false, valid); + validatorHelper.resIdsExist(element, Res.LAYOUT, FallbackStrategy.ALLOW_NO_RES_ID, valid); validatorHelper.isNotFinal(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EFragmentValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EFragmentValidator.java index 9167b1d6c6..1f30ce4ad1 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EFragmentValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EFragmentValidator.java @@ -23,6 +23,7 @@ import com.googlecode.androidannotations.annotations.EFragment; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -50,7 +51,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.isNotAbstract(element, valid); - validatorHelper.idExists(element, Res.LAYOUT, false, valid); + validatorHelper.resIdsExist(element, Res.LAYOUT, FallbackStrategy.ALLOW_NO_RES_ID, valid); validatorHelper.isNotPrivate(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EViewGroupValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EViewGroupValidator.java index a003616853..f845bfb865 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EViewGroupValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/EViewGroupValidator.java @@ -19,11 +19,11 @@ import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; -import javax.lang.model.element.TypeElement; import com.googlecode.androidannotations.annotations.EViewGroup; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -48,9 +48,9 @@ public boolean validate(Element element, AnnotationElements validatedElements) { IsValid valid = new IsValid(); - validatorHelper.extendsViewGroup((TypeElement) element, valid); + validatorHelper.extendsViewGroup(element, valid); - validatorHelper.idExists(element, Res.LAYOUT, false, valid); + validatorHelper.resIdsExist(element, Res.LAYOUT, FallbackStrategy.ALLOW_NO_RES_ID, valid); validatorHelper.isNotFinal(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FragmentByIdValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FragmentByIdValidator.java index 4c0589f4c9..b5bc4f2ec4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FragmentByIdValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FragmentByIdValidator.java @@ -23,6 +23,7 @@ import com.googlecode.androidannotations.annotations.FragmentById; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -51,7 +52,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.extendsFragment(element, valid); - validatorHelper.idExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FromHtmlValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FromHtmlValidator.java index a14a326969..427958d901 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FromHtmlValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/FromHtmlValidator.java @@ -23,6 +23,7 @@ import com.googlecode.androidannotations.annotations.FromHtml; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -50,7 +51,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.extendsTextView(element, valid); - validatorHelper.idExists(element, Res.STRING, valid); + validatorHelper.resIdsExist(element, Res.STRING, FallbackStrategy.USE_ELEMENT_NAME, valid); return valid.isValid(); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/HttpsClientValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/HttpsClientValidator.java index be977908a1..d799c2bef1 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/HttpsClientValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/HttpsClientValidator.java @@ -50,8 +50,8 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, validatedElements, valid); - validatorHelper.idExists(element, Res.RAW, false, true, valid, "keyStore"); - validatorHelper.idExists(element, Res.RAW, false, true, valid, "trustStore"); + validatorHelper.annotationParameterIsOptionalValidResId(element, Res.RAW, "keyStore", valid); + validatorHelper.annotationParameterIsOptionalValidResId(element, Res.RAW, "trustStore", valid); validatorHelper.isNotPrivate(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemClickValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemClickValidator.java index b21906c07d..3cc3799629 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemClickValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemClickValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.ItemClick; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -54,11 +55,11 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); ExecutableElement executableElement = (ExecutableElement) element; diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemLongClickValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemLongClickValidator.java index 103d771e54..3c4f7e972a 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemLongClickValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemLongClickValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.ItemLongClick; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -53,14 +54,14 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); - + ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemSelectedValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemSelectedValidator.java index a10617e67f..d126c7b60e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemSelectedValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ItemSelectedValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.ItemSelect; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -52,14 +53,14 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); - + ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoid(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/LongClickValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/LongClickValidator.java index 83368a088f..6bcda606e8 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/LongClickValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/LongClickValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.LongClick; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -53,14 +54,14 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); - + ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsItemValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsItemValidator.java index f9b02aa4b1..3de588b875 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsItemValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsItemValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.OptionsItem; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -37,6 +38,7 @@ public class OptionsItemValidator implements ElementValidator { public OptionsItemValidator(ProcessingEnvironment processingEnv, IRClass rClass) { IdAnnotationHelper annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass) { + @Override public String actionName() { return "Selected"; }; @@ -56,14 +58,14 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEActivity(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); - + ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsMenuValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsMenuValidator.java index 066ccd5688..92932a1fa3 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsMenuValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/OptionsMenuValidator.java @@ -23,6 +23,7 @@ import com.googlecode.androidannotations.annotations.OptionsMenu; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -48,7 +49,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.hasEActivity(element, validatedElements, valid); - validatorHelper.idExists(element, Res.MENU, false, false, valid); + validatorHelper.resIdsExist(element, Res.MENU, FallbackStrategy.NEED_RES_ID, valid); return valid.isValid(); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ResValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ResValidator.java index 0c46a3d05b..1bf4945640 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ResValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ResValidator.java @@ -23,6 +23,7 @@ import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AndroidRes; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; @@ -54,7 +55,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.allowedType(element, valid, fieldTypeMirror, androidValue.getAllowedTypes()); - validatorHelper.idExists(element, androidValue.getRInnerClass(), valid); + validatorHelper.resIdsExist(element, androidValue.getRInnerClass(), FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TextChangeValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TextChangeValidator.java index 9da94fa1fa..f12eb2faab 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TextChangeValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TextChangeValidator.java @@ -27,6 +27,7 @@ import com.googlecode.androidannotations.annotations.TextChange; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -54,11 +55,11 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoid(executableElement, valid); @@ -90,19 +91,16 @@ private void haveTextChangedMethodParameters(ExecutableElement executableElement textViewParameterFound = true; continue; } - if (parameter.asType().getKind() == TypeKind.INT - || "java.lang.Integer".equals(parameterType)) { + if (parameter.asType().getKind() == TypeKind.INT || "java.lang.Integer".equals(parameterType)) { String parameterName = parameter.toString(); - if ("start".equals(parameterName) - || "before".equals(parameterName) - || "count".equals(parameterName)) { + if ("start".equals(parameterName) || "before".equals(parameterName) || "count".equals(parameterName)) { continue; } annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter name. You can only have start, before, or count parameter name. Try to pick a prameter from the android.text.TextWatcher.onTextChanged() method."); valid.invalidate(); continue; } - annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter ("+parameter.toString()+"). %s can only have a android.widget.TextView parameter and/or parameters from android.text.TextWatcher.onTextChanged() method."); + annotationHelper.printAnnotationError(executableElement, "Unrecognized parameter (" + parameter.toString() + "). %s can only have a android.widget.TextView parameter and/or parameters from android.text.TextWatcher.onTextChanged() method."); valid.invalidate(); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TouchValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TouchValidator.java index 4c0a002c85..1e0ce78a34 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TouchValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/TouchValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.Touch; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -49,14 +50,14 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid); - validatorHelper.idsExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); - validatorHelper.doesntThrowException((ExecutableElement) element, valid); + validatorHelper.doesntThrowException(element, valid); validatorHelper.uniqueId(element, validatedElements, valid); - + ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); diff --git a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ViewByIdValidator.java b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ViewByIdValidator.java index 663b8e162b..2e09e96e78 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ViewByIdValidator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/validation/ViewByIdValidator.java @@ -24,6 +24,7 @@ import com.googlecode.androidannotations.annotations.ViewById; import com.googlecode.androidannotations.helper.IdAnnotationHelper; import com.googlecode.androidannotations.helper.IdValidatorHelper; +import com.googlecode.androidannotations.helper.IdValidatorHelper.FallbackStrategy; import com.googlecode.androidannotations.model.AnnotationElements; import com.googlecode.androidannotations.rclass.IRClass; import com.googlecode.androidannotations.rclass.IRClass.Res; @@ -56,7 +57,7 @@ public boolean validate(Element element, AnnotationElements validatedElements) { validatorHelper.extendsView(element, valid); - validatorHelper.idExists(element, Res.ID, valid); + validatorHelper.resIdsExist(element, Res.ID, FallbackStrategy.USE_ELEMENT_NAME, valid); validatorHelper.isNotPrivate(element, valid); diff --git a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/com/googlecode/androidannotations/test15/ClicksHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/com/googlecode/androidannotations/test15/ClicksHandledActivityTest.java index f400b320f0..67e6a167ee 100644 --- a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/com/googlecode/androidannotations/test15/ClicksHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/com/googlecode/androidannotations/test15/ClicksHandledActivityTest.java @@ -113,5 +113,18 @@ public void multipleButtonsClicked() { assertThat(activity.multipleButtonsEventHandled).isTrue(); assertThat(activity.viewArgument).hasId(R.id.button2); } + + @Test + public void libResBussonClicked() { + assertThat(activity.libResButtonEventHandled).isFalse(); + + activity.findViewById(R.id.libResButton1).performClick(); + assertThat(activity.libResButtonEventHandled).isTrue(); + + activity.libResButtonEventHandled = false; + + activity.findViewById(R.id.libResButton2).performClick(); + assertThat(activity.libResButtonEventHandled).isTrue(); + } } diff --git a/AndroidAnnotations/functional-test-1-5/res/layout/clickable_widgets.xml b/AndroidAnnotations/functional-test-1-5/res/layout/clickable_widgets.xml index 22d71355e2..da3d0755b2 100644 --- a/AndroidAnnotations/functional-test-1-5/res/layout/clickable_widgets.xml +++ b/AndroidAnnotations/functional-test-1-5/res/layout/clickable_widgets.xml @@ -1,6 +1,5 @@