From c8c6c5ae3d731ddfb421e6c51c2ab2fde0679385 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Sat, 24 Nov 2012 16:24:34 +0100 Subject: [PATCH 01/12] Refactoring : Scope is now declared as an inner class of EBean. ** This change make the future release non backward compatible ** --- .../androidannotations/annotations/EBean.java | 16 ++++++++-- .../org/androidannotations/api/Scope.java | 31 ------------------- 2 files changed, 14 insertions(+), 33 deletions(-) delete mode 100644 AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java 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/api/Scope.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java deleted file mode 100644 index c632d0a2c0..0000000000 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/api/Scope.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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; - -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, // - ; -} From 556da4897ecd5ef567c06a43654d42420fab7b76 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Sat, 24 Nov 2012 16:52:32 +0100 Subject: [PATCH 02/12] Helper classes previously contained in the api jar are now generated at compile time. --- .../META-INF/MANIFEST.MF | 4 +- .../annotations/sharedpreferences/Pref.java | 2 - AndroidAnnotations/androidannotations/pom.xml | 8 +- .../api/BackgroundExecutor.java | 0 .../api/SdkVersionHelper.java | 0 .../api/rest/MediaType.java | 41 ++++++++++ .../AbstractPrefEditorField.java | 0 .../sharedpreferences/AbstractPrefField.java | 0 .../BooleanPrefEditorField.java | 0 .../sharedpreferences/BooleanPrefField.java | 0 .../api/sharedpreferences/EditorHelper.java | 0 .../FloatPrefEditorField.java | 0 .../api/sharedpreferences/FloatPrefField.java | 0 .../sharedpreferences/IntPrefEditorField.java | 0 .../api/sharedpreferences/IntPrefField.java | 0 .../LongPrefEditorField.java | 0 .../api/sharedpreferences/LongPrefField.java | 0 .../SharedPreferencesCompat.java | 2 +- .../SharedPreferencesHelper.java | 0 .../StringPrefEditorField.java | 0 .../sharedpreferences/StringPrefField.java | 0 .../generation/ApiCodeGenerator.java | 79 +++++++++++++++++++ .../generation/CodeModelGenerator.java | 4 +- .../generation/SourceCodewriter.java | 11 +-- .../processing/BackgroundProcessor.java | 3 + .../processing/EActivityProcessor.java | 15 ++-- .../processing/EBeanHolder.java | 7 ++ .../processing/EBeanProcessor.java | 8 +- .../processing/EBeansHolder.java | 32 +++++++- .../processing/ModelProcessor.java | 18 ++++- .../processing/SharedPrefProcessor.java | 25 +++++- .../test15/ebean/SomeSingleton.java | 9 +-- 32 files changed, 233 insertions(+), 35 deletions(-) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/BackgroundExecutor.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/SdkVersionHelper.java (100%) create mode 100644 AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/rest/MediaType.java rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/AbstractPrefField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/BooleanPrefField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/EditorHelper.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/FloatPrefField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/IntPrefField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/LongPrefField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesCompat.java (97%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/SharedPreferencesHelper.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefEditorField.java (100%) rename AndroidAnnotations/{androidannotations-api => androidannotations}/src/main/java/org/androidannotations/api/sharedpreferences/StringPrefField.java (100%) create mode 100644 AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java 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/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..095b020d9b --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -0,0 +1,79 @@ +package org.androidannotations.generation; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.processing.Filer; +import javax.annotation.processing.Messager; +import javax.lang.model.element.Element; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; + +public class ApiCodeGenerator { + + private final static byte[] BUFFER = new byte[4096]; + + private final Filer filer; + private final Messager messager; + + public ApiCodeGenerator(Filer filer, Messager messager) { + this.filer = filer; + this.messager = messager; + } + + public void writeApiClasses(Set> apiClassesToGenerate, Map> originatingElementsByGeneratedClassQualifiedName) { + + for (Class apiClassToGenerate : apiClassesToGenerate) { + + String cannonicalApiClassName = apiClassToGenerate.getCanonicalName(); + + String apiClassFileName = cannonicalApiClassName.replace(".", "/") + ".java"; + + InputStream apiClassStream = getClass().getClassLoader().getResourceAsStream(apiClassFileName); + try { + + if (apiClassStream == null) { + // It seems we are not executed into a jar. In this case, We + // have to add a magic '/' + apiClassStream = getClass().getClassLoader().getResourceAsStream('/' + apiClassFileName); + } + + if (apiClassStream == null) { + printError("Unable to retrive api sources from processor jar. Are you using the proper processor jar ? [searching:" + apiClassFileName + "]"); + } + + List originatingElements = originatingElementsByGeneratedClassQualifiedName.get(cannonicalApiClassName); + + JavaFileObject targetedClassFile; + if (originatingElements == null) { + targetedClassFile = filer.createSourceFile(cannonicalApiClassName); + } else { + targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements.toArray(new Element[originatingElements.size()])); + } + + OutputStream classFileOutputStream = targetedClassFile.openOutputStream(); + copyStream(apiClassStream, classFileOutputStream); + classFileOutputStream.close(); + + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + public static void copyStream(InputStream input, OutputStream output) throws IOException { + int read; + while ((read = input.read(BUFFER)) != -1) { + output.write(BUFFER, 0, read); + } + } + + private void printError(String message) { + messager.printMessage(Diagnostic.Kind.ERROR, message); + } + +} 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..4490f0ace3 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,12 @@ public CodeModelGenerator(Filer filer, Messager messager) { public void generate(ProcessResult processResult) throws IOException { + new ApiCodeGenerator(filer, messager).writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsByGeneratedClassQualifiedName); + SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsByGeneratedClassQualifiedName); 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..ecc4fc4178 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.List; import java.util.Map; import javax.annotation.processing.Filer; @@ -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 Map> originatingElementsByGeneratedClassQualifiedName; private static class VoidOutputStream extends OutputStream { @Override @@ -44,7 +45,7 @@ public void write(int arg0) throws IOException { } } - public SourceCodewriter(Filer filer, Messager message, Map originatingElementsByGeneratedClassQualifiedName) { + public SourceCodewriter(Filer filer, Messager message, Map> originatingElementsByGeneratedClassQualifiedName) { this.filer = filer; this.message = message; this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName; @@ -55,12 +56,12 @@ 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); + List originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedClassName); try { JavaFileObject sourceFile; - if (originatingElement != null) { - sourceFile = filer.createSourceFile(qualifiedClassName, originatingElement); + if (originatingElements != null) { + sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements.toArray(new Element[originatingElements.size()])); } else { message.printMessage(Kind.NOTE, "Generating class with no originating element: " + qualifiedClassName); sourceFile = filer.createSourceFile(qualifiedClassName); 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..e03b6d88ba 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.ensureApiClassIsGenerated(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..882700f7a3 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.ensureApiClassIsGenerated(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 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..5fcde89562 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 ensureApiClassIsGenerated(Element originatingElement, Class apiClass) { + eBeansHolder.ensureApiClassIsGenerated(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..1b374eb0bf 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java @@ -20,12 +20,17 @@ import java.io.Serializable; import java.lang.annotation.Annotation; import java.sql.SQLException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.List; 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 +149,9 @@ public class Classes { private final Classes classes; - private final Map originatingElementsByGeneratedClassQualifiedName = new HashMap(); + private final Map> originatingElementsByGeneratedClassQualifiedName = new HashMap>(); + + private final Set> apiClassesToGenerate = new HashSet>(); public EBeansHolder(JCodeModel codeModel) { this.codeModel = codeModel; @@ -161,13 +168,23 @@ private void preloadJavaLangClasses() { public EBeanHolder create(Element element, Class eBeanAnnotation, JDefinedClass generatedClass) { String qualifiedName = generatedClass.fullName(); - originatingElementsByGeneratedClassQualifiedName.put(qualifiedName, element); + + addAsOriginatingElement(qualifiedName, element); EBeanHolder activityHolder = new EBeanHolder(this, eBeanAnnotation, generatedClass); eBeanHolders.put(element, activityHolder); return activityHolder; } + private void addAsOriginatingElement(String qualifiedName, Element element) { + List originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedName); + if (originatingElements == null) { + originatingElements = new ArrayList(); + originatingElementsByGeneratedClassQualifiedName.put(qualifiedName, originatingElements); + } + originatingElements.add(element); + } + public EBeanHolder getEBeanHolder(Element element) { return eBeanHolders.get(element); } @@ -206,8 +223,17 @@ public Classes classes() { return classes; } - public Map getOriginatingElementsByGeneratedClassQualifiedName() { + public Map> getOriginatingElementsByGeneratedClassQualifiedName() { return originatingElementsByGeneratedClassQualifiedName; } + public Set> getApiClassesToGenerate() { + return apiClassesToGenerate; + } + + public void ensureApiClassIsGenerated(Element originatingElement, Class apiClass) { + addAsOriginatingElement(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..73c9ebd1bd 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java @@ -28,17 +28,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 Map> originatingElementsByGeneratedClassQualifiedName; + public final Set> apiClassesToGenerate; + + public ProcessResult(// + JCodeModel codeModel, // + Map> originatingElementsByGeneratedClassQualifiedName, // + Set> apiClassesToGenerate) { - public ProcessResult(JCodeModel codeModel, Map originatingElementsByGeneratedClassQualifiedName) { this.codeModel = codeModel; this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName; + this.apiClassesToGenerate = apiClassesToGenerate; } } @@ -89,7 +97,6 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception if (annotatedElement instanceof TypeElement) { enclosingElement = annotatedElement; } else { - enclosingElement = annotatedElement.getEnclosingElement(); } @@ -120,7 +127,10 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception } } - return new ProcessResult(codeModel, eBeansHolder.getOriginatingElementsByGeneratedClassQualifiedName()); + return new ProcessResult(// + codeModel, // + eBeansHolder.getOriginatingElementsByGeneratedClassQualifiedName(), // + eBeansHolder.getApiClassesToGenerate()); } private boolean isAbstractClass(Element annotatedElement) { 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..945cbc8237 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 getTarget() { @Override public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHolder) throws Exception { - TypeElement typeElement = (TypeElement) element; + ensureApiClassGenerated(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 ensureApiClassGenerated(Element originatingElement, EBeansHolder eBeansHolder) { + eBeansHolder.ensureApiClassIsGenerated(originatingElement, AbstractPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, AbstractPrefField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, BooleanPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, BooleanPrefField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, EditorHelper.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, FloatPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, FloatPrefField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, IntPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, IntPrefField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, LongPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, LongPrefField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, SharedPreferencesCompat.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, SharedPreferencesHelper.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, StringPrefEditorField.class); + eBeansHolder.ensureApiClassIsGenerated(originatingElement, StringPrefField.class); + } } 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 From 3906239569e919cf5a92854e0b5fde8dfb9083f7 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 06:37:09 +0100 Subject: [PATCH 03/12] Updated a comment --- .../org/androidannotations/generation/ApiCodeGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java index 095b020d9b..3970cfa38b 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -37,8 +37,8 @@ public void writeApiClasses(Set> apiClassesToGenerate, Map Date: Mon, 26 Nov 2012 06:37:58 +0100 Subject: [PATCH 04/12] Refactoring : removed dead code --- .../org/androidannotations/generation/ApiCodeGenerator.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java index 3970cfa38b..ba4d9478f7 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -42,10 +42,6 @@ public void writeApiClasses(Set> apiClassesToGenerate, Map originatingElements = originatingElementsByGeneratedClassQualifiedName.get(cannonicalApiClassName); JavaFileObject targetedClassFile; From c5bfe3e77528dbf83314e80411df281c1bea90bb Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 06:39:03 +0100 Subject: [PATCH 05/12] Refactoring: added a local variable. --- .../org/androidannotations/generation/CodeModelGenerator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 4490f0ace3..5a39f78e7a 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java @@ -36,7 +36,8 @@ public CodeModelGenerator(Filer filer, Messager messager) { public void generate(ProcessResult processResult) throws IOException { - new ApiCodeGenerator(filer, messager).writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsByGeneratedClassQualifiedName); + ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer, messager); + apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsByGeneratedClassQualifiedName); SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsByGeneratedClassQualifiedName); From 062753ab5e39a0e172d2ad617cb57d0035236eea Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 06:51:58 +0100 Subject: [PATCH 06/12] Refactoring : Rename method --- .../processing/BackgroundProcessor.java | 2 +- .../processing/EActivityProcessor.java | 2 +- .../processing/EBeanHolder.java | 4 +-- .../processing/EBeansHolder.java | 2 +- .../processing/SharedPrefProcessor.java | 34 +++++++++---------- 5 files changed, 22 insertions(+), 22 deletions(-) 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 e03b6d88ba..3caf134b0d 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java @@ -46,7 +46,7 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) t ExecutableElement executableElement = (ExecutableElement) element; - holder.ensureApiClassIsGenerated(element, BackgroundExecutor.class); + holder.generateApiClass(element, BackgroundExecutor.class); JMethod delegatingMethod = helper.overrideAnnotatedMethod(executableElement, holder); 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 882700f7a3..9dcd44e49e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EActivityProcessor.java @@ -171,7 +171,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHo Element declaredOnBackPressedMethod = getOnBackPressedMethod(typeElement); if (declaredOnBackPressedMethod != null) { - eBeansHolder.ensureApiClassIsGenerated(declaredOnBackPressedMethod, SdkVersionHelper.class); + eBeansHolder.generateApiClass(declaredOnBackPressedMethod, SdkVersionHelper.class); JMethod onKeyDownMethod = holder.generatedClass.method(PUBLIC, codeModel.BOOLEAN, "onKeyDown"); onKeyDownMethod.annotate(Override.class); 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 5fcde89562..62dbeb33a6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java @@ -140,8 +140,8 @@ public JClass refClass(Class clazz) { return eBeansHolder.refClass(clazz); } - public void ensureApiClassIsGenerated(Element originatingElement, Class apiClass) { - eBeansHolder.ensureApiClassIsGenerated(originatingElement, apiClass); + public void generateApiClass(Element originatingElement, Class apiClass) { + eBeansHolder.generateApiClass(originatingElement, apiClass); } } 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 1b374eb0bf..8b1a2bccd4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java @@ -231,7 +231,7 @@ public Set> getApiClassesToGenerate() { return apiClassesToGenerate; } - public void ensureApiClassIsGenerated(Element originatingElement, Class apiClass) { + public void generateApiClass(Element originatingElement, Class apiClass) { addAsOriginatingElement(apiClass.getCanonicalName(), originatingElement); apiClassesToGenerate.add(apiClass); } 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 945cbc8237..61f3608c7a 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/SharedPrefProcessor.java @@ -97,7 +97,7 @@ public Class getTarget() { @Override public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHolder) throws Exception { - ensureApiClassGenerated(element, eBeansHolder); + generateApiClass(element, eBeansHolder); TypeElement typeElement = (TypeElement) element; String interfaceQualifiedName = typeElement.getQualifiedName().toString(); @@ -276,21 +276,21 @@ private JMethod getLocalClassName(EBeansHolder eBeansHolder, JDefinedClass helpe return getLocalClassName; } - private void ensureApiClassGenerated(Element originatingElement, EBeansHolder eBeansHolder) { - eBeansHolder.ensureApiClassIsGenerated(originatingElement, AbstractPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, AbstractPrefField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, BooleanPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, BooleanPrefField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, EditorHelper.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, FloatPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, FloatPrefField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, IntPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, IntPrefField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, LongPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, LongPrefField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, SharedPreferencesCompat.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, SharedPreferencesHelper.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, StringPrefEditorField.class); - eBeansHolder.ensureApiClassIsGenerated(originatingElement, StringPrefField.class); + 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); } } From dba2eb0471bc3534c724a0107b2ffe720fc00ca7 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 07:43:18 +0100 Subject: [PATCH 07/12] Refactoring : Encapsuled the collection of originating elements. --- .../generation/ApiCodeGenerator.java | 10 +++--- .../generation/CodeModelGenerator.java | 4 +-- .../generation/SourceCodewriter.java | 20 ++++++------ .../processing/EBeansHolder.java | 23 ++++---------- .../processing/ModelProcessor.java | 9 +++--- .../processing/OriginatingElementsHolder.java | 31 +++++++++++++++++++ 6 files changed, 58 insertions(+), 39 deletions(-) create mode 100644 AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.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 index ba4d9478f7..92743d9361 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -3,8 +3,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.List; -import java.util.Map; import java.util.Set; import javax.annotation.processing.Filer; @@ -13,6 +11,8 @@ import javax.tools.Diagnostic; import javax.tools.JavaFileObject; +import org.androidannotations.processing.OriginatingElementsHolder; + public class ApiCodeGenerator { private final static byte[] BUFFER = new byte[4096]; @@ -25,7 +25,7 @@ public ApiCodeGenerator(Filer filer, Messager messager) { this.messager = messager; } - public void writeApiClasses(Set> apiClassesToGenerate, Map> originatingElementsByGeneratedClassQualifiedName) { + public void writeApiClasses(Set> apiClassesToGenerate, OriginatingElementsHolder originatingElementsHolder) { for (Class apiClassToGenerate : apiClassesToGenerate) { @@ -42,13 +42,13 @@ public void writeApiClasses(Set> apiClassesToGenerate, Map originatingElements = originatingElementsByGeneratedClassQualifiedName.get(cannonicalApiClassName); + Element[] originatingElements = originatingElementsHolder.getOriginatingElements(cannonicalApiClassName); JavaFileObject targetedClassFile; if (originatingElements == null) { targetedClassFile = filer.createSourceFile(cannonicalApiClassName); } else { - targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements.toArray(new Element[originatingElements.size()])); + targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements); } OutputStream classFileOutputStream = targetedClassFile.openOutputStream(); 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 5a39f78e7a..6f7d893c02 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java @@ -37,9 +37,9 @@ public CodeModelGenerator(Filer filer, Messager messager) { public void generate(ProcessResult processResult) throws IOException { ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer, messager); - apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsByGeneratedClassQualifiedName); + apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsHolder); - SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsByGeneratedClassQualifiedName); + SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsHolder); PrologCodeWriter prologCodeWriter = new PrologCodeWriter(sourceCodeWriter, "DO NOT EDIT THIS FILE, IT HAS BEEN GENERATED USING AndroidAnnotations.\n"); 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 ecc4fc4178..0ef929d3c6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java @@ -17,8 +17,6 @@ import java.io.IOException; import java.io.OutputStream; -import java.util.List; -import java.util.Map; import javax.annotation.processing.Filer; import javax.annotation.processing.FilerException; @@ -27,6 +25,8 @@ import javax.tools.Diagnostic.Kind; import javax.tools.JavaFileObject; +import org.androidannotations.processing.OriginatingElementsHolder; + import com.sun.codemodel.CodeWriter; import com.sun.codemodel.JPackage; @@ -36,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 OriginatingElementsHolder originatingElementsHolder; private static class VoidOutputStream extends OutputStream { @Override @@ -45,10 +45,10 @@ public void write(int arg0) throws IOException { } } - public SourceCodewriter(Filer filer, Messager message, Map> originatingElementsByGeneratedClassQualifiedName) { + public SourceCodewriter(Filer filer, Messager message, OriginatingElementsHolder originatingElementsHolder) { this.filer = filer; this.message = message; - this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName; + this.originatingElementsHolder = originatingElementsHolder; } @Override @@ -56,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); - List originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedClassName); + Element[] originatingElements = originatingElementsHolder.getOriginatingElements(qualifiedClassName); try { JavaFileObject sourceFile; - if (originatingElements != null) { - sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements.toArray(new Element[originatingElements.size()])); - } else { + + if (originatingElements.length == 0) { message.printMessage(Kind.NOTE, "Generating class with no originating element: " + qualifiedClassName); - sourceFile = filer.createSourceFile(qualifiedClassName); } + sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements); + 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/EBeansHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java index 8b1a2bccd4..05614c85f9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java @@ -20,10 +20,8 @@ import java.io.Serializable; import java.lang.annotation.Annotation; import java.sql.SQLException; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -149,10 +147,10 @@ public class Classes { private final Classes classes; - private final Map> originatingElementsByGeneratedClassQualifiedName = new HashMap>(); - private final Set> apiClassesToGenerate = new HashSet>(); + private final OriginatingElementsHolder originatingElementsHolder = new OriginatingElementsHolder(); + public EBeansHolder(JCodeModel codeModel) { this.codeModel = codeModel; classes = new Classes(); @@ -169,22 +167,13 @@ public EBeanHolder create(Element element, Class eBeanAnno String qualifiedName = generatedClass.fullName(); - addAsOriginatingElement(qualifiedName, element); + originatingElementsHolder.addAsOriginatingElement(qualifiedName, element); EBeanHolder activityHolder = new EBeanHolder(this, eBeanAnnotation, generatedClass); eBeanHolders.put(element, activityHolder); return activityHolder; } - private void addAsOriginatingElement(String qualifiedName, Element element) { - List originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedName); - if (originatingElements == null) { - originatingElements = new ArrayList(); - originatingElementsByGeneratedClassQualifiedName.put(qualifiedName, originatingElements); - } - originatingElements.add(element); - } - public EBeanHolder getEBeanHolder(Element element) { return eBeanHolders.get(element); } @@ -223,8 +212,8 @@ public Classes classes() { return classes; } - public Map> getOriginatingElementsByGeneratedClassQualifiedName() { - return originatingElementsByGeneratedClassQualifiedName; + public OriginatingElementsHolder getOriginatingElementsHolder() { + return originatingElementsHolder; } public Set> getApiClassesToGenerate() { @@ -232,7 +221,7 @@ public Set> getApiClassesToGenerate() { } public void generateApiClass(Element originatingElement, Class apiClass) { - addAsOriginatingElement(apiClass.getCanonicalName(), originatingElement); + originatingElementsHolder.addAsOriginatingElement(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 73c9ebd1bd..de2124a3fe 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; @@ -36,16 +35,16 @@ public class ModelProcessor { public static class ProcessResult { public final JCodeModel codeModel; - public final Map> originatingElementsByGeneratedClassQualifiedName; + public final OriginatingElementsHolder originatingElementsHolder; public final Set> apiClassesToGenerate; public ProcessResult(// JCodeModel codeModel, // - Map> originatingElementsByGeneratedClassQualifiedName, // + OriginatingElementsHolder originatingElementsHolder, // Set> apiClassesToGenerate) { this.codeModel = codeModel; - this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName; + this.originatingElementsHolder = originatingElementsHolder; this.apiClassesToGenerate = apiClassesToGenerate; } } @@ -129,7 +128,7 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception return new ProcessResult(// codeModel, // - eBeansHolder.getOriginatingElementsByGeneratedClassQualifiedName(), // + eBeansHolder.getOriginatingElementsHolder(), // eBeansHolder.getApiClassesToGenerate()); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java new file mode 100644 index 0000000000..30dae0cccf --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java @@ -0,0 +1,31 @@ +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 OriginatingElementsHolder { + + private final Map> originatingElementsByClassName = new HashMap>(); + + public void addAsOriginatingElement(String qualifiedName, Element element) { + List originatingElements = originatingElementsByClassName.get(qualifiedName); + if (originatingElements == null) { + originatingElements = new ArrayList(); + originatingElementsByClassName.put(qualifiedName, originatingElements); + } + originatingElements.add(element); + } + + public Element[] getOriginatingElements(String className) { + List originatingElements = originatingElementsByClassName.get(className); + if (originatingElements == null) { + return new Element[0]; + } else { + return originatingElements.toArray(new Element[originatingElements.size()]); + } + } +} From 65186448b121aafa4a098c9b191e11b4fdd9ccaf Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 07:45:36 +0100 Subject: [PATCH 08/12] Removed dead code because of 175d16 --- .../generation/ApiCodeGenerator.java | 10 +--------- .../generation/CodeModelGenerator.java | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java index 92743d9361..2a8895f45e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -6,9 +6,7 @@ import java.util.Set; import javax.annotation.processing.Filer; -import javax.annotation.processing.Messager; import javax.lang.model.element.Element; -import javax.tools.Diagnostic; import javax.tools.JavaFileObject; import org.androidannotations.processing.OriginatingElementsHolder; @@ -18,11 +16,9 @@ public class ApiCodeGenerator { private final static byte[] BUFFER = new byte[4096]; private final Filer filer; - private final Messager messager; - public ApiCodeGenerator(Filer filer, Messager messager) { + public ApiCodeGenerator(Filer filer) { this.filer = filer; - this.messager = messager; } public void writeApiClasses(Set> apiClassesToGenerate, OriginatingElementsHolder originatingElementsHolder) { @@ -68,8 +64,4 @@ public static void copyStream(InputStream input, OutputStream output) throws IOE } } - private void printError(String message) { - messager.printMessage(Diagnostic.Kind.ERROR, message); - } - } 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 6f7d893c02..df088714a1 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java @@ -36,7 +36,7 @@ public CodeModelGenerator(Filer filer, Messager messager) { public void generate(ProcessResult processResult) throws IOException { - ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer, messager); + ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer); apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsHolder); SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsHolder); From fc801b4605339dc8c623857f3fbbacbe41f40024 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Mon, 26 Nov 2012 21:11:38 +0100 Subject: [PATCH 09/12] Removed bad comment. --- .../org/androidannotations/generation/ApiCodeGenerator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java index 2a8895f45e..567718cd17 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -33,8 +33,7 @@ public void writeApiClasses(Set> apiClassesToGenerate, OriginatingEleme try { if (apiClassStream == null) { - // The processor is not executed from a Jar. In this case, - // we have to add a magic '/' + // The processor is not executed from a Jar. apiClassStream = getClass().getClassLoader().getResourceAsStream('/' + apiClassFileName); } From fc3d52e339165c72fffedef32221b4623c80f939 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Thu, 29 Nov 2012 11:07:07 +0100 Subject: [PATCH 10/12] Added some tests --- .../ActivityWithOnBackPressedMethod.java | 13 +++ .../ActivityWithoutOnBackPressedMethod.java | 10 +++ .../OnBackPressedApiDependenciesTest.java | 49 +++++++++++ .../generation/SharedPrefs.java | 21 +++++ .../SharedPrefsApiDependenciesTest.java | 83 +++++++++++++++++++ .../utils/ProcessorTestHelper.java | 58 ++++++++++++- .../generation/AndroidManifest.xml | 29 +++++++ 7 files changed, 259 insertions(+), 4 deletions(-) create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefsApiDependenciesTest.java create mode 100644 AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml 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..a5b97ba446 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java @@ -0,0 +1,13 @@ +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/ActivityWithoutOnBackPressedMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java new file mode 100644 index 0000000000..4c0bc7eb5d --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java @@ -0,0 +1,10 @@ +package org.androidannotations.generation; + +import org.androidannotations.annotations.EActivity; + +import android.app.Activity; + +@EActivity +public class ActivityWithoutOnBackPressedMethod extends Activity { + +} 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..e366aba169 --- /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_without_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(ActivityWithoutOnBackPressedMethod.class); + assertClassSourcesNotGeneratedToOutput(SdkVersionHelper.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..d816585e31 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java @@ -0,0 +1,21 @@ +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 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..47478cffe2 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + From d7342c9d2994328d881bd1631ab025a32bdff3c6 Mon Sep 17 00:00:00 2001 From: Mathieu Boniface Date: Thu, 29 Nov 2012 12:07:18 +0100 Subject: [PATCH 11/12] Added some tests for @Background api classes generation --- .../ActivityWithBackgroundMethod.java | 16 ++++++ .../ActivityWithoutOnBackPressedMethod.java | 10 ---- .../OnBackPressedApiDependenciesTest.java | 4 +- .../OnBackgroundApiDependenciesTest.java | 49 +++++++++++++++++++ .../generation/AndroidManifest.xml | 2 +- 5 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java delete mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackgroundApiDependenciesTest.java diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java new file mode 100644 index 0000000000..cc92f5de11 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java @@ -0,0 +1,16 @@ +package org.androidannotations.generation; + +import org.androidannotations.annotations.Background; +import org.androidannotations.annotations.EActivity; + +import android.app.Activity; + +@EActivity +public class ActivityWithBackgroundMethod extends Activity { + + @Background + public void executingOnBackground() { + + } + +} diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java deleted file mode 100644 index 4c0bc7eb5d..0000000000 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithoutOnBackPressedMethod.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.androidannotations.generation; - -import org.androidannotations.annotations.EActivity; - -import android.app.Activity; - -@EActivity -public class ActivityWithoutOnBackPressedMethod extends Activity { - -} diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java index e366aba169..76e3a29c8a 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/OnBackPressedApiDependenciesTest.java @@ -33,7 +33,7 @@ public void setup() { } @Test - public void activity_without_on_back_pressed_generate_api_dependency() throws IOException { + public void activity_with_on_back_pressed_generate_api_dependency() throws IOException { CompileResult result = compileFiles(ActivityWithOnBackPressedMethod.class); assertClassSourcesGeneratedToOutput(SdkVersionHelper.class); assertCompilationSuccessful(result); @@ -41,7 +41,7 @@ public void activity_without_on_back_pressed_generate_api_dependency() throws IO @Test public void activity_without_on_back_pressed_do_not_generate_api_dependency() throws IOException { - CompileResult result = compileFiles(ActivityWithoutOnBackPressedMethod.class); + 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/resources/org/androidannotations/generation/AndroidManifest.xml b/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml index 47478cffe2..01cc00b674 100644 --- a/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml +++ b/AndroidAnnotations/androidannotations/src/test/resources/org/androidannotations/generation/AndroidManifest.xml @@ -23,7 +23,7 @@ - + From 486033e4c307e319528471db8a238207280af5b7 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Ricau Date: Thu, 29 Nov 2012 14:46:27 +0100 Subject: [PATCH 12/12] fixing license and changing a few names --- .../generation/ApiCodeGenerator.java | 52 +++++++++++++------ .../generation/CodeModelGenerator.java | 4 +- .../generation/SourceCodewriter.java | 14 ++--- .../processing/EBeansHolder.java | 10 ++-- .../processing/ModelProcessor.java | 8 +-- ...tsHolder.java => OriginatingElements.java} | 21 ++++++-- .../ActivityWithBackgroundMethod.java | 15 ++++++ .../ActivityWithOnBackPressedMethod.java | 15 ++++++ .../generation/SharedPrefs.java | 15 ++++++ 9 files changed, 116 insertions(+), 38 deletions(-) rename AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/{OriginatingElementsHolder.java => OriginatingElements.java} (51%) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java index 567718cd17..fa85b7bf91 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java @@ -1,3 +1,18 @@ +/** + * 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; @@ -9,11 +24,18 @@ import javax.lang.model.element.Element; import javax.tools.JavaFileObject; -import org.androidannotations.processing.OriginatingElementsHolder; +import org.androidannotations.processing.OriginatingElements; public class ApiCodeGenerator { - private final static byte[] BUFFER = new byte[4096]; + 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; @@ -21,29 +43,32 @@ public ApiCodeGenerator(Filer filer) { this.filer = filer; } - public void writeApiClasses(Set> apiClassesToGenerate, OriginatingElementsHolder originatingElementsHolder) { + public void writeApiClasses(Set> apiClassesToGenerate, OriginatingElements originatingElements) { for (Class apiClassToGenerate : apiClassesToGenerate) { - String cannonicalApiClassName = apiClassToGenerate.getCanonicalName(); + String canonicalApiClassName = apiClassToGenerate.getCanonicalName(); - String apiClassFileName = cannonicalApiClassName.replace(".", "/") + ".java"; + String apiClassFileName = canonicalApiClassName.replace(".", "/") + ".java"; InputStream apiClassStream = getClass().getClassLoader().getResourceAsStream(apiClassFileName); try { if (apiClassStream == null) { - // The processor is not executed from a Jar. + /* + * This happens when in AA dev environment, when the + * processor classes are not coming from a jar + */ apiClassStream = getClass().getClassLoader().getResourceAsStream('/' + apiClassFileName); } - Element[] originatingElements = originatingElementsHolder.getOriginatingElements(cannonicalApiClassName); + Element[] apiClassOriginatingElements = originatingElements.getClassOriginatingElements(canonicalApiClassName); JavaFileObject targetedClassFile; - if (originatingElements == null) { - targetedClassFile = filer.createSourceFile(cannonicalApiClassName); + if (apiClassOriginatingElements == null) { + targetedClassFile = filer.createSourceFile(canonicalApiClassName); } else { - targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements); + targetedClassFile = filer.createSourceFile(canonicalApiClassName, apiClassOriginatingElements); } OutputStream classFileOutputStream = targetedClassFile.openOutputStream(); @@ -56,11 +81,4 @@ public void writeApiClasses(Set> apiClassesToGenerate, OriginatingEleme } } - public static void copyStream(InputStream input, OutputStream output) throws IOException { - int read; - while ((read = input.read(BUFFER)) != -1) { - output.write(BUFFER, 0, read); - } - } - } 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 df088714a1..59a2d46a14 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java @@ -37,9 +37,9 @@ public CodeModelGenerator(Filer filer, Messager messager) { public void generate(ProcessResult processResult) throws IOException { ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer); - apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsHolder); + apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElements); - SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsHolder); + 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"); 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 0ef929d3c6..554bec9d76 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java @@ -25,7 +25,7 @@ import javax.tools.Diagnostic.Kind; import javax.tools.JavaFileObject; -import org.androidannotations.processing.OriginatingElementsHolder; +import org.androidannotations.processing.OriginatingElements; import com.sun.codemodel.CodeWriter; import com.sun.codemodel.JPackage; @@ -36,7 +36,7 @@ public class SourceCodewriter extends CodeWriter { private final Messager message; private static final VoidOutputStream VOID_OUTPUT_STREAM = new VoidOutputStream(); - private OriginatingElementsHolder originatingElementsHolder; + private OriginatingElements originatingElements; private static class VoidOutputStream extends OutputStream { @Override @@ -45,10 +45,10 @@ public void write(int arg0) throws IOException { } } - public SourceCodewriter(Filer filer, Messager message, OriginatingElementsHolder originatingElementsHolder) { + public SourceCodewriter(Filer filer, Messager message, OriginatingElements originatingElements) { this.filer = filer; this.message = message; - this.originatingElementsHolder = originatingElementsHolder; + this.originatingElements = originatingElements; } @Override @@ -56,16 +56,16 @@ public OutputStream openBinary(JPackage pkg, String fileName) throws IOException String qualifiedClassName = toQualifiedClassName(pkg, fileName); message.printMessage(Kind.NOTE, "Generating source file: " + qualifiedClassName); - Element[] originatingElements = originatingElementsHolder.getOriginatingElements(qualifiedClassName); + Element[] classOriginatingElements = originatingElements.getClassOriginatingElements(qualifiedClassName); try { JavaFileObject sourceFile; - if (originatingElements.length == 0) { + if (classOriginatingElements.length == 0) { message.printMessage(Kind.NOTE, "Generating class with no originating element: " + qualifiedClassName); } - sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements); + sourceFile = filer.createSourceFile(qualifiedClassName, classOriginatingElements); return sourceFile.openOutputStream(); } catch (FilerException e) { 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 05614c85f9..090d001e82 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java @@ -149,7 +149,7 @@ public class Classes { private final Set> apiClassesToGenerate = new HashSet>(); - private final OriginatingElementsHolder originatingElementsHolder = new OriginatingElementsHolder(); + private final OriginatingElements originatingElements = new OriginatingElements(); public EBeansHolder(JCodeModel codeModel) { this.codeModel = codeModel; @@ -167,7 +167,7 @@ public EBeanHolder create(Element element, Class eBeanAnno String qualifiedName = generatedClass.fullName(); - originatingElementsHolder.addAsOriginatingElement(qualifiedName, element); + originatingElements.add(qualifiedName, element); EBeanHolder activityHolder = new EBeanHolder(this, eBeanAnnotation, generatedClass); eBeanHolders.put(element, activityHolder); @@ -212,8 +212,8 @@ public Classes classes() { return classes; } - public OriginatingElementsHolder getOriginatingElementsHolder() { - return originatingElementsHolder; + public OriginatingElements getOriginatingElements() { + return originatingElements; } public Set> getApiClassesToGenerate() { @@ -221,7 +221,7 @@ public Set> getApiClassesToGenerate() { } public void generateApiClass(Element originatingElement, Class apiClass) { - originatingElementsHolder.addAsOriginatingElement(apiClass.getCanonicalName(), originatingElement); + 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 de2124a3fe..687d9cf6db 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java @@ -35,16 +35,16 @@ public class ModelProcessor { public static class ProcessResult { public final JCodeModel codeModel; - public final OriginatingElementsHolder originatingElementsHolder; + public final OriginatingElements originatingElements; public final Set> apiClassesToGenerate; public ProcessResult(// JCodeModel codeModel, // - OriginatingElementsHolder originatingElementsHolder, // + OriginatingElements originatingElements, // Set> apiClassesToGenerate) { this.codeModel = codeModel; - this.originatingElementsHolder = originatingElementsHolder; + this.originatingElements = originatingElements; this.apiClassesToGenerate = apiClassesToGenerate; } } @@ -128,7 +128,7 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception return new ProcessResult(// codeModel, // - eBeansHolder.getOriginatingElementsHolder(), // + eBeansHolder.getOriginatingElements(), // eBeansHolder.getApiClassesToGenerate()); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java similarity index 51% rename from AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java rename to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java index 30dae0cccf..a14e8c7789 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElementsHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OriginatingElements.java @@ -1,3 +1,18 @@ +/** + * 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; @@ -7,11 +22,11 @@ import javax.lang.model.element.Element; -public class OriginatingElementsHolder { +public class OriginatingElements { private final Map> originatingElementsByClassName = new HashMap>(); - public void addAsOriginatingElement(String qualifiedName, Element element) { + public void add(String qualifiedName, Element element) { List originatingElements = originatingElementsByClassName.get(qualifiedName); if (originatingElements == null) { originatingElements = new ArrayList(); @@ -20,7 +35,7 @@ public void addAsOriginatingElement(String qualifiedName, Element element) { originatingElements.add(element); } - public Element[] getOriginatingElements(String className) { + public Element[] getClassOriginatingElements(String className) { List originatingElements = originatingElementsByClassName.get(className); if (originatingElements == null) { return new Element[0]; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java index cc92f5de11..2cdbfb2191 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithBackgroundMethod.java @@ -1,3 +1,18 @@ +/** + * 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.Background; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java index a5b97ba446..1b402b4a07 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/ActivityWithOnBackPressedMethod.java @@ -1,3 +1,18 @@ +/** + * 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; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java index d816585e31..6fde4e6e2b 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/generation/SharedPrefs.java @@ -1,3 +1,18 @@ +/** + * 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;