diff --git a/AndroidAnnotations/androidannotations-api/META-INF/MANIFEST.MF b/AndroidAnnotations/androidannotations-api/META-INF/MANIFEST.MF
index de5056e665..c2618481b8 100644
--- a/AndroidAnnotations/androidannotations-api/META-INF/MANIFEST.MF
+++ b/AndroidAnnotations/androidannotations-api/META-INF/MANIFEST.MF
@@ -7,9 +7,7 @@ Export-Package: org.androidannotations.annotations,
org.androidannotations.annotations.res,
org.androidannotations.annotations.rest,
org.androidannotations.annotations.sharedpreferences,
- org.androidannotations.api,
- org.androidannotations.api.rest,
- org.androidannotations.api.sharedpreferences
+ org.androidannotations.api.rest
Bundle-Vendor: androidannotations
Bundle-Activator: org.androidannotations.api.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EBean.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EBean.java
index 92bc6e6bc2..60e1239dc5 100644
--- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EBean.java
+++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EBean.java
@@ -20,8 +20,6 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.androidannotations.api.Scope;
-
/**
* Should be used on custom classes to enable usage of AndroidAnnotations
*
@@ -36,6 +34,20 @@
@Target(ElementType.TYPE)
public @interface EBean {
+ public enum Scope {
+
+ /**
+ * A new instance of the bean is created each time it is needed
+ */
+ Default, //
+
+ /**
+ * A new instance of the bean is created the first time it is needed, it is
+ * then retained and the same instance is always returned.
+ */
+ Singleton, //
+ }
+
Scope scope() default Scope.Default;
}
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/Pref.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/Pref.java
index 2e4ea20499..45bd1b1b31 100644
--- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/Pref.java
+++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/Pref.java
@@ -20,8 +20,6 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.androidannotations.api.sharedpreferences.SharedPreferencesHelper;
-
/**
* Injects a {@link SharedPref}
*
diff --git a/AndroidAnnotations/androidannotations/pom.xml b/AndroidAnnotations/androidannotations/pom.xml
index 95da94706c..49d21ae26c 100644
--- a/AndroidAnnotations/androidannotations/pom.xml
+++ b/AndroidAnnotations/androidannotations/pom.xml
@@ -33,7 +33,7 @@
com.google.android
android
1.6_r2
- test
+ provided
@@ -85,6 +85,12 @@
rebel.xml
+
+ src/main/java
+
+ org/androidannotations/api/**
+
+
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/BackgroundExecutor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/BackgroundExecutor.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/BackgroundExecutor.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/BackgroundExecutor.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/SdkVersionHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/SdkVersionHelper.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/SdkVersionHelper.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/SdkVersionHelper.java
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/rest/MediaType.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/rest/MediaType.java
new file mode 100644
index 0000000000..1ab765a905
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/rest/MediaType.java
@@ -0,0 +1,41 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.api.rest;
+
+public final class MediaType {
+
+ public final static String ALL = "*/*";
+ public final static String APPLICATION_ATOM_XML = "application/atom+xml";
+ public final static String APPLICATION_RSS_XML = "application/rss+xml";
+ public final static String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded";
+ public final static String APPLICATION_JSON = "application/json";
+ public final static String APPLICATION_OCTET_STREAM = "application/octet-stream";
+ public final static String APPLICATION_XHTML_XML = "application/xhtml+xml";
+ public final static String IMAGE_GIF = "image/gif";
+ public final static String IMAGE_JPEG = "image/jpeg";
+ public final static String IMAGE_PNG = "image/png";
+ public final static String APPLICATION_XML = "application/xml";
+ public final static String APPLICATION_WILDCARD_XML = "application/*+xml";
+ public final static String MULTIPART_FORM_DATA = "multipart/form-data";
+ public final static String TEXT_HTML = "text/html";
+ public final static String TEXT_PLAIN = "text/plain";
+ public final static String TEXT_XML = "text/xml";
+
+ private MediaType() {
+
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/EditorHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/EditorHelper.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/EditorHelper.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/EditorHelper.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java
similarity index 97%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java
index eeb4ea5420..e1d0f5c554 100644
--- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java
@@ -25,7 +25,7 @@
* Reflection utils to call SharedPreferences$Editor.apply when possible,
* falling back to commit when apply isn't available.
*/
-abstract class SharedPreferencesCompat {
+public abstract class SharedPreferencesCompat {
private SharedPreferencesCompat() {
}
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesHelper.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesHelper.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesHelper.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefEditorField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefEditorField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefEditorField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefEditorField.java
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefField.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefField.java
similarity index 100%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefField.java
rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefField.java
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java
new file mode 100644
index 0000000000..fa85b7bf91
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Set;
+
+import javax.annotation.processing.Filer;
+import javax.lang.model.element.Element;
+import javax.tools.JavaFileObject;
+
+import org.androidannotations.processing.OriginatingElements;
+
+public class ApiCodeGenerator {
+
+ private static final byte[] BUFFER = new byte[4096];
+
+ private static void copyStream(InputStream input, OutputStream output) throws IOException {
+ int read;
+ while ((read = input.read(BUFFER)) != -1) {
+ output.write(BUFFER, 0, read);
+ }
+ }
+
+ private final Filer filer;
+
+ public ApiCodeGenerator(Filer filer) {
+ this.filer = filer;
+ }
+
+ public void writeApiClasses(Set> apiClassesToGenerate, OriginatingElements originatingElements) {
+
+ for (Class> apiClassToGenerate : apiClassesToGenerate) {
+
+ String canonicalApiClassName = apiClassToGenerate.getCanonicalName();
+
+ String apiClassFileName = canonicalApiClassName.replace(".", "/") + ".java";
+
+ InputStream apiClassStream = getClass().getClassLoader().getResourceAsStream(apiClassFileName);
+ try {
+
+ if (apiClassStream == null) {
+ /*
+ * This happens when in AA dev environment, when the
+ * processor classes are not coming from a jar
+ */
+ apiClassStream = getClass().getClassLoader().getResourceAsStream('/' + apiClassFileName);
+ }
+
+ Element[] apiClassOriginatingElements = originatingElements.getClassOriginatingElements(canonicalApiClassName);
+
+ JavaFileObject targetedClassFile;
+ if (apiClassOriginatingElements == null) {
+ targetedClassFile = filer.createSourceFile(canonicalApiClassName);
+ } else {
+ targetedClassFile = filer.createSourceFile(canonicalApiClassName, apiClassOriginatingElements);
+ }
+
+ OutputStream classFileOutputStream = targetedClassFile.openOutputStream();
+ copyStream(apiClassStream, classFileOutputStream);
+ classFileOutputStream.close();
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java
index 2ef6e35225..59a2d46a14 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java
@@ -21,6 +21,7 @@
import javax.annotation.processing.Messager;
import org.androidannotations.processing.ModelProcessor.ProcessResult;
+
import com.sun.codemodel.writer.PrologCodeWriter;
public class CodeModelGenerator {
@@ -35,11 +36,13 @@ public CodeModelGenerator(Filer filer, Messager messager) {
public void generate(ProcessResult processResult) throws IOException {
- SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsByGeneratedClassQualifiedName);
+ ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer);
+ apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElements);
+
+ SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElements);
PrologCodeWriter prologCodeWriter = new PrologCodeWriter(sourceCodeWriter, "DO NOT EDIT THIS FILE, IT HAS BEEN GENERATED USING AndroidAnnotations.\n");
processResult.codeModel.build(prologCodeWriter, new ResourceCodeWriter(filer));
}
-
}
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java
index 36227c52da..554bec9d76 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java
@@ -17,7 +17,6 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.util.Map;
import javax.annotation.processing.Filer;
import javax.annotation.processing.FilerException;
@@ -26,6 +25,8 @@
import javax.tools.Diagnostic.Kind;
import javax.tools.JavaFileObject;
+import org.androidannotations.processing.OriginatingElements;
+
import com.sun.codemodel.CodeWriter;
import com.sun.codemodel.JPackage;
@@ -35,7 +36,7 @@ public class SourceCodewriter extends CodeWriter {
private final Messager message;
private static final VoidOutputStream VOID_OUTPUT_STREAM = new VoidOutputStream();
- private Map originatingElementsByGeneratedClassQualifiedName;
+ private OriginatingElements originatingElements;
private static class VoidOutputStream extends OutputStream {
@Override
@@ -44,10 +45,10 @@ public void write(int arg0) throws IOException {
}
}
- public SourceCodewriter(Filer filer, Messager message, Map originatingElementsByGeneratedClassQualifiedName) {
+ public SourceCodewriter(Filer filer, Messager message, OriginatingElements originatingElements) {
this.filer = filer;
this.message = message;
- this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName;
+ this.originatingElements = originatingElements;
}
@Override
@@ -55,17 +56,17 @@ public OutputStream openBinary(JPackage pkg, String fileName) throws IOException
String qualifiedClassName = toQualifiedClassName(pkg, fileName);
message.printMessage(Kind.NOTE, "Generating source file: " + qualifiedClassName);
- Element originatingElement = originatingElementsByGeneratedClassQualifiedName.get(qualifiedClassName);
+ Element[] classOriginatingElements = originatingElements.getClassOriginatingElements(qualifiedClassName);
try {
JavaFileObject sourceFile;
- if (originatingElement != null) {
- sourceFile = filer.createSourceFile(qualifiedClassName, originatingElement);
- } else {
+
+ if (classOriginatingElements.length == 0) {
message.printMessage(Kind.NOTE, "Generating class with no originating element: " + qualifiedClassName);
- sourceFile = filer.createSourceFile(qualifiedClassName);
}
+ sourceFile = filer.createSourceFile(qualifiedClassName, classOriginatingElements);
+
return sourceFile.openOutputStream();
} catch (FilerException e) {
message.printMessage(Kind.NOTE, "Could not generate source file for " + qualifiedClassName + ", message: " + e.getMessage());
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java
index 742290944f..3caf134b0d 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java
@@ -23,6 +23,7 @@
import org.androidannotations.annotations.Background;
import org.androidannotations.api.BackgroundExecutor;
import org.androidannotations.helper.APTCodeModelHelper;
+
import com.sun.codemodel.JClass;
import com.sun.codemodel.JClassAlreadyExistsException;
import com.sun.codemodel.JCodeModel;
@@ -45,6 +46,8 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) t
ExecutableElement executableElement = (ExecutableElement) element;
+ holder.generateApiClass(element, BackgroundExecutor.class);
+
JMethod delegatingMethod = helper.overrideAnnotatedMethod(executableElement, holder);
JDefinedClass anonymousRunnableClass = helper.createDelegatingAnonymousRunnableClass(holder, delegatingMethod);
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java
index ac8febafce..9dcd44e49e 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java
@@ -15,11 +15,11 @@
*/
package org.androidannotations.processing;
-import static org.androidannotations.helper.GreenDroidConstants.GREENDROID_ACTIVITIES_LIST_CLASS;
import static com.sun.codemodel.JExpr._super;
import static com.sun.codemodel.JExpr._this;
import static com.sun.codemodel.JMod.PRIVATE;
import static com.sun.codemodel.JMod.PUBLIC;
+import static org.androidannotations.helper.GreenDroidConstants.GREENDROID_ACTIVITIES_LIST_CLASS;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
@@ -41,6 +41,7 @@
import org.androidannotations.helper.ModelConstants;
import org.androidannotations.rclass.IRClass;
import org.androidannotations.rclass.IRClass.Res;
+
import com.sun.codemodel.ClassType;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
@@ -167,7 +168,11 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo
setContentViewMethod(setContentViewMethodName, codeModel, holder, new JType[] { holder.classes().VIEW }, new String[] { "view" });
// Handling onBackPressed
- if (hasOnBackPressedMethod(typeElement)) {
+ Element declaredOnBackPressedMethod = getOnBackPressedMethod(typeElement);
+ if (declaredOnBackPressedMethod != null) {
+
+ eBeansHolder.generateApiClass(declaredOnBackPressedMethod, SdkVersionHelper.class);
+
JMethod onKeyDownMethod = holder.generatedClass.method(PUBLIC, codeModel.BOOLEAN, "onKeyDown");
onKeyDownMethod.annotate(Override.class);
JVar keyCodeParam = onKeyDownMethod.param(codeModel.INT, "keyCode");
@@ -215,7 +220,7 @@ private void setContentViewMethod(String setContentViewMethodName, JCodeModel co
body.invoke(holder.afterSetContentView);
}
- private boolean hasOnBackPressedMethod(TypeElement activityElement) {
+ private ExecutableElement getOnBackPressedMethod(TypeElement activityElement) {
List extends Element> allMembers = annotationHelper.getElementUtils().getAllMembers(activityElement);
@@ -223,10 +228,10 @@ private boolean hasOnBackPressedMethod(TypeElement activityElement) {
for (ExecutableElement activityInheritedMethod : activityInheritedMethods) {
if (isCustomOnBackPressedMethod(activityInheritedMethod)) {
- return true;
+ return activityInheritedMethod;
}
}
- return false;
+ return null;
}
private boolean isCustomOnBackPressedMethod(ExecutableElement method) {
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
index 30b815c620..62dbeb33a6 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
@@ -18,9 +18,12 @@
import java.lang.annotation.Annotation;
import java.util.HashMap;
+import javax.lang.model.element.Element;
+
import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.EViewGroup;
import org.androidannotations.processing.EBeansHolder.Classes;
+
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JCase;
import com.sun.codemodel.JClass;
@@ -137,4 +140,8 @@ public JClass refClass(Class> clazz) {
return eBeansHolder.refClass(clazz);
}
+ public void generateApiClass(Element originatingElement, Class> apiClass) {
+ eBeansHolder.generateApiClass(originatingElement, apiClass);
+ }
+
}
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanProcessor.java
index f0763a45d7..058c738739 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanProcessor.java
@@ -15,7 +15,6 @@
*/
package org.androidannotations.processing;
-import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX;
import static com.sun.codemodel.JExpr._new;
import static com.sun.codemodel.JExpr._null;
import static com.sun.codemodel.JExpr.cast;
@@ -23,6 +22,7 @@
import static com.sun.codemodel.JMod.PRIVATE;
import static com.sun.codemodel.JMod.PUBLIC;
import static com.sun.codemodel.JMod.STATIC;
+import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX;
import java.lang.annotation.Annotation;
import java.util.List;
@@ -33,9 +33,9 @@
import javax.lang.model.util.ElementFilter;
import org.androidannotations.annotations.EBean;
-import org.androidannotations.api.Scope;
import org.androidannotations.helper.APTCodeModelHelper;
import org.androidannotations.processing.EBeansHolder.Classes;
+
import com.sun.codemodel.ClassType;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
@@ -142,8 +142,8 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo
}
EBean eBeanAnnotation = element.getAnnotation(EBean.class);
- Scope eBeanScope = eBeanAnnotation.scope();
- boolean hasSingletonScope = eBeanScope == Scope.Singleton;
+ EBean.Scope eBeanScope = eBeanAnnotation.scope();
+ boolean hasSingletonScope = eBeanScope == EBean.Scope.Singleton;
{
// Factory method
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java
index 1d2e457976..090d001e82 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java
@@ -21,11 +21,14 @@
import java.lang.annotation.Annotation;
import java.sql.SQLException;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import javax.lang.model.element.Element;
import org.androidannotations.helper.CanonicalNameConstants;
+
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
@@ -144,7 +147,9 @@ public class Classes {
private final Classes classes;
- private final Map originatingElementsByGeneratedClassQualifiedName = new HashMap();
+ private final Set> apiClassesToGenerate = new HashSet>();
+
+ private final OriginatingElements originatingElements = new OriginatingElements();
public EBeansHolder(JCodeModel codeModel) {
this.codeModel = codeModel;
@@ -161,7 +166,8 @@ private void preloadJavaLangClasses() {
public EBeanHolder create(Element element, Class extends Annotation> eBeanAnnotation, JDefinedClass generatedClass) {
String qualifiedName = generatedClass.fullName();
- originatingElementsByGeneratedClassQualifiedName.put(qualifiedName, element);
+
+ originatingElements.add(qualifiedName, element);
EBeanHolder activityHolder = new EBeanHolder(this, eBeanAnnotation, generatedClass);
eBeanHolders.put(element, activityHolder);
@@ -206,8 +212,17 @@ public Classes classes() {
return classes;
}
- public Map getOriginatingElementsByGeneratedClassQualifiedName() {
- return originatingElementsByGeneratedClassQualifiedName;
+ public OriginatingElements getOriginatingElements() {
+ return originatingElements;
+ }
+
+ public Set> getApiClassesToGenerate() {
+ return apiClassesToGenerate;
+ }
+
+ public void generateApiClass(Element originatingElement, Class> apiClass) {
+ originatingElements.add(apiClass.getCanonicalName(), originatingElement);
+ apiClassesToGenerate.add(apiClass);
}
}
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java
index b81682ab43..687d9cf6db 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java
@@ -18,7 +18,6 @@
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import javax.lang.model.element.Element;
@@ -28,17 +27,25 @@
import org.androidannotations.model.AnnotationElements;
import org.androidannotations.model.AnnotationElements.AnnotatedAndRootElements;
+
import com.sun.codemodel.JCodeModel;
public class ModelProcessor {
public static class ProcessResult {
+
public final JCodeModel codeModel;
- public final Map originatingElementsByGeneratedClassQualifiedName;
+ public final OriginatingElements originatingElements;
+ public final Set> apiClassesToGenerate;
+
+ public ProcessResult(//
+ JCodeModel codeModel, //
+ OriginatingElements originatingElements, //
+ Set> apiClassesToGenerate) {
- public ProcessResult(JCodeModel codeModel, Map originatingElementsByGeneratedClassQualifiedName) {
this.codeModel = codeModel;
- this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName;
+ this.originatingElements = originatingElements;
+ this.apiClassesToGenerate = apiClassesToGenerate;
}
}
@@ -89,7 +96,6 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception
if (annotatedElement instanceof TypeElement) {
enclosingElement = annotatedElement;
} else {
-
enclosingElement = annotatedElement.getEnclosingElement();
}
@@ -120,7 +126,10 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception
}
}
- return new ProcessResult(codeModel, eBeansHolder.getOriginatingElementsByGeneratedClassQualifiedName());
+ return new ProcessResult(//
+ codeModel, //
+ eBeansHolder.getOriginatingElements(), //
+ eBeansHolder.getApiClassesToGenerate());
}
private boolean isAbstractClass(Element annotatedElement) {
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java
new file mode 100644
index 0000000000..a14e8c7789
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.processing;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.lang.model.element.Element;
+
+public class OriginatingElements {
+
+ private final Map> originatingElementsByClassName = new HashMap>();
+
+ public void add(String qualifiedName, Element element) {
+ List originatingElements = originatingElementsByClassName.get(qualifiedName);
+ if (originatingElements == null) {
+ originatingElements = new ArrayList();
+ originatingElementsByClassName.put(qualifiedName, originatingElements);
+ }
+ originatingElements.add(element);
+ }
+
+ public Element[] getClassOriginatingElements(String className) {
+ List originatingElements = originatingElementsByClassName.get(className);
+ if (originatingElements == null) {
+ return new Element[0];
+ } else {
+ return originatingElements.toArray(new Element[originatingElements.size()]);
+ }
+ }
+}
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java
index b34d0dfc9f..61f3608c7a 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java
@@ -38,6 +38,8 @@
import org.androidannotations.annotations.sharedpreferences.DefaultString;
import org.androidannotations.annotations.sharedpreferences.SharedPref;
import org.androidannotations.annotations.sharedpreferences.SharedPref.Scope;
+import org.androidannotations.api.sharedpreferences.AbstractPrefEditorField;
+import org.androidannotations.api.sharedpreferences.AbstractPrefField;
import org.androidannotations.api.sharedpreferences.BooleanPrefEditorField;
import org.androidannotations.api.sharedpreferences.BooleanPrefField;
import org.androidannotations.api.sharedpreferences.EditorHelper;
@@ -47,10 +49,12 @@
import org.androidannotations.api.sharedpreferences.IntPrefField;
import org.androidannotations.api.sharedpreferences.LongPrefEditorField;
import org.androidannotations.api.sharedpreferences.LongPrefField;
+import org.androidannotations.api.sharedpreferences.SharedPreferencesCompat;
import org.androidannotations.api.sharedpreferences.SharedPreferencesHelper;
import org.androidannotations.api.sharedpreferences.StringPrefEditorField;
import org.androidannotations.api.sharedpreferences.StringPrefField;
import org.androidannotations.helper.ModelConstants;
+
import com.sun.codemodel.ClassType;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
@@ -93,8 +97,9 @@ public Class extends Annotation> getTarget() {
@Override
public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHolder) throws Exception {
- TypeElement typeElement = (TypeElement) element;
+ generateApiClass(element, eBeansHolder);
+ TypeElement typeElement = (TypeElement) element;
String interfaceQualifiedName = typeElement.getQualifiedName().toString();
String interfaceSimpleName = typeElement.getSimpleName().toString();
@@ -270,4 +275,22 @@ private JMethod getLocalClassName(EBeansHolder eBeansHolder, JDefinedClass helpe
return getLocalClassName;
}
+
+ private void generateApiClass(Element originatingElement, EBeansHolder eBeansHolder) {
+ eBeansHolder.generateApiClass(originatingElement, AbstractPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, AbstractPrefField.class);
+ eBeansHolder.generateApiClass(originatingElement, BooleanPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, BooleanPrefField.class);
+ eBeansHolder.generateApiClass(originatingElement, EditorHelper.class);
+ eBeansHolder.generateApiClass(originatingElement, FloatPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, FloatPrefField.class);
+ eBeansHolder.generateApiClass(originatingElement, IntPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, IntPrefField.class);
+ eBeansHolder.generateApiClass(originatingElement, LongPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, LongPrefField.class);
+ eBeansHolder.generateApiClass(originatingElement, SharedPreferencesCompat.class);
+ eBeansHolder.generateApiClass(originatingElement, SharedPreferencesHelper.class);
+ eBeansHolder.generateApiClass(originatingElement, StringPrefEditorField.class);
+ eBeansHolder.generateApiClass(originatingElement, StringPrefField.class);
+ }
}
diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java
similarity index 67%
rename from AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java
rename to AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java
index c632d0a2c0..2cdbfb2191 100644
--- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java
@@ -13,19 +13,19 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.androidannotations.api;
+package org.androidannotations.generation;
-public enum Scope {
+import org.androidannotations.annotations.Background;
+import org.androidannotations.annotations.EActivity;
- /**
- * A new instance of the bean is created each time it is needed
- */
- Default, //
+import android.app.Activity;
+
+@EActivity
+public class ActivityWithBackgroundMethod extends Activity {
+
+ @Background
+ public void executingOnBackground() {
+
+ }
- /**
- * A new instance of the bean is created the first time it is needed, it is
- * then retained and the same instance is always returned.
- */
- Singleton, //
- ;
}
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java
new file mode 100644
index 0000000000..1b402b4a07
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java
@@ -0,0 +1,28 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import org.androidannotations.annotations.EActivity;
+
+import android.app.Activity;
+
+@EActivity
+public class ActivityWithOnBackPressedMethod extends Activity {
+
+ public void onBackPressed() {
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java
new file mode 100644
index 0000000000..76e3a29c8a
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import java.io.IOException;
+
+import org.androidannotations.AndroidAnnotationProcessor;
+import org.androidannotations.api.SdkVersionHelper;
+import org.androidannotations.utils.AAProcessorTestHelper;
+import org.junit.Before;
+import org.junit.Test;
+
+public class OnBackPressedApiDependenciesTest extends AAProcessorTestHelper {
+
+ @Before
+ public void setup() {
+ addManifestProcessorParameter(OnBackPressedApiDependenciesTest.class);
+ addProcessor(AndroidAnnotationProcessor.class);
+ ensureOutputDirectoryIsEmpty();
+ }
+
+ @Test
+ public void activity_with_on_back_pressed_generate_api_dependency() throws IOException {
+ CompileResult result = compileFiles(ActivityWithOnBackPressedMethod.class);
+ assertClassSourcesGeneratedToOutput(SdkVersionHelper.class);
+ assertCompilationSuccessful(result);
+ }
+
+ @Test
+ public void activity_without_on_back_pressed_do_not_generate_api_dependency() throws IOException {
+ CompileResult result = compileFiles(ActivityWithBackgroundMethod.class);
+ assertClassSourcesNotGeneratedToOutput(SdkVersionHelper.class);
+ assertCompilationSuccessful(result);
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackgroundApiDependenciesTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackgroundApiDependenciesTest.java
new file mode 100644
index 0000000000..b55e82c1e2
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackgroundApiDependenciesTest.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import java.io.IOException;
+
+import org.androidannotations.AndroidAnnotationProcessor;
+import org.androidannotations.api.BackgroundExecutor;
+import org.androidannotations.utils.AAProcessorTestHelper;
+import org.junit.Before;
+import org.junit.Test;
+
+public class OnBackgroundApiDependenciesTest extends AAProcessorTestHelper {
+
+ @Before
+ public void setup() {
+ addManifestProcessorParameter(OnBackgroundApiDependenciesTest.class);
+ addProcessor(AndroidAnnotationProcessor.class);
+ ensureOutputDirectoryIsEmpty();
+ }
+
+ @Test
+ public void activity_with_background_annotated_method_generate_api_dependency() throws IOException {
+ CompileResult result = compileFiles(ActivityWithBackgroundMethod.class);
+ assertClassSourcesGeneratedToOutput(BackgroundExecutor.class);
+ assertCompilationSuccessful(result);
+ }
+
+ @Test
+ public void activity_without_background_annotated_method_generate_api_dependency() throws IOException {
+ CompileResult result = compileFiles(ActivityWithOnBackPressedMethod.class);
+ assertClassSourcesNotGeneratedToOutput(BackgroundExecutor.class);
+ assertCompilationSuccessful(result);
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java
new file mode 100644
index 0000000000..6fde4e6e2b
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java
@@ -0,0 +1,36 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import org.androidannotations.annotations.sharedpreferences.DefaultInt;
+import org.androidannotations.annotations.sharedpreferences.DefaultString;
+import org.androidannotations.annotations.sharedpreferences.SharedPref;
+
+@SharedPref
+public interface SharedPrefs {
+
+ // The field name will have default value "John"
+ @DefaultString("John")
+ String name();
+
+ // The field age will have default value 42
+ @DefaultInt(42)
+ int age();
+
+ // The field lastUpdated will have default value 0
+ long lastUpdated();
+
+}
\ No newline at end of file
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefsApiDependenciesTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefsApiDependenciesTest.java
new file mode 100644
index 0000000000..f4698dd5ad
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefsApiDependenciesTest.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (C) 2010-2012 eBusiness Information, Excilys Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed To in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.androidannotations.generation;
+
+import java.io.IOException;
+
+import org.androidannotations.AndroidAnnotationProcessor;
+import org.androidannotations.api.sharedpreferences.AbstractPrefEditorField;
+import org.androidannotations.api.sharedpreferences.AbstractPrefField;
+import org.androidannotations.api.sharedpreferences.BooleanPrefEditorField;
+import org.androidannotations.api.sharedpreferences.BooleanPrefField;
+import org.androidannotations.api.sharedpreferences.EditorHelper;
+import org.androidannotations.api.sharedpreferences.FloatPrefEditorField;
+import org.androidannotations.api.sharedpreferences.FloatPrefField;
+import org.androidannotations.api.sharedpreferences.IntPrefEditorField;
+import org.androidannotations.api.sharedpreferences.IntPrefField;
+import org.androidannotations.api.sharedpreferences.LongPrefEditorField;
+import org.androidannotations.api.sharedpreferences.LongPrefField;
+import org.androidannotations.api.sharedpreferences.SharedPreferencesCompat;
+import org.androidannotations.api.sharedpreferences.SharedPreferencesHelper;
+import org.androidannotations.api.sharedpreferences.StringPrefEditorField;
+import org.androidannotations.api.sharedpreferences.StringPrefField;
+import org.androidannotations.manifest.SomeClass;
+import org.androidannotations.utils.AAProcessorTestHelper;
+import org.junit.Before;
+import org.junit.Test;
+
+public class SharedPrefsApiDependenciesTest extends AAProcessorTestHelper {
+
+ private static final Class>[] SHARED_PREF_API_DEPENDENCIES = new Class>[] { AbstractPrefEditorField.class,//
+ AbstractPrefField.class,//
+ BooleanPrefEditorField.class,//
+ BooleanPrefField.class,//
+ EditorHelper.class,//
+ FloatPrefEditorField.class,//
+ FloatPrefField.class,//
+ IntPrefEditorField.class,//
+ IntPrefField.class,//
+ LongPrefEditorField.class,//
+ LongPrefField.class,//
+ SharedPreferencesCompat.class,//
+ SharedPreferencesHelper.class,//
+ StringPrefEditorField.class,//
+ StringPrefField.class //
+ };
+
+ @Before
+ public void setup() {
+ addManifestProcessorParameter(SharedPrefsApiDependenciesTest.class);
+ addProcessor(AndroidAnnotationProcessor.class);
+ ensureOutputDirectoryIsEmpty();
+ }
+
+ @Test
+ public void shared_prefs_generate_api_dependencies() throws IOException {
+ compileFiles(SharedPrefs.class);
+ for (Class> apiDependency : SHARED_PREF_API_DEPENDENCIES) {
+ assertClassSourcesGeneratedToOutput(apiDependency);
+ }
+ }
+
+ @Test
+ public void class_without_prefs_do_not_generate_api_dependencies() throws IOException {
+ compileFiles(SomeClass.class);
+ for (Class> apiDependency : SHARED_PREF_API_DEPENDENCIES) {
+ assertClassSourcesNotGeneratedToOutput(apiDependency);
+ }
+ }
+
+}
diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ProcessorTestHelper.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ProcessorTestHelper.java
index 4980cfe9b6..0cf057a9be 100644
--- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ProcessorTestHelper.java
+++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ProcessorTestHelper.java
@@ -68,6 +68,31 @@ public static void assertOutput(File expectedResult, File output) {
}
}
+ public static void assertClassSourcesGeneratedToOutput(Class> clazz) {
+
+ String canonicalName = clazz.getCanonicalName();
+ String filePath = canonicalName.replace(".", "/").concat(".java");
+
+ File generatedSourcesDir = new File(OUTPUT_DIRECTORY);
+ File generatedSourceFile = new File(generatedSourcesDir, filePath);
+
+ File sourcesDir = new File(MAIN_SOURCE_FOLDER);
+ File expectedResult = new File(sourcesDir, filePath);
+
+ assertOutput(expectedResult, generatedSourceFile);
+ }
+
+ public static void assertClassSourcesNotGeneratedToOutput(Class> clazz) {
+
+ String canonicalName = clazz.getCanonicalName();
+ String filePath = canonicalName.replace(".", "/").concat(".java");
+
+ File generatedSourcesDir = new File(OUTPUT_DIRECTORY);
+ File output = new File(generatedSourcesDir, filePath);
+
+ assertFalse(output.exists());
+ }
+
public static void assertCompilationSuccessful(CompileResult result) {
for (Diagnostic extends JavaFileObject> diagnostic : result.diagnostics) {
assertFalse("Expected no errors, found " + diagnostic, diagnostic.getKind().equals(Kind.ERROR));
@@ -244,12 +269,37 @@ public void assertCompilationWarningOn(Class> expectedErrorClass, String expec
}
private File ensureOutputDirectory() {
- File file = new File(OUTPUT_DIRECTORY);
- if (!file.exists()) {
- file.mkdirs();
+ File outputDir = new File(OUTPUT_DIRECTORY);
+ if (!outputDir.exists()) {
+ outputDir.mkdirs();
}
- return file;
+ return outputDir;
+ }
+
+ public void ensureOutputDirectoryIsEmpty() {
+ File outputDir = new File(OUTPUT_DIRECTORY);
+
+ String[] childs = outputDir.list();
+
+ if (childs != null && childs.length > 0) {
+ deleteDirectoryRecursively(outputDir);
+ outputDir.mkdirs();
+ }
+ }
+
+ private void deleteDirectoryRecursively(File directory) {
+ File[] childs = directory.listFiles();
+ if (childs != null) {
+ for (File file : childs) {
+ if (file.isDirectory()) {
+ deleteDirectoryRecursively(file);
+ } else {
+ file.delete();
+ }
+ }
+ }
+ directory.delete();
}
private void addCollection(List files, Collection compilationUnits) {
diff --git a/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml b/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml
new file mode 100644
index 0000000000..01cc00b674
--- /dev/null
+++ b/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ebean/SomeSingleton.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ebean/SomeSingleton.java
index 2ed5458bcd..cd3d4e1724 100644
--- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ebean/SomeSingleton.java
+++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ebean/SomeSingleton.java
@@ -15,14 +15,13 @@
*/
package org.androidannotations.test15.ebean;
-import static org.androidannotations.api.Scope.Singleton;
-
-import android.content.Context;
-
import org.androidannotations.annotations.EBean;
+import org.androidannotations.annotations.EBean.Scope;
import org.androidannotations.annotations.RootContext;
-@EBean(scope = Singleton)
+import android.content.Context;
+
+@EBean(scope = Scope.Singleton)
public class SomeSingleton {
@RootContext