Skip to content

Commit 0dd6534

Browse files
committed
allow to inject shared preferences into @PREF annotated method
1 parent fca69f6 commit 0dd6534

3 files changed

Lines changed: 29 additions & 9 deletions

File tree

  • AndroidAnnotations/androidannotations-core

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@
6060
* @see SharedPref
6161
*/
6262
@Retention(RetentionPolicy.CLASS)
63-
@Target(ElementType.FIELD)
63+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
6464
public @interface Pref {
6565
}

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

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,28 @@
2424
import org.androidannotations.ElementValidation;
2525
import org.androidannotations.annotations.sharedpreferences.Pref;
2626
import org.androidannotations.annotations.sharedpreferences.SharedPref;
27+
import org.androidannotations.handler.MethodInjectionHandler;
28+
import org.androidannotations.helper.InjectHelper;
2729
import org.androidannotations.holder.EComponentHolder;
2830
import org.androidannotations.holder.GeneratedClassHolder;
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 PrefHandler extends CoreBaseAnnotationHandler<EComponentHolder> {
37+
public class PrefHandler extends CoreBaseAnnotationHandler<EComponentHolder>implements MethodInjectionHandler<EComponentHolder> {
38+
39+
private final InjectHelper<EComponentHolder> injectHelper;
3640

3741
public PrefHandler(AndroidAnnotationsEnvironment environment) {
3842
super(Pref.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(Pref.class, element, validation);
4449

4550
validatorHelper.isNotPrivate(element, validation);
4651

@@ -49,9 +54,17 @@ public void validate(Element element, ElementValidation validation) {
4954

5055
@Override
5156
public void process(Element element, EComponentHolder holder) {
57+
injectHelper.process(element, holder);
58+
}
59+
60+
@Override
61+
public JBlock getInvocationBlock(EComponentHolder holder) {
62+
return holder.getInitBodyInjectionBlock();
63+
}
5264

53-
String fieldName = element.getSimpleName().toString();
54-
TypeMirror fieldTypeMirror = element.asType();
65+
@Override
66+
public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) {
67+
TypeMirror fieldTypeMirror = param.asType();
5568
AbstractJClass prefClass = getJClass(fieldTypeMirror.toString());
5669

5770
String elementTypeName = fieldTypeMirror.toString();
@@ -71,8 +84,11 @@ public void process(Element element, EComponentHolder holder) {
7184
}
7285
}
7386

74-
JBlock methodBody = holder.getInitBodyInjectionBlock();
75-
JFieldRef field = JExpr.ref(fieldName);
76-
methodBody.assign(field, JExpr._new(prefClass).arg(holder.getContextRef()));
87+
targetBlock.add(fieldRef.assign(JExpr._new(prefClass).arg(holder.getContextRef())));
88+
}
89+
90+
@Override
91+
public void validateEnclosingElement(Element element, ElementValidation valid) {
92+
validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, valid);
7793
}
7894
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/CoreValidatorHelper.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ public void applicationRegistered(Element element, AndroidManifest manifest, Ele
116116
public void isSharedPreference(Element element, ElementValidation valid) {
117117

118118
TypeMirror type = element.asType();
119+
if (element instanceof ExecutableElement) {
120+
element = ((ExecutableElement) element).getParameters().get(0);
121+
type = element.asType();
122+
}
119123

120124
/*
121125
* The type is not available yet because it has just been generated

0 commit comments

Comments
 (0)