Skip to content

Commit 100146a

Browse files
Users can now use an url with a parameter declared twice in annotations related to Rest API
1 parent d2e5d15 commit 100146a

3 files changed

Lines changed: 19 additions & 9 deletions

File tree

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

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

1818
import java.lang.annotation.Annotation;
1919
import java.util.ArrayList;
20+
import java.util.HashSet;
2021
import java.util.List;
22+
import java.util.Set;
2123
import java.util.regex.Matcher;
2224
import java.util.regex.Pattern;
2325

@@ -33,7 +35,7 @@ public RestAnnotationHelper(ProcessingEnvironment processingEnv, Class<? extends
3335
super(processingEnv, target);
3436
}
3537

36-
public void urlVariableNamesExistInParameters(ExecutableElement element, List<String> variableNames, IsValid valid) {
38+
public void urlVariableNamesExistInParameters(ExecutableElement element, Set<String> variableNames, IsValid valid) {
3739

3840
List<? extends VariableElement> parameters = element.getParameters();
3941

@@ -53,7 +55,7 @@ public void urlVariableNamesExistInParameters(ExecutableElement element, List<St
5355

5456
public void urlVariableNamesExistInParametersAndHasNoOneMoreParameter(ExecutableElement element, IsValid valid) {
5557
if (valid.isValid()) {
56-
List<String> variableNames = extractUrlVariableNames(element);
58+
Set<String> variableNames = extractUrlVariableNames(element);
5759
urlVariableNamesExistInParameters(element, variableNames, valid);
5860
if (valid.isValid()) {
5961
List<? extends VariableElement> parameters = element.getParameters();
@@ -65,10 +67,10 @@ public void urlVariableNamesExistInParametersAndHasNoOneMoreParameter(Executable
6567
}
6668
}
6769
}
68-
70+
6971
public void urlVariableNamesExistInParametersAndHasOnlyOneMoreParameter(ExecutableElement element, IsValid valid) {
7072
if (valid.isValid()) {
71-
List<String> variableNames = extractUrlVariableNames(element);
73+
Set<String> variableNames = extractUrlVariableNames(element);
7274
urlVariableNamesExistInParameters(element, variableNames, valid);
7375
if (valid.isValid()) {
7476
List<? extends VariableElement> parameters = element.getParameters();
@@ -84,7 +86,7 @@ public void urlVariableNamesExistInParametersAndHasOnlyOneMoreParameter(Executab
8486
/** Captures URI template variable names. */
8587
private static final Pattern NAMES_PATTERN = Pattern.compile("\\{([^/]+?)\\}");
8688

87-
public List<String> extractUrlVariableNames(ExecutableElement element) {
89+
public Set<String> extractUrlVariableNames(ExecutableElement element) {
8890

8991
// extract variables name from root url isn't really useful
9092

@@ -94,7 +96,7 @@ public List<String> extractUrlVariableNames(ExecutableElement element) {
9496
// String urlSuffix = extractAnnotationValue(element);
9597
// String uriTemplate = urlPrefix + urlSuffix;
9698

97-
List<String> variableNames = new ArrayList<String>();
99+
Set<String> variableNames = new HashSet<String>();
98100
String uriTemplate = extractAnnotationValueParameter(element);
99101

100102
boolean hasValueInAnnotation = uriTemplate != null;

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/rest/MethodProcessor.java‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.List;
2121
import java.util.Locale;
2222
import java.util.Map;
23+
import java.util.Set;
2324
import java.util.TreeMap;
2425

2526
import javax.annotation.processing.ProcessingEnvironment;
@@ -30,8 +31,9 @@
3031
import org.androidannotations.annotations.rest.Accept;
3132
import org.androidannotations.helper.CanonicalNameConstants;
3233
import org.androidannotations.helper.RestAnnotationHelper;
33-
import org.androidannotations.processing.EBeanHolder;
3434
import org.androidannotations.processing.DecoratingElementProcessor;
35+
import org.androidannotations.processing.EBeanHolder;
36+
3537
import com.sun.codemodel.JBlock;
3638
import com.sun.codemodel.JClass;
3739
import com.sun.codemodel.JCodeModel;
@@ -127,13 +129,14 @@ private JVar generateHashMapVar(MethodProcessorHolder methodHolder) {
127129
TreeMap<String, JVar> methodParams = methodHolder.getMethodParams();
128130
JVar hashMapVar = null;
129131

130-
List<String> urlVariables = restAnnotationHelper.extractUrlVariableNames(element);
132+
Set<String> urlVariables = restAnnotationHelper.extractUrlVariableNames(element);
131133
JClass hashMapClass = codeModel.ref(HashMap.class).narrow(String.class, Object.class);
132134
if (!urlVariables.isEmpty()) {
133135
hashMapVar = body.decl(hashMapClass, "urlVariables", JExpr._new(hashMapClass));
134136

135137
for (String urlVariable : urlVariables) {
136-
body.invoke(hashMapVar, "put").arg(urlVariable).arg(methodParams.get(urlVariable));
138+
JVar urlValue = methodParams.get(urlVariable);
139+
body.invoke(hashMapVar, "put").arg(urlVariable).arg(urlValue);
137140
methodParams.remove(urlVariable);
138141
}
139142
}

‎AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/rest/MyService.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public interface MyService {
4747
@Accept("application/json")
4848
Event[] getEventsArray(String location, int year);
4949

50+
51+
@Get("/events/{year}/{year}")
52+
@Accept(MediaType.APPLICATION_JSON)
53+
Event[][] urlWithAParameterDeclaredTwice(int year);
54+
5055
@Get("/events/{year}/{location}")
5156
@Accept(MediaType.APPLICATION_JSON)
5257
Event[][] getEventsArrayOfArrays(String location, int year);

0 commit comments

Comments
 (0)