Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Commit 51c76f8

Browse files
committed
Move the Classes from the Internal ProcessHolder to a ClassesHolder which should be available to Plugins.
1 parent 4dd78bd commit 51c76f8

12 files changed

Lines changed: 266 additions & 232 deletions

File tree

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/AndroidAnnotationsEnvironment.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import org.androidannotations.handler.AnnotationHandler;
2727
import org.androidannotations.handler.GeneratingAnnotationHandler;
2828
import org.androidannotations.helper.AndroidManifest;
29+
import org.androidannotations.helper.ClassesHolder;
2930
import org.androidannotations.holder.GeneratedClassHolder;
3031
import org.androidannotations.internal.model.AnnotationElements;
31-
import org.androidannotations.internal.process.ProcessHolder;
3232
import org.androidannotations.plugin.AndroidAnnotationsPlugin;
3333
import org.androidannotations.rclass.IRClass;
3434

@@ -76,7 +76,7 @@ public interface AndroidAnnotationsEnvironment {
7676

7777
GeneratedClassHolder getGeneratedClassHolder(Element element);
7878

79-
ProcessHolder.Classes getClasses();
79+
ClassesHolder.Classes getClasses();
8080

8181
List<Class<? extends Annotation>> getGeneratingAnnotations();
8282

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/handler/BaseAnnotationHandler.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2019 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -26,10 +27,10 @@
2627
import org.androidannotations.AndroidAnnotationsEnvironment;
2728
import org.androidannotations.ElementValidation;
2829
import org.androidannotations.helper.APTCodeModelHelper;
30+
import org.androidannotations.helper.ClassesHolder;
2931
import org.androidannotations.helper.IdAnnotationHelper;
3032
import org.androidannotations.helper.IdValidatorHelper;
3133
import org.androidannotations.holder.GeneratedClassHolder;
32-
import org.androidannotations.internal.process.ProcessHolder;
3334

3435
import com.helger.jcodemodel.AbstractJClass;
3536
import com.helger.jcodemodel.JCodeModel;
@@ -80,7 +81,7 @@ protected ProcessingEnvironment getProcessingEnvironment() {
8081
return environment.getProcessingEnvironment();
8182
}
8283

83-
protected ProcessHolder.Classes getClasses() {
84+
protected ClassesHolder.Classes getClasses() {
8485
return environment.getClasses();
8586
}
8687

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
/**
2+
* Copyright (C) 2016-2019 the AndroidAnnotations project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package org.androidannotations.helper;
17+
18+
import java.io.FileInputStream;
19+
import java.io.InputStream;
20+
import java.io.Serializable;
21+
import java.sql.SQLException;
22+
import java.util.Arrays;
23+
import java.util.Collections;
24+
import java.util.HashMap;
25+
import java.util.HashSet;
26+
import java.util.List;
27+
import java.util.Map;
28+
29+
import javax.annotation.processing.ProcessingEnvironment;
30+
31+
import com.helger.jcodemodel.AbstractJClass;
32+
import com.helger.jcodemodel.JClassAlreadyExistsException;
33+
import com.helger.jcodemodel.JCodeModel;
34+
import com.helger.jcodemodel.JDefinedClass;
35+
36+
public class ClassesHolder {
37+
38+
// CHECKSTYLE:OFF
39+
public class Classes {
40+
41+
/*
42+
* Java
43+
*/
44+
public final AbstractJClass RUNTIME_EXCEPTION = refClass(RuntimeException.class);
45+
public final AbstractJClass EXCEPTION = refClass(Exception.class);
46+
public final AbstractJClass THROWABLE = refClass(Throwable.class);
47+
public final AbstractJClass CHAR_SEQUENCE = refClass(CharSequence.class);
48+
public final AbstractJClass CLASS_CAST_EXCEPTION = refClass(ClassCastException.class);
49+
public final AbstractJClass SERIALIZABLE = refClass(Serializable.class);
50+
public final AbstractJClass STRING = refClass(String.class);
51+
public final AbstractJClass STRING_BUILDER = refClass(StringBuilder.class);
52+
public final AbstractJClass SYSTEM = refClass(System.class);
53+
public final AbstractJClass INPUT_STREAM = refClass(InputStream.class);
54+
public final AbstractJClass FILE_INPUT_STREAM = refClass(FileInputStream.class);
55+
public final AbstractJClass SQL_EXCEPTION = refClass(SQLException.class);
56+
public final AbstractJClass COLLECTIONS = refClass(Collections.class);
57+
public final AbstractJClass THREAD = refClass(Thread.class);
58+
public final AbstractJClass HASH_MAP = refClass(HashMap.class);
59+
public final AbstractJClass LIST = refClass(List.class);
60+
public final AbstractJClass OBJECT = refClass(Object.class);
61+
public final AbstractJClass ARRAYS = refClass(Arrays.class);
62+
public final AbstractJClass HASH_SET = refClass(HashSet.class);
63+
public final AbstractJClass CLASS = refClass(Class.class);
64+
public final AbstractJClass MAP = refClass(Map.class);
65+
66+
/*
67+
* Android
68+
*/
69+
public final AbstractJClass LOG = refClass(CanonicalNameConstants.LOG);
70+
public final AbstractJClass BUNDLE = refClass(CanonicalNameConstants.BUNDLE);
71+
public final AbstractJClass ACTIVITY = refClass(CanonicalNameConstants.ACTIVITY);
72+
public final AbstractJClass EDITABLE = refClass(CanonicalNameConstants.EDITABLE);
73+
public final AbstractJClass TEXT_WATCHER = refClass(CanonicalNameConstants.TEXT_WATCHER);
74+
public final AbstractJClass SEEKBAR = refClass(CanonicalNameConstants.SEEKBAR);
75+
public final AbstractJClass ON_SEEKBAR_CHANGE_LISTENER = refClass(CanonicalNameConstants.ON_SEEKBAR_CHANGE_LISTENER);
76+
public final AbstractJClass TEXT_VIEW = refClass(CanonicalNameConstants.TEXT_VIEW);
77+
public final AbstractJClass TEXT_VIEW_ON_EDITOR_ACTION_LISTENER = refClass(CanonicalNameConstants.TEXT_VIEW_ON_EDITOR_ACTION_LISTENER);
78+
public final AbstractJClass COMPOUND_BUTTON = refClass(CanonicalNameConstants.COMPOUND_BUTTON);
79+
public final AbstractJClass COMPOUND_BUTTON_ON_CHECKED_CHANGE_LISTENER = refClass(CanonicalNameConstants.COMPOUND_BUTTON_ON_CHECKED_CHANGE_LISTENER);
80+
public final AbstractJClass VIEW = refClass(CanonicalNameConstants.VIEW);
81+
public final AbstractJClass VIEW_ON_CLICK_LISTENER = refClass(CanonicalNameConstants.VIEW_ON_CLICK_LISTENER);
82+
public final AbstractJClass VIEW_ON_TOUCH_LISTENER = refClass(CanonicalNameConstants.VIEW_ON_TOUCH_LISTENER);
83+
public final AbstractJClass VIEW_ON_LONG_CLICK_LISTENER = refClass(CanonicalNameConstants.VIEW_ON_LONG_CLICK_LISTENER);
84+
public final AbstractJClass VIEW_ON_FOCUS_CHANGE_LISTENER = refClass(CanonicalNameConstants.VIEW_ON_FOCUS_CHANGE_LISTENER);
85+
public final AbstractJClass VIEW_GROUP_LAYOUT_PARAMS = refClass(CanonicalNameConstants.VIEW_GROUP_LAYOUT_PARAMS);
86+
public final AbstractJClass KEY_EVENT = refClass(CanonicalNameConstants.KEY_EVENT);
87+
public final AbstractJClass CONTEXT = refClass(CanonicalNameConstants.CONTEXT);
88+
public final AbstractJClass INTENT = refClass(CanonicalNameConstants.INTENT);
89+
public final AbstractJClass INTENT_FILTER = refClass(CanonicalNameConstants.INTENT_FILTER);
90+
public final AbstractJClass BROADCAST_RECEIVER = refClass(CanonicalNameConstants.BROADCAST_RECEIVER);
91+
public final AbstractJClass LOCAL_BROADCAST_MANAGER = refClass(CanonicalNameConstants.LOCAL_BROADCAST_MANAGER);
92+
public final AbstractJClass COMPONENT_NAME = refClass(CanonicalNameConstants.COMPONENT_NAME);
93+
public final AbstractJClass VIEW_GROUP = refClass(CanonicalNameConstants.VIEW_GROUP);
94+
public final AbstractJClass LAYOUT_INFLATER = refClass(CanonicalNameConstants.LAYOUT_INFLATER);
95+
public final AbstractJClass FRAGMENT_ACTIVITY = refClass(CanonicalNameConstants.FRAGMENT_ACTIVITY);
96+
public final AbstractJClass FRAGMENT = refClass(CanonicalNameConstants.FRAGMENT);
97+
public final AbstractJClass SUPPORT_V4_FRAGMENT = refClass(CanonicalNameConstants.SUPPORT_V4_FRAGMENT);
98+
public final AbstractJClass HTML = refClass(CanonicalNameConstants.HTML);
99+
public final AbstractJClass WINDOW_MANAGER_LAYOUT_PARAMS = refClass(CanonicalNameConstants.WINDOW_MANAGER_LAYOUT_PARAMS);
100+
public final AbstractJClass ADAPTER_VIEW = refClass(CanonicalNameConstants.ADAPTER_VIEW);
101+
public final AbstractJClass ON_ITEM_LONG_CLICK_LISTENER = refClass(CanonicalNameConstants.ON_ITEM_LONG_CLICK_LISTENER);
102+
public final AbstractJClass ON_ITEM_CLICK_LISTENER = refClass(CanonicalNameConstants.ON_ITEM_CLICK_LISTENER);
103+
public final AbstractJClass ON_ITEM_SELECTED_LISTENER = refClass(CanonicalNameConstants.ON_ITEM_SELECTED_LISTENER);
104+
public final AbstractJClass WINDOW = refClass(CanonicalNameConstants.WINDOW);
105+
public final AbstractJClass MENU_ITEM = refClass(CanonicalNameConstants.MENU_ITEM);
106+
public final AbstractJClass MENU_INFLATER = refClass(CanonicalNameConstants.MENU_INFLATER);
107+
public final AbstractJClass MENU = refClass(CanonicalNameConstants.MENU);
108+
public final AbstractJClass ANIMATION_UTILS = refClass(CanonicalNameConstants.ANIMATION_UTILS);
109+
public final AbstractJClass RESOURCES = refClass(CanonicalNameConstants.RESOURCES);
110+
public final AbstractJClass CONFIGURATION = refClass(CanonicalNameConstants.CONFIGURATION);
111+
public final AbstractJClass MOTION_EVENT = refClass(CanonicalNameConstants.MOTION_EVENT);
112+
public final AbstractJClass HANDLER = refClass(CanonicalNameConstants.HANDLER);
113+
public final AbstractJClass KEY_STORE = refClass(CanonicalNameConstants.KEY_STORE);
114+
public final AbstractJClass VIEW_SERVER = refClass(CanonicalNameConstants.VIEW_SERVER);
115+
public final AbstractJClass PARCELABLE = refClass(CanonicalNameConstants.PARCELABLE);
116+
public final AbstractJClass LOOPER = refClass(CanonicalNameConstants.LOOPER);
117+
public final AbstractJClass POWER_MANAGER = refClass(CanonicalNameConstants.POWER_MANAGER);
118+
public final AbstractJClass WAKE_LOCK = refClass(CanonicalNameConstants.WAKE_LOCK);
119+
public final AbstractJClass BUILD_VERSION = refClass(CanonicalNameConstants.BUILD_VERSION);
120+
public final AbstractJClass BUILD_VERSION_CODES = refClass(CanonicalNameConstants.BUILD_VERSION_CODES);
121+
public final AbstractJClass ACTIVITY_COMPAT = refClass(CanonicalNameConstants.ACTIVITY_COMPAT);
122+
public final AbstractJClass CONTEXT_COMPAT = refClass(CanonicalNameConstants.CONTEXT_COMPAT);
123+
public final AbstractJClass APP_WIDGET_MANAGER = refClass(CanonicalNameConstants.APP_WIDGET_MANAGER);
124+
public final AbstractJClass VIEW_PAGER = refClass(CanonicalNameConstants.VIEW_PAGER);
125+
public final AbstractJClass PAGE_CHANGE_LISTENER = refClass(CanonicalNameConstants.PAGE_CHANGE_LISTENER);
126+
127+
public final AbstractJClass PREFERENCE = refClass(CanonicalNameConstants.PREFERENCE);
128+
public final AbstractJClass SUPPORT_V7_PREFERENCE = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE);
129+
public final AbstractJClass PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.PREFERENCE_CHANGE_LISTENER);
130+
public final AbstractJClass SUPPORT_V7_PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE_CHANGE_LISTENER);
131+
public final AbstractJClass PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.PREFERENCE_CLICK_LISTENER);
132+
public final AbstractJClass SUPPORT_V7_PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE_CLICK_LISTENER);
133+
public final AbstractJClass PREFERENCE_ACTIVITY_HEADER = refClass(CanonicalNameConstants.PREFERENCE_ACTIVITY_HEADER);
134+
135+
public final AbstractJClass VIEW_DATA_BINDING = refClass(CanonicalNameConstants.VIEW_DATA_BINDING);
136+
public final AbstractJClass DATA_BINDING_UTIL = refClass(CanonicalNameConstants.DATA_BINDING_UTIL);
137+
138+
/*
139+
* Android X
140+
*/
141+
public final AbstractJClass ANDROIDX_ACTIVITY_COMPAT = refClass(CanonicalNameConstants.ANDROIDX_ACTIVITY_COMPAT);
142+
public final AbstractJClass ANDROIDX_FRAGMENT = refClass(CanonicalNameConstants.ANDROIDX_FRAGMENT);
143+
public final AbstractJClass ANDROIDX_FRAGMENT_ACTIVITY = refClass(CanonicalNameConstants.ANDROIDX_FRAGMENT_ACTIVITY);
144+
public final AbstractJClass ANDROIDX_LOCAL_BROADCAST_MANAGER = refClass(CanonicalNameConstants.ANDROIDX_LOCAL_BROADCAST_MANAGER);
145+
public final AbstractJClass ANDROIDX_CONTEXT_COMPAT = refClass(CanonicalNameConstants.ANDROIDX_CONTEXT_COMPAT);
146+
public final AbstractJClass ANDROIDX_PREFERENCE = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE);
147+
public final AbstractJClass ANDROIDX_PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE_CLICK_LISTENER);
148+
public final AbstractJClass ANDROIDX_PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE_CHANGE_LISTENER);
149+
public final AbstractJClass ANDROIDX_VIEW_PAGER = refClass(CanonicalNameConstants.ANDROIDX_VIEW_PAGER);
150+
public final AbstractJClass ANDROIDX_PAGE_CHANGE_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PAGE_CHANGE_LISTENER);
151+
public final AbstractJClass ANDROIDX_VIEW_DATA_BINDING = refClass(CanonicalNameConstants.ANDROIDX_VIEW_DATA_BINDING);
152+
public final AbstractJClass ANDROIDX_DATA_BINDING_UTIL = refClass(CanonicalNameConstants.ANDROIDX_DATA_BINDING_UTIL);
153+
154+
/*
155+
* HttpClient
156+
*/
157+
public final AbstractJClass CLIENT_CONNECTION_MANAGER = refClass(CanonicalNameConstants.CLIENT_CONNECTION_MANAGER);
158+
public final AbstractJClass DEFAULT_HTTP_CLIENT = refClass(CanonicalNameConstants.DEFAULT_HTTP_CLIENT);
159+
public final AbstractJClass SSL_SOCKET_FACTORY = refClass(CanonicalNameConstants.SSL_SOCKET_FACTORY);
160+
public final AbstractJClass PLAIN_SOCKET_FACTORY = refClass(CanonicalNameConstants.PLAIN_SOCKET_FACTORY);
161+
public final AbstractJClass SCHEME = refClass(CanonicalNameConstants.SCHEME);
162+
public final AbstractJClass SCHEME_REGISTRY = refClass(CanonicalNameConstants.SCHEME_REGISTRY);
163+
public final AbstractJClass SINGLE_CLIENT_CONN_MANAGER = refClass(CanonicalNameConstants.SINGLE_CLIENT_CONN_MANAGER);
164+
}
165+
166+
// CHECKSTYLE:ON
167+
168+
private final Map<String, AbstractJClass> loadedClasses = new HashMap<>();
169+
170+
private final JCodeModel codeModel;
171+
172+
private final Classes classes;
173+
174+
public ClassesHolder(ProcessingEnvironment processingEnvironment) {
175+
codeModel = new JCodeModel();
176+
codeModel.addDontImportClass(refClass("android.R"));
177+
classes = new Classes();
178+
}
179+
180+
public AbstractJClass refClass(Class<?> clazz) {
181+
AbstractJClass referencedClass = codeModel.ref(clazz);
182+
loadedClasses.put(clazz.getCanonicalName(), referencedClass);
183+
return referencedClass;
184+
}
185+
186+
public AbstractJClass refClass(String fullyQualifiedClassName) {
187+
188+
int arrayCounter = 0;
189+
while (fullyQualifiedClassName.endsWith("[]")) {
190+
arrayCounter++;
191+
fullyQualifiedClassName = fullyQualifiedClassName.substring(0, fullyQualifiedClassName.length() - 2);
192+
}
193+
194+
AbstractJClass refClass = loadedClasses.get(fullyQualifiedClassName);
195+
196+
if (refClass == null) {
197+
refClass = codeModel.directClass(fullyQualifiedClassName);
198+
loadedClasses.put(fullyQualifiedClassName, refClass);
199+
}
200+
201+
for (int i = 0; i < arrayCounter; i++) {
202+
refClass = refClass.array();
203+
}
204+
205+
return refClass;
206+
}
207+
208+
public JDefinedClass definedClass(String fullyQualifiedClassName) {
209+
JDefinedClass refClass = (JDefinedClass) loadedClasses.get(fullyQualifiedClassName);
210+
if (refClass == null) {
211+
try {
212+
refClass = codeModel._class(fullyQualifiedClassName);
213+
} catch (JClassAlreadyExistsException e) {
214+
refClass = (JDefinedClass) refClass(fullyQualifiedClassName);
215+
}
216+
loadedClasses.put(fullyQualifiedClassName, refClass);
217+
}
218+
return refClass;
219+
}
220+
221+
public JCodeModel codeModel() {
222+
return codeModel;
223+
}
224+
225+
public ClassesHolder.Classes classes() {
226+
return classes;
227+
}
228+
229+
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/BaseGeneratedClassHolder.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2019 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -32,7 +33,7 @@
3233
import org.androidannotations.AndroidAnnotationsEnvironment;
3334
import org.androidannotations.Option;
3435
import org.androidannotations.helper.APTCodeModelHelper;
35-
import org.androidannotations.internal.process.ProcessHolder;
36+
import org.androidannotations.helper.ClassesHolder;
3637

3738
import com.helger.jcodemodel.AbstractJClass;
3839
import com.helger.jcodemodel.EClassType;
@@ -113,7 +114,7 @@ protected ProcessingEnvironment getProcessingEnvironment() {
113114
return environment.getProcessingEnvironment();
114115
}
115116

116-
protected ProcessHolder.Classes getClasses() {
117+
protected ClassesHolder.Classes getClasses() {
117118
return environment.getClasses();
118119
}
119120

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/FoundHolder.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2019 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -18,7 +19,7 @@
1819
import static com.helger.jcodemodel.JExpr._null;
1920
import static com.helger.jcodemodel.JExpr.cast;
2021

21-
import org.androidannotations.internal.process.ProcessHolder;
22+
import org.androidannotations.helper.ClassesHolder;
2223

2324
import com.helger.jcodemodel.AbstractJClass;
2425
import com.helger.jcodemodel.IJExpression;
@@ -66,7 +67,7 @@ public JBlock getIfNotNullBlock() {
6667
return ifNotNullBlock;
6768
}
6869

69-
protected ProcessHolder.Classes getClasses() {
70+
protected ClassesHolder.Classes getClasses() {
7071
return holder.getEnvironment().getClasses();
7172
}
7273
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/GeneratedClassHolderDelegate.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2019 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -18,7 +19,7 @@
1819
import javax.lang.model.element.TypeElement;
1920

2021
import org.androidannotations.AndroidAnnotationsEnvironment;
21-
import org.androidannotations.internal.process.ProcessHolder.Classes;
22+
import org.androidannotations.helper.ClassesHolder.Classes;
2223

2324
import com.helger.jcodemodel.AbstractJClass;
2425
import com.helger.jcodemodel.JCodeModel;

0 commit comments

Comments
 (0)