Skip to content

Commit dba2eb0

Browse files
Refactoring : Encapsuled the collection of originating elements.
1 parent 062753a commit dba2eb0

File tree

6 files changed

+58
-39
lines changed

6 files changed

+58
-39
lines changed

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/ApiCodeGenerator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import java.io.IOException;
44
import java.io.InputStream;
55
import java.io.OutputStream;
6-
import java.util.List;
7-
import java.util.Map;
86
import java.util.Set;
97

108
import javax.annotation.processing.Filer;
@@ -13,6 +11,8 @@
1311
import javax.tools.Diagnostic;
1412
import javax.tools.JavaFileObject;
1513

14+
import org.androidannotations.processing.OriginatingElementsHolder;
15+
1616
public class ApiCodeGenerator {
1717

1818
private final static byte[] BUFFER = new byte[4096];
@@ -25,7 +25,7 @@ public ApiCodeGenerator(Filer filer, Messager messager) {
2525
this.messager = messager;
2626
}
2727

28-
public void writeApiClasses(Set<Class<?>> apiClassesToGenerate, Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName) {
28+
public void writeApiClasses(Set<Class<?>> apiClassesToGenerate, OriginatingElementsHolder originatingElementsHolder) {
2929

3030
for (Class<?> apiClassToGenerate : apiClassesToGenerate) {
3131

@@ -42,13 +42,13 @@ public void writeApiClasses(Set<Class<?>> apiClassesToGenerate, Map<String, List
4242
apiClassStream = getClass().getClassLoader().getResourceAsStream('/' + apiClassFileName);
4343
}
4444

45-
List<Element> originatingElements = originatingElementsByGeneratedClassQualifiedName.get(cannonicalApiClassName);
45+
Element[] originatingElements = originatingElementsHolder.getOriginatingElements(cannonicalApiClassName);
4646

4747
JavaFileObject targetedClassFile;
4848
if (originatingElements == null) {
4949
targetedClassFile = filer.createSourceFile(cannonicalApiClassName);
5050
} else {
51-
targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements.toArray(new Element[originatingElements.size()]));
51+
targetedClassFile = filer.createSourceFile(cannonicalApiClassName, originatingElements);
5252
}
5353

5454
OutputStream classFileOutputStream = targetedClassFile.openOutputStream();

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/CodeModelGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public CodeModelGenerator(Filer filer, Messager messager) {
3737
public void generate(ProcessResult processResult) throws IOException {
3838

3939
ApiCodeGenerator apiCodeGenerator = new ApiCodeGenerator(filer, messager);
40-
apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsByGeneratedClassQualifiedName);
40+
apiCodeGenerator.writeApiClasses(processResult.apiClassesToGenerate, processResult.originatingElementsHolder);
4141

42-
SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsByGeneratedClassQualifiedName);
42+
SourceCodewriter sourceCodeWriter = new SourceCodewriter(filer, messager, processResult.originatingElementsHolder);
4343

4444
PrologCodeWriter prologCodeWriter = new PrologCodeWriter(sourceCodeWriter, "DO NOT EDIT THIS FILE, IT HAS BEEN GENERATED USING AndroidAnnotations.\n");
4545

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/generation/SourceCodewriter.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
import java.io.IOException;
1919
import java.io.OutputStream;
20-
import java.util.List;
21-
import java.util.Map;
2220

2321
import javax.annotation.processing.Filer;
2422
import javax.annotation.processing.FilerException;
@@ -27,6 +25,8 @@
2725
import javax.tools.Diagnostic.Kind;
2826
import javax.tools.JavaFileObject;
2927

28+
import org.androidannotations.processing.OriginatingElementsHolder;
29+
3030
import com.sun.codemodel.CodeWriter;
3131
import com.sun.codemodel.JPackage;
3232

@@ -36,7 +36,7 @@ public class SourceCodewriter extends CodeWriter {
3636
private final Messager message;
3737

3838
private static final VoidOutputStream VOID_OUTPUT_STREAM = new VoidOutputStream();
39-
private Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName;
39+
private OriginatingElementsHolder originatingElementsHolder;
4040

4141
private static class VoidOutputStream extends OutputStream {
4242
@Override
@@ -45,28 +45,28 @@ public void write(int arg0) throws IOException {
4545
}
4646
}
4747

48-
public SourceCodewriter(Filer filer, Messager message, Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName) {
48+
public SourceCodewriter(Filer filer, Messager message, OriginatingElementsHolder originatingElementsHolder) {
4949
this.filer = filer;
5050
this.message = message;
51-
this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName;
51+
this.originatingElementsHolder = originatingElementsHolder;
5252
}
5353

5454
@Override
5555
public OutputStream openBinary(JPackage pkg, String fileName) throws IOException {
5656
String qualifiedClassName = toQualifiedClassName(pkg, fileName);
5757
message.printMessage(Kind.NOTE, "Generating source file: " + qualifiedClassName);
5858

59-
List<Element> originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedClassName);
59+
Element[] originatingElements = originatingElementsHolder.getOriginatingElements(qualifiedClassName);
6060

6161
try {
6262
JavaFileObject sourceFile;
63-
if (originatingElements != null) {
64-
sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements.toArray(new Element[originatingElements.size()]));
65-
} else {
63+
64+
if (originatingElements.length == 0) {
6665
message.printMessage(Kind.NOTE, "Generating class with no originating element: " + qualifiedClassName);
67-
sourceFile = filer.createSourceFile(qualifiedClassName);
6866
}
6967

68+
sourceFile = filer.createSourceFile(qualifiedClassName, originatingElements);
69+
7070
return sourceFile.openOutputStream();
7171
} catch (FilerException e) {
7272
message.printMessage(Kind.NOTE, "Could not generate source file for " + qualifiedClassName + ", message: " + e.getMessage());

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@
2020
import java.io.Serializable;
2121
import java.lang.annotation.Annotation;
2222
import java.sql.SQLException;
23-
import java.util.ArrayList;
2423
import java.util.HashMap;
2524
import java.util.HashSet;
26-
import java.util.List;
2725
import java.util.Map;
2826
import java.util.Set;
2927

@@ -149,10 +147,10 @@ public class Classes {
149147

150148
private final Classes classes;
151149

152-
private final Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName = new HashMap<String, List<Element>>();
153-
154150
private final Set<Class<?>> apiClassesToGenerate = new HashSet<Class<?>>();
155151

152+
private final OriginatingElementsHolder originatingElementsHolder = new OriginatingElementsHolder();
153+
156154
public EBeansHolder(JCodeModel codeModel) {
157155
this.codeModel = codeModel;
158156
classes = new Classes();
@@ -169,22 +167,13 @@ public EBeanHolder create(Element element, Class<? extends Annotation> eBeanAnno
169167

170168
String qualifiedName = generatedClass.fullName();
171169

172-
addAsOriginatingElement(qualifiedName, element);
170+
originatingElementsHolder.addAsOriginatingElement(qualifiedName, element);
173171

174172
EBeanHolder activityHolder = new EBeanHolder(this, eBeanAnnotation, generatedClass);
175173
eBeanHolders.put(element, activityHolder);
176174
return activityHolder;
177175
}
178176

179-
private void addAsOriginatingElement(String qualifiedName, Element element) {
180-
List<Element> originatingElements = originatingElementsByGeneratedClassQualifiedName.get(qualifiedName);
181-
if (originatingElements == null) {
182-
originatingElements = new ArrayList<Element>();
183-
originatingElementsByGeneratedClassQualifiedName.put(qualifiedName, originatingElements);
184-
}
185-
originatingElements.add(element);
186-
}
187-
188177
public EBeanHolder getEBeanHolder(Element element) {
189178
return eBeanHolders.get(element);
190179
}
@@ -223,16 +212,16 @@ public Classes classes() {
223212
return classes;
224213
}
225214

226-
public Map<String, List<Element>> getOriginatingElementsByGeneratedClassQualifiedName() {
227-
return originatingElementsByGeneratedClassQualifiedName;
215+
public OriginatingElementsHolder getOriginatingElementsHolder() {
216+
return originatingElementsHolder;
228217
}
229218

230219
public Set<Class<?>> getApiClassesToGenerate() {
231220
return apiClassesToGenerate;
232221
}
233222

234223
public void generateApiClass(Element originatingElement, Class<?> apiClass) {
235-
addAsOriginatingElement(apiClass.getCanonicalName(), originatingElement);
224+
originatingElementsHolder.addAsOriginatingElement(apiClass.getCanonicalName(), originatingElement);
236225
apiClassesToGenerate.add(apiClass);
237226
}
238227

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ModelProcessor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.lang.annotation.Annotation;
1919
import java.util.ArrayList;
2020
import java.util.List;
21-
import java.util.Map;
2221
import java.util.Set;
2322

2423
import javax.lang.model.element.Element;
@@ -36,16 +35,16 @@ public class ModelProcessor {
3635
public static class ProcessResult {
3736

3837
public final JCodeModel codeModel;
39-
public final Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName;
38+
public final OriginatingElementsHolder originatingElementsHolder;
4039
public final Set<Class<?>> apiClassesToGenerate;
4140

4241
public ProcessResult(//
4342
JCodeModel codeModel, //
44-
Map<String, List<Element>> originatingElementsByGeneratedClassQualifiedName, //
43+
OriginatingElementsHolder originatingElementsHolder, //
4544
Set<Class<?>> apiClassesToGenerate) {
4645

4746
this.codeModel = codeModel;
48-
this.originatingElementsByGeneratedClassQualifiedName = originatingElementsByGeneratedClassQualifiedName;
47+
this.originatingElementsHolder = originatingElementsHolder;
4948
this.apiClassesToGenerate = apiClassesToGenerate;
5049
}
5150
}
@@ -129,7 +128,7 @@ public ProcessResult process(AnnotationElements validatedModel) throws Exception
129128

130129
return new ProcessResult(//
131130
codeModel, //
132-
eBeansHolder.getOriginatingElementsByGeneratedClassQualifiedName(), //
131+
eBeansHolder.getOriginatingElementsHolder(), //
133132
eBeansHolder.getApiClassesToGenerate());
134133
}
135134

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.androidannotations.processing;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
import javax.lang.model.element.Element;
9+
10+
public class OriginatingElementsHolder {
11+
12+
private final Map<String, List<Element>> originatingElementsByClassName = new HashMap<String, List<Element>>();
13+
14+
public void addAsOriginatingElement(String qualifiedName, Element element) {
15+
List<Element> originatingElements = originatingElementsByClassName.get(qualifiedName);
16+
if (originatingElements == null) {
17+
originatingElements = new ArrayList<Element>();
18+
originatingElementsByClassName.put(qualifiedName, originatingElements);
19+
}
20+
originatingElements.add(element);
21+
}
22+
23+
public Element[] getOriginatingElements(String className) {
24+
List<Element> originatingElements = originatingElementsByClassName.get(className);
25+
if (originatingElements == null) {
26+
return new Element[0];
27+
} else {
28+
return originatingElements.toArray(new Element[originatingElements.size()]);
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)