Skip to content

Commit 70367c1

Browse files
Merge branch 'develop' into 358_RenamePackages
Conflicts: AndroidAnnotations/androidannotations-api/pom.xml AndroidAnnotations/androidannotations-bundle/pom.xml AndroidAnnotations/androidannotations-with-codemodel/pom.xml AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/rest/RestProcessor.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/ebean/SomeActivity.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/ebean/SomeImplementation.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/ebean/SomeInterface.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/manifest/ActivityInManifest.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/manifest/ActivityNotInManifest.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/manifest/ActivitySubclassInManifest.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/manifest/SomeClass.java AndroidAnnotations/androidannotations/src/test/java/com/googlecode/androidannotations/utils/ProcessorAssert.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/ebean/EBeanTest.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/manifest/AndroidManifestErrorsTest.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/manifest/AndroidManifestFinderTest.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/AAProcessorTestHelper.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ClassFinder.java AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/utils/ProcessorTestHelper.java AndroidAnnotations/functional-test-1-5-tests/pom.xml AndroidAnnotations/functional-test-1-5/pom.xml
2 parents a774d7a + a885485 commit 70367c1

43 files changed

Lines changed: 722 additions & 101 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎AndroidAnnotations/androidannotations-api/pom.xml‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
43
<modelVersion>4.0.0</modelVersion>
54

65
<parent>
76
<artifactId>androidannotations-parent</artifactId>
87
<groupId>org.androidannotations</groupId>
9-
<version>2.7-SNAPSHOT</version>
8+
<version>3.0-SNAPSHOT</version>
109
</parent>
1110

1211
<artifactId>androidannotations-api</artifactId>

‎AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Rest.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323
@Retention(RetentionPolicy.CLASS)
2424
@Target(ElementType.TYPE)
2525
public @interface Rest {
26-
String value() default "";
26+
String rootUrl() default "";
27+
Class<?>[] converters();
2728
}

‎AndroidAnnotations/androidannotations-bundle/pom.xml‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
43
<modelVersion>4.0.0</modelVersion>
54

65
<parent>
76
<artifactId>androidannotations-parent</artifactId>
87
<groupId>org.androidannotations</groupId>
9-
<version>2.7-SNAPSHOT</version>
8+
<version>3.0-SNAPSHOT</version>
109
</parent>
1110

1211
<artifactId>androidannotations-bundle</artifactId>

‎AndroidAnnotations/androidannotations-with-codemodel/pom.xml‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
43
<modelVersion>4.0.0</modelVersion>
54

65
<parent>
76
<artifactId>androidannotations-parent</artifactId>
87
<groupId>org.androidannotations</groupId>
9-
<version>2.7-SNAPSHOT</version>
8+
<version>3.0-SNAPSHOT</version>
109
</parent>
1110

1211
<artifactId>androidannotations-with-codemodel</artifactId>

‎AndroidAnnotations/androidannotations/pom.xml‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
43
<modelVersion>4.0.0</modelVersion>
54

65
<parent>
76
<groupId>org.androidannotations</groupId>
87
<artifactId>androidannotations-parent</artifactId>
9-
<version>2.7-SNAPSHOT</version>
8+
<version>3.0-SNAPSHOT</version>
109
</parent>
1110

1211
<artifactId>androidannotations</artifactId>
@@ -36,6 +35,13 @@
3635
<version>1.6_r2</version>
3736
<scope>test</scope>
3837
</dependency>
38+
<dependency>
39+
<!-- spring-android-rest-template is required to use the Rest API -->
40+
<groupId>org.springframework.android</groupId>
41+
<artifactId>spring-android-rest-template</artifactId>
42+
<version>1.0.0.RELEASE</version>
43+
<scope>test</scope>
44+
</dependency>
3945
</dependencies>
4046

4147
<build>

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/AndroidAnnotationProcessor.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices
539539
modelProcessor.register(new FragmentArgProcessor(processingEnv));
540540
modelProcessor.register(new SystemServiceProcessor(androidSystemServices));
541541
RestImplementationsHolder restImplementationHolder = new RestImplementationsHolder();
542-
modelProcessor.register(new RestProcessor(restImplementationHolder));
542+
modelProcessor.register(new RestProcessor(processingEnv, restImplementationHolder));
543543
modelProcessor.register(new GetProcessor(processingEnv, restImplementationHolder));
544544
modelProcessor.register(new PostProcessor(processingEnv, restImplementationHolder));
545545
modelProcessor.register(new PutProcessor(processingEnv, restImplementationHolder));

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/AnnotationHelper.java‎

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public AnnotationHelper(ProcessingEnvironment processingEnv) {
5858
* be a subtype of itself.
5959
*/
6060
public boolean isSubtype(TypeMirror potentialSubtype, TypeMirror potentialSupertype) {
61-
6261
return processingEnv.getTypeUtils().isSubtype(potentialSubtype, potentialSupertype);
6362
}
6463

@@ -115,6 +114,10 @@ public boolean isPrivate(Element element) {
115114
return element.getModifiers().contains(Modifier.PRIVATE);
116115
}
117116

117+
public boolean isPublic(Element element) {
118+
return element.getModifiers().contains(Modifier.PUBLIC);
119+
}
120+
118121
public boolean isAbstract(Element element) {
119122
return element.getModifiers().contains(Modifier.ABSTRACT);
120123
}
@@ -308,17 +311,45 @@ public String actionName(Class<? extends Annotation> target) {
308311
return target.getSimpleName() + "ed";
309312
}
310313

311-
public DeclaredType extractAnnotationClassParameter(Element element, Class<? extends Annotation> target) {
314+
public List<DeclaredType> extractAnnotationClassArrayParameter(Element element, Class<? extends Annotation> target, String methodName) {
315+
AnnotationMirror annotationMirror = findAnnotationMirror(element, target);
316+
317+
Map<? extends ExecutableElement, ? extends AnnotationValue> elementValues = annotationMirror.getElementValues();
318+
319+
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : elementValues.entrySet()) {
320+
/*
321+
* "methodName" is unset when the default value is used
322+
*/
323+
if (methodName.equals(entry.getKey().getSimpleName().toString())) {
324+
325+
AnnotationValue annotationValue = entry.getValue();
312326

327+
@SuppressWarnings("unchecked")
328+
List<AnnotationValue> annotationClassArray = (List<AnnotationValue>) annotationValue.getValue();
329+
330+
List<DeclaredType> result = new ArrayList<DeclaredType>(annotationClassArray.size());
331+
332+
for (AnnotationValue annotationClassValue : annotationClassArray) {
333+
result.add((DeclaredType) annotationClassValue.getValue());
334+
}
335+
336+
return result;
337+
}
338+
}
339+
340+
return null;
341+
}
342+
343+
public DeclaredType extractAnnotationClassParameter(Element element, Class<? extends Annotation> target, String methodName) {
313344
AnnotationMirror annotationMirror = findAnnotationMirror(element, target);
314345

315346
Map<? extends ExecutableElement, ? extends AnnotationValue> elementValues = annotationMirror.getElementValues();
316347

317348
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : elementValues.entrySet()) {
318349
/*
319-
* "value" is unset when the default value is used
350+
* "methodName" is unset when the default value is used
320351
*/
321-
if ("value".equals(entry.getKey().getSimpleName().toString())) {
352+
if (methodName.equals(entry.getKey().getSimpleName().toString())) {
322353

323354
AnnotationValue annotationValue = entry.getValue();
324355

@@ -331,4 +362,8 @@ public DeclaredType extractAnnotationClassParameter(Element element, Class<? ext
331362
return null;
332363
}
333364

365+
public DeclaredType extractAnnotationClassParameter(Element element, Class<? extends Annotation> target) {
366+
return extractAnnotationClassParameter(element, target, "value");
367+
}
368+
334369
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public final class CanonicalNameConstants {
9999
public static final String HTTP_METHOD = "org.springframework.http.HttpMethod";
100100
public static final String HTTP_ENTITY = "org.springframework.http.HttpEntity";
101101
public static final String REST_TEMPLATE = "org.springframework.web.client.RestTemplate";
102+
public static final String HTTP_MESSAGE_CONVERTER = "org.springframework.http.converter.HttpMessageConverter";
102103

103104
/*
104105
* RoboGuice

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java‎

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
*/
1616
package org.androidannotations.helper;
1717

18+
import static java.util.Arrays.asList;
1819
import static org.androidannotations.helper.AndroidConstants.LOG_DEBUG;
1920
import static org.androidannotations.helper.AndroidConstants.LOG_ERROR;
2021
import static org.androidannotations.helper.AndroidConstants.LOG_INFO;
2122
import static org.androidannotations.helper.AndroidConstants.LOG_VERBOSE;
2223
import static org.androidannotations.helper.AndroidConstants.LOG_WARN;
24+
import static org.androidannotations.helper.CanonicalNameConstants.HTTP_MESSAGE_CONVERTER;
2325
import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX;
24-
import static java.util.Arrays.asList;
2526

2627
import java.lang.annotation.Annotation;
2728
import java.util.ArrayList;
@@ -860,7 +861,7 @@ public void hasCorrectDefaultAnnotation(ExecutableElement method) {
860861
checkDefaultAnnotation(method, DefaultString.class, "String", new DefaultAnnotationCondition() {
861862
@Override
862863
public boolean correctReturnType(TypeMirror returnType) {
863-
return returnType.toString().equals("java.lang.String");
864+
return returnType.toString().equals(CanonicalNameConstants.STRING);
864865
}
865866
});
866867
}
@@ -1123,4 +1124,37 @@ public void componentRegistered(Element element, AndroidManifest androidManifest
11231124

11241125
}
11251126

1127+
public void validateConverters(Element element, IsValid valid) {
1128+
TypeMirror httpMessageConverterType = annotationHelper.typeElementFromQualifiedName(HTTP_MESSAGE_CONVERTER).asType();
1129+
TypeMirror httpMessageConverterTypeErased = annotationHelper.getTypeUtils().erasure(httpMessageConverterType);
1130+
List<DeclaredType> converters = annotationHelper.extractAnnotationClassArrayParameter(element, annotationHelper.getTarget(), "converters");
1131+
for (DeclaredType converterType : converters) {
1132+
TypeMirror erasedConverterType = annotationHelper.getTypeUtils().erasure(converterType);
1133+
if (annotationHelper.isSubtype(erasedConverterType, httpMessageConverterTypeErased)) {
1134+
Element converterElement = converterType.asElement();
1135+
if (converterElement.getKind().isClass()) {
1136+
if (!annotationHelper.isAbstract(converterElement)) {
1137+
List<ExecutableElement> constructors = ElementFilter.constructorsIn(converterElement.getEnclosedElements());
1138+
for (ExecutableElement constructor : constructors) {
1139+
if (annotationHelper.isPublic(constructor) && constructor.getParameters().isEmpty()) {
1140+
return;
1141+
}
1142+
}
1143+
valid.invalidate();
1144+
annotationHelper.printAnnotationError(element, "The converter class must have a public no argument constructor");
1145+
} else {
1146+
valid.invalidate();
1147+
annotationHelper.printAnnotationError(element, "The converter class must not be abstract");
1148+
}
1149+
} else {
1150+
valid.invalidate();
1151+
annotationHelper.printAnnotationError(element, "The converter class must be a class");
1152+
}
1153+
} else {
1154+
valid.invalidate();
1155+
annotationHelper.printAnnotationError(element, "The converter class must be a subtype of " + HTTP_MESSAGE_CONVERTER);
1156+
}
1157+
}
1158+
1159+
}
11261160
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ public class Classes {
149149
public EBeansHolder(JCodeModel codeModel) {
150150
this.codeModel = codeModel;
151151
classes = new Classes();
152+
refClass(CanonicalNameConstants.STRING);
153+
preloadJavaLangClasses();
154+
}
155+
156+
private void preloadJavaLangClasses() {
157+
loadedClasses.put(String.class.getName(), refClass(String.class));
158+
loadedClasses.put(Object.class.getName(), refClass(Object.class));
152159
}
153160

154161
public EBeanHolder create(Element element, Class<? extends Annotation> eBeanAnnotation, JDefinedClass generatedClass) {

0 commit comments

Comments
 (0)