Skip to content

Commit a97b8ad

Browse files
committed
allow to inject https client into @HttpsClient annotated method
1 parent 81e5da4 commit a97b8ad

2 files changed

Lines changed: 25 additions & 8 deletions

File tree

  • AndroidAnnotations/androidannotations-core

‎AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/HttpsClient.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
* </blockquote>
8888
*/
8989
@Retention(RetentionPolicy.CLASS)
90-
@Target(ElementType.FIELD)
90+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
9191
public @interface HttpsClient {
9292

9393
/**

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

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,21 @@
2121
import static com.helger.jcodemodel.JExpr.cast;
2222
import static com.helger.jcodemodel.JExpr.invoke;
2323
import static com.helger.jcodemodel.JExpr.lit;
24-
import static com.helger.jcodemodel.JExpr.ref;
2524

2625
import javax.lang.model.element.Element;
2726

2827
import org.androidannotations.AndroidAnnotationsEnvironment;
2928
import org.androidannotations.ElementValidation;
3029
import org.androidannotations.annotations.HttpsClient;
3130
import org.androidannotations.handler.BaseAnnotationHandler;
31+
import org.androidannotations.handler.MethodInjectionHandler;
32+
import org.androidannotations.helper.InjectHelper;
3233
import org.androidannotations.holder.EComponentHolder;
3334
import org.androidannotations.internal.process.ProcessHolder;
3435
import org.androidannotations.rclass.IRClass;
3536
import org.androidannotations.rclass.IRInnerClass;
3637

38+
import com.helger.jcodemodel.IJAssignmentTarget;
3739
import com.helger.jcodemodel.IJExpression;
3840
import com.helger.jcodemodel.JBlock;
3941
import com.helger.jcodemodel.JCatchBlock;
@@ -45,15 +47,18 @@
4547
import com.helger.jcodemodel.JTryBlock;
4648
import com.helger.jcodemodel.JVar;
4749

48-
public class HttpsClientHandler extends BaseAnnotationHandler<EComponentHolder> {
50+
public class HttpsClientHandler extends BaseAnnotationHandler<EComponentHolder>implements MethodInjectionHandler<EComponentHolder> {
51+
52+
private final InjectHelper<EComponentHolder> injectHelper;
4953

5054
public HttpsClientHandler(AndroidAnnotationsEnvironment environment) {
5155
super(HttpsClient.class, environment);
56+
injectHelper = new InjectHelper<>(validatorHelper, this);
5257
}
5358

5459
@Override
5560
public void validate(Element element, ElementValidation validation) {
56-
validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, validation);
61+
injectHelper.validate(HttpsClient.class, element, validation);
5762

5863
validatorHelper.annotationParameterIsOptionalValidResId(element, IRClass.Res.RAW, "keyStore", validation);
5964
validatorHelper.annotationParameterIsOptionalValidResId(element, IRClass.Res.RAW, "trustStore", validation);
@@ -63,6 +68,16 @@ public void validate(Element element, ElementValidation validation) {
6368

6469
@Override
6570
public void process(Element element, EComponentHolder holder) throws Exception {
71+
injectHelper.process(element, holder);
72+
}
73+
74+
@Override
75+
public JBlock getInvocationBlock(EComponentHolder holder) {
76+
return holder.getInitBodyInjectionBlock();
77+
}
78+
79+
@Override
80+
public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) {
6681
IRInnerClass rInnerClass = getEnvironment().getRClass().get(IRClass.Res.RAW);
6782
HttpsClient annotation = element.getAnnotation(HttpsClient.class);
6883
JFieldRef trustStoreRawIdRef = annotationHelper.extractOneAnnotationFieldRef(element, getTarget(), rInnerClass, false, "trustStore", "trustStoreResName");
@@ -74,9 +89,6 @@ public void process(Element element, EComponentHolder holder) throws Exception {
7489
boolean useCustomTrustStore = trustStoreRawIdRef != null;
7590
boolean useCustomKeyStore = keyStoreRawIdRef != null;
7691

77-
String fieldName = element.getSimpleName().toString();
78-
JBlock methodBody = holder.getInitBodyInjectionBlock();
79-
8092
ProcessHolder.Classes classes = getClasses();
8193

8294
JDefinedClass jAnonClass = getCodeModel().anonymousClass(classes.DEFAULT_HTTP_CLIENT);
@@ -177,6 +189,11 @@ public void process(Element element, EComponentHolder holder) throws Exception {
177189
jCatchBlock.body().add(jVarExceptionParam.invoke("printStackTrace"));
178190
jCatchBlock.body()._return(_super().invoke("createClientConnectionManager"));
179191

180-
methodBody.assign(ref(fieldName), _new(jAnonClass));
192+
targetBlock.add(fieldRef.assign(_new(jAnonClass)));
193+
}
194+
195+
@Override
196+
public void validateEnclosingElement(Element element, ElementValidation valid) {
197+
validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, valid);
181198
}
182199
}

0 commit comments

Comments
 (0)