Skip to content

Commit 40b6f7d

Browse files
committed
allow to inject rest service into @restservice annotated methods
1 parent a3256f4 commit 40b6f7d

2 files changed

Lines changed: 26 additions & 11 deletions

File tree

  • AndroidAnnotations/androidannotations-rest-spring

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,6 @@
6969
* @see Rest
7070
*/
7171
@Retention(RetentionPolicy.CLASS)
72-
@Target(ElementType.FIELD)
72+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
7373
public @interface RestService {
7474
}

‎AndroidAnnotations/androidannotations-rest-spring/rest-spring/src/main/java/org/androidannotations/rest/spring/handler/RestServiceHandler.java‎

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,61 @@
2323
import org.androidannotations.AndroidAnnotationsEnvironment;
2424
import org.androidannotations.ElementValidation;
2525
import org.androidannotations.handler.BaseAnnotationHandler;
26+
import org.androidannotations.handler.MethodInjectionHandler;
27+
import org.androidannotations.helper.InjectHelper;
2628
import org.androidannotations.holder.EComponentHolder;
2729
import org.androidannotations.rest.spring.annotations.Rest;
2830
import org.androidannotations.rest.spring.annotations.RestService;
2931

3032
import com.helger.jcodemodel.AbstractJClass;
33+
import com.helger.jcodemodel.IJAssignmentTarget;
3134
import com.helger.jcodemodel.JBlock;
3235
import com.helger.jcodemodel.JExpr;
33-
import com.helger.jcodemodel.JFieldRef;
3436

35-
public class RestServiceHandler extends BaseAnnotationHandler<EComponentHolder> {
37+
public class RestServiceHandler extends BaseAnnotationHandler<EComponentHolder>implements MethodInjectionHandler<EComponentHolder> {
38+
39+
private final InjectHelper<EComponentHolder> injectHelper;
3640

3741
public RestServiceHandler(AndroidAnnotationsEnvironment environment) {
3842
super(RestService.class, environment);
43+
injectHelper = new InjectHelper<>(validatorHelper, this);
3944
}
4045

4146
@Override
4247
public void validate(Element element, ElementValidation validation) {
43-
validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, validation);
48+
injectHelper.validate(RestService.class, element, validation);
4449

4550
validatorHelper.isNotPrivate(element, validation);
4651

47-
validatorHelper.typeHasAnnotation(Rest.class, element, validation);
52+
Element param = injectHelper.getParam(element);
53+
validatorHelper.typeHasAnnotation(Rest.class, param, validation);
4854
}
4955

5056
@Override
5157
public void process(Element element, EComponentHolder holder) {
52-
String fieldName = element.getSimpleName().toString();
58+
injectHelper.process(element, holder);
59+
}
60+
61+
@Override
62+
public JBlock getInvocationBlock(EComponentHolder holder) {
63+
return holder.getInitBodyInjectionBlock();
64+
}
5365

54-
TypeMirror fieldTypeMirror = element.asType();
66+
@Override
67+
public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) {
68+
TypeMirror fieldTypeMirror = param.asType();
5569
TypeMirror erasedFieldTypeMirror = getProcessingEnvironment().getTypeUtils().erasure(fieldTypeMirror);
5670
String interfaceName = erasedFieldTypeMirror.toString();
5771

5872
String generatedClassName = interfaceName + classSuffix();
5973

6074
AbstractJClass clazz = codeModelHelper.narrowGeneratedClass(getJClass(generatedClassName), fieldTypeMirror);
6175

62-
JBlock methodBody = holder.getInitBodyInjectionBlock();
63-
64-
JFieldRef field = JExpr.ref(fieldName);
76+
targetBlock.add(fieldRef.assign(JExpr._new(clazz).arg(holder.getContextRef())));
77+
}
6578

66-
methodBody.assign(field, JExpr._new(clazz).arg(holder.getContextRef()));
79+
@Override
80+
public void validateEnclosingElement(Element element, ElementValidation valid) {
81+
validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, valid);
6782
}
6883
}

0 commit comments

Comments
 (0)