Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,7 @@
*/
package org.androidannotations.handler.rest;

import java.util.List;
import java.util.Locale;
import java.util.TreeMap;

import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeKind;

import com.sun.codemodel.*;
import org.androidannotations.handler.BaseAnnotationHandler;
import org.androidannotations.helper.APTCodeModelHelper;
import org.androidannotations.helper.CanonicalNameConstants;
Expand All @@ -33,22 +24,14 @@
import org.androidannotations.model.AnnotationElements;
import org.androidannotations.process.IsValid;

import com.sun.codemodel.JArray;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JCatchBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JConditional;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JExpression;
import com.sun.codemodel.JFieldRef;
import com.sun.codemodel.JForEach;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JOp;
import com.sun.codemodel.JTryBlock;
import com.sun.codemodel.JType;
import com.sun.codemodel.JVar;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeKind;
import java.util.List;
import java.util.Locale;
import java.util.TreeMap;

public abstract class RestMethodHandler extends BaseAnnotationHandler<RestHolder> {

Expand Down Expand Up @@ -81,7 +64,7 @@ public void process(Element element, RestHolder holder) {
JMethod method = holder.getGeneratedClass().method(JMod.PUBLIC, methodReturnClass, methodName);
method.annotate(Override.class);
TreeMap<String, JVar> params = addMethodParams(executableElement, holder, method);
JBlock methodBody = method.body();
JBlock methodBody = new JBlock(false, false);

// RestTemplate exchange() method call
JInvocation exchangeCall = JExpr.invoke(holder.getRestTemplateField(), "exchange");
Expand All @@ -94,18 +77,14 @@ public void process(Element element, RestHolder holder) {
exchangeCall.arg(urlVariables);
}

JExpression returnCall = exchangeCall;
JExpression result = setCookies(executableElement, holder, methodBody, exchangeCall);
if (result != null) {
returnCall = result;
}

if (methodReturnVoid && result == null) {
insertRestTryCatchBlock(holder, methodBody, exchangeCall, methodReturnVoid);
JExpression response = setCookies(executableElement, holder, methodBody, exchangeCall);
if (methodReturnVoid && response.equals(exchangeCall)) {
methodBody.add(exchangeCall);
} else if (!methodReturnVoid) {
returnCall = addResultCallMethod(returnCall, methodReturnClass);
insertRestTryCatchBlock(holder, methodBody, returnCall, methodReturnVoid);
methodBody._return(addResultCallMethod(response, methodReturnClass));
}
methodBody = surroundWithRestTryCatch(holder, methodBody, methodReturnVoid);
method.body().add(methodBody);
}

protected JClass getMethodReturnClass(Element element, RestHolder holder) {
Expand Down Expand Up @@ -171,13 +150,14 @@ protected JExpression addResultCallMethod(JExpression exchangeCall, JClass metho
return exchangeCall;
}

private JFieldRef setCookies(ExecutableElement executableElement, RestHolder restHolder, JBlock methodBody, JInvocation exchangeCall) {
private JExpression setCookies(ExecutableElement executableElement, RestHolder restHolder, JBlock methodBody, JInvocation exchangeCall) {
String[] settingCookies = restAnnotationHelper.settingCookies(executableElement);
if (settingCookies != null) {
boolean methodReturnVoid = executableElement.getReturnType().getKind() == TypeKind.VOID;
JClass methodReturnClass = getMethodReturnClass(executableElement, restHolder);

JClass responseEntityClass = classes().RESPONSE_ENTITY.narrow(methodReturnVoid ? codeModel().VOID : methodReturnClass);
JClass exchangeResponseClass = restAnnotationHelper.retrieveResponseClass(executableElement.getReturnType(), restHolder);
JType narrowType = exchangeResponseClass == null || methodReturnVoid ? codeModel().VOID : exchangeResponseClass;
JClass responseEntityClass = classes().RESPONSE_ENTITY.narrow(narrowType);
JVar responseEntity = methodBody.decl(responseEntityClass, "response", exchangeCall);

// set cookies
Expand Down Expand Up @@ -214,9 +194,9 @@ private JFieldRef setCookies(ExecutableElement executableElement, RestHolder res
thenBlock.invoke(restHolder.getAvailableCookiesField(), "put").arg(innerForEach.var()).arg(cookieValue);
thenBlock._break();

return JExpr.ref(responseEntity.name());
return responseEntity;
}
return null;
return exchangeCall;
}

/**
Expand All @@ -227,14 +207,11 @@ private JFieldRef setCookies(ExecutableElement executableElement, RestHolder res
* if void). If the handler isn't set, it will re-throw the exception so
* that it behaves as it did previous to this feature.
*/
private void insertRestTryCatchBlock(RestHolder holder, JBlock body, JExpression returnCall, boolean methodReturnVoid) {
JTryBlock tryBlock = body._try();
private JBlock surroundWithRestTryCatch(RestHolder holder, JBlock block, boolean methodReturnVoid) {
JBlock newBlock = new JBlock(false, false);

if (methodReturnVoid) {
tryBlock.body().add((JInvocation) returnCall);
} else {
tryBlock.body()._return(returnCall);
}
JTryBlock tryBlock = newBlock._try();
codeModelHelper.copy(block, tryBlock.body());

JCatchBlock jCatch = tryBlock._catch(classes().REST_CLIENT_EXCEPTION);

Expand All @@ -254,5 +231,7 @@ private void insertRestTryCatchBlock(RestHolder holder, JBlock body, JExpression

// re-throw the exception if handler wasn't set.
conditional._else()._throw(exceptionParam);

return newBlock;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,17 @@
*/
package org.androidannotations.helper;

import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.ArrayType;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.type.WildcardType;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.Types;

import com.sun.codemodel.*;
import org.androidannotations.holder.EComponentHolder;
import org.androidannotations.holder.GeneratedClassHolder;

import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JExpression;
import com.sun.codemodel.JFieldRef;
import com.sun.codemodel.JFormatter;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JStatement;
import com.sun.codemodel.JSuperWildcard;
import com.sun.codemodel.JType;
import com.sun.codemodel.JVar;
import javax.lang.model.element.*;
import javax.lang.model.type.*;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.Types;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.*;

public class APTCodeModelHelper {

Expand Down Expand Up @@ -265,7 +236,11 @@ public JBlock removeBody(JMethod method) {
}

JBlock clonedBody = new JBlock(false, false);
copy(body, clonedBody);
return clonedBody;
}

public void copy(JBlock body, JBlock newBody) {
for (Object statement : body.getContents()) {
if (statement instanceof JVar) {
JVar var = (JVar) statement;
Expand All @@ -274,16 +249,14 @@ public JBlock removeBody(JMethod method) {
varInitField.setAccessible(true);
JExpression varInit = (JExpression) varInitField.get(var);

clonedBody.decl(var.type(), var.name(), varInit);
newBody.decl(var.type(), var.name(), varInit);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
clonedBody.add((JStatement) statement);
newBody.add((JStatement) statement);
}
}

return clonedBody;
}

public void replaceSuperCall(JMethod method, JBlock replacement) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@
*/
package org.androidannotations.test15.rest;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.androidannotations.annotations.rest.*;
import org.androidannotations.api.rest.MediaType;
import org.springframework.http.HttpAuthentication;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
Expand All @@ -27,20 +25,9 @@
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import org.androidannotations.annotations.rest.Accept;
import org.androidannotations.annotations.rest.Delete;
import org.androidannotations.annotations.rest.Get;
import org.androidannotations.annotations.rest.Head;
import org.androidannotations.annotations.rest.Options;
import org.androidannotations.annotations.rest.Post;
import org.androidannotations.annotations.rest.Put;
import org.androidannotations.annotations.rest.RequiresAuthentication;
import org.androidannotations.annotations.rest.RequiresCookie;
import org.androidannotations.annotations.rest.RequiresCookieInUrl;
import org.androidannotations.annotations.rest.RequiresHeader;
import org.androidannotations.annotations.rest.Rest;
import org.androidannotations.annotations.rest.SetsCookie;
import org.androidannotations.api.rest.MediaType;
import java.util.List;
import java.util.Map;
import java.util.Set;

// if defined, the rootUrl will be added as a prefix to every request
@Rest(rootUrl = "http://company.com/ajax/services", converters = { MappingJacksonHttpMessageConverter.class }, interceptors = { RequestInterceptor.class })
Expand Down Expand Up @@ -113,6 +100,7 @@ public interface MyService {
GenericEvent<GenericEvent<GenericEvent<String>>> getEventsGenericsInception(String location, int year) throws RestClientException;

@Get("/events/{year}/{location}")
@SetsCookie({ "xt", "sjsaid" })
Map<String, Event> getEventsGenericsMap(String location, int year) throws RestClientException;

@RequiresCookie("sjsaid")
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.