Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Commit bc8aba4

Browse files
committed
Fix IllegalStateException for @OrmLiteDao in view
#2048 This commit contains a bigger refactor as well: the previous implementation contained HasLifecycleMethods interface, which was implemented by most all the components, even if they do not have the specific methods. This is now changed.
1 parent becc2cb commit bc8aba4

10 files changed

Lines changed: 76 additions & 136 deletions

File tree

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
import com.helger.jcodemodel.JMod;
5555
import com.helger.jcodemodel.JVar;
5656

57-
public class EActivityHolder extends EComponentWithViewSupportHolder implements HasIntentBuilder, HasExtras, HasInstanceState, HasOptionsMenu, HasOnActivityResult, HasReceiverRegistration,
58-
HasPreferenceHeaders {
57+
public class EActivityHolder extends EComponentWithViewSupportHolder implements HasIntentBuilder, HasExtras, HasInstanceState, HasOptionsMenu, HasOnActivityResult, HasActivityLifecycleMethods,
58+
HasReceiverRegistration, HasPreferenceHeaders {
5959

6060
private ActivityIntentBuilder intentBuilder;
6161
private JMethod onCreate;
@@ -726,15 +726,14 @@ public JBlock getOnPauseAfterSuperBlock() {
726726
return onPauseAfterSuperBlock;
727727
}
728728

729-
730729
@Override
731-
public JBlock getOnAttachAfterSuperBlock() {
732-
return receiverRegistrationDelegate.getOnAttachAfterSuperBlock();
730+
public JBlock getStartLifecycleAfterSuperBlock() {
731+
return getOnCreateAfterSuperBlock();
733732
}
734733

735734
@Override
736-
public JBlock getOnDetachBeforeSuperBlock() {
737-
return receiverRegistrationDelegate.getOnDetachBeforeSuperBlock();
735+
public JBlock getEndLifecycleBeforeSuperBlock() {
736+
return getOnDestroyAfterSuperBlock();
738737
}
739738

740739
@Override

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@
5151
import com.helger.jcodemodel.JMod;
5252
import com.helger.jcodemodel.JVar;
5353

54-
public class EFragmentHolder extends EComponentWithViewSupportHolder implements HasInstanceState, HasOptionsMenu, HasOnActivityResult, HasReceiverRegistration, HasPreferences {
54+
public class EFragmentHolder extends EComponentWithViewSupportHolder implements HasInstanceState, HasOptionsMenu, HasOnActivityResult, HasActivityLifecycleMethods,
55+
HasReceiverRegistration, HasPreferences {
5556

5657
private JFieldVar contentView;
5758
private JFieldVar viewDestroyedField;
@@ -486,6 +487,16 @@ public JFieldVar getIntentFilterField(IntentFilterData intentFilterData) {
486487
return receiverRegistrationDelegate.getIntentFilterField(intentFilterData);
487488
}
488489

490+
@Override
491+
public JBlock getStartLifecycleAfterSuperBlock() {
492+
return getOnCreateAfterSuperBlock();
493+
}
494+
495+
@Override
496+
public JBlock getEndLifecycleBeforeSuperBlock() {
497+
return getOnDestroyBeforeSuperBlock();
498+
}
499+
489500
@Override
490501
public JBlock getOnCreateAfterSuperBlock() {
491502
if (onCreateAfterSuperBlock == null) {
@@ -534,15 +545,13 @@ public JBlock getOnPauseBeforeSuperBlock() {
534545
return onPauseBeforeSuperBlock;
535546
}
536547

537-
@Override
538548
public JBlock getOnAttachAfterSuperBlock() {
539549
if (onAttachAfterSuperBlock == null) {
540550
setOnAttach();
541551
}
542552
return onAttachAfterSuperBlock;
543553
}
544554

545-
@Override
546555
public JBlock getOnDetachBeforeSuperBlock() {
547556
if (onDetachBeforeSuperBlock == null) {
548557
setOnDetach();

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EServiceHolder.java‎

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class EServiceHolder extends EComponentHolder implements HasIntentBuilder
3939
private ServiceIntentBuilder intentBuilder;
4040
private JDefinedClass intentBuilderClass;
4141
private ReceiverRegistrationDelegate<EServiceHolder> receiverRegistrationDelegate;
42+
private JBlock onCreateAfterSuperBlock;
4243
private JBlock onDestroyBeforeSuperBlock;
4344

4445
public EServiceHolder(AndroidAnnotationsEnvironment environment, TypeElement annotatedElement, AndroidManifest androidManifest) throws Exception {
@@ -70,6 +71,7 @@ private void setOnCreate() {
7071
JBlock onCreateBody = onCreate.body();
7172
onCreateBody.invoke(getInit());
7273
onCreateBody.invoke(JExpr._super(), onCreate);
74+
onCreateAfterSuperBlock = onCreateBody.blockVirtual();
7375
}
7476

7577
private void setOnDestroy() {
@@ -100,46 +102,18 @@ public JBlock getIntentFilterInitializationBlock(IntentFilterData intentFilterDa
100102
return getInitBodyInjectionBlock();
101103
}
102104

105+
103106
@Override
104-
public JBlock getOnCreateAfterSuperBlock() {
105-
return getInitBody();
107+
public JBlock getStartLifecycleAfterSuperBlock() {
108+
return onCreateAfterSuperBlock;
106109
}
107110

108111
@Override
109-
public JBlock getOnDestroyBeforeSuperBlock() {
112+
public JBlock getEndLifecycleBeforeSuperBlock() {
110113
if (onDestroyBeforeSuperBlock == null) {
111114
setOnDestroy();
112115
}
113-
return onDestroyBeforeSuperBlock;
114-
}
115-
116-
@Override
117-
public JBlock getOnStartAfterSuperBlock() {
118-
return receiverRegistrationDelegate.getOnStartAfterSuperBlock();
119-
}
120-
121-
@Override
122-
public JBlock getOnStopBeforeSuperBlock() {
123-
return receiverRegistrationDelegate.getOnStopBeforeSuperBlock();
124-
}
125-
126-
@Override
127-
public JBlock getOnResumeAfterSuperBlock() {
128-
return receiverRegistrationDelegate.getOnResumeAfterSuperBlock();
129-
}
130-
131-
@Override
132-
public JBlock getOnPauseBeforeSuperBlock() {
133-
return receiverRegistrationDelegate.getOnPauseBeforeSuperBlock();
134-
}
135116

136-
@Override
137-
public JBlock getOnAttachAfterSuperBlock() {
138-
return receiverRegistrationDelegate.getOnAttachAfterSuperBlock();
139-
}
140-
141-
@Override
142-
public JBlock getOnDetachBeforeSuperBlock() {
143-
return receiverRegistrationDelegate.getOnDetachBeforeSuperBlock();
117+
return onDestroyBeforeSuperBlock;
144118
}
145119
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EViewHolder.java‎

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -169,42 +169,12 @@ public JFieldVar getAlreadyInflated() {
169169
}
170170

171171
@Override
172-
public JBlock getOnCreateAfterSuperBlock() {
173-
return receiverRegistrationDelegate.getOnCreateAfterSuperBlock();
174-
}
175-
176-
@Override
177-
public JBlock getOnDestroyBeforeSuperBlock() {
178-
return receiverRegistrationDelegate.getOnDestroyBeforeSuperBlock();
179-
}
180-
181-
@Override
182-
public JBlock getOnStartAfterSuperBlock() {
183-
return receiverRegistrationDelegate.getOnStartAfterSuperBlock();
184-
}
185-
186-
@Override
187-
public JBlock getOnStopBeforeSuperBlock() {
188-
return receiverRegistrationDelegate.getOnStopBeforeSuperBlock();
189-
}
190-
191-
@Override
192-
public JBlock getOnResumeAfterSuperBlock() {
193-
return receiverRegistrationDelegate.getOnResumeAfterSuperBlock();
194-
}
195-
196-
@Override
197-
public JBlock getOnPauseBeforeSuperBlock() {
198-
return receiverRegistrationDelegate.getOnPauseBeforeSuperBlock();
199-
}
200-
201-
@Override
202-
public JBlock getOnAttachAfterSuperBlock() {
172+
public JBlock getStartLifecycleAfterSuperBlock() {
203173
return getOnAttachedToWindowAfterSuperBlock();
204174
}
205175

206176
@Override
207-
public JBlock getOnDetachBeforeSuperBlock() {
177+
public JBlock getEndLifecycleBeforeSuperBlock() {
208178
return getOnDetachedToWindowBeforeSuperBlock();
209179
}
210180

AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasLifecycleMethods.java renamed to AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasActivityLifecycleMethods.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import com.helger.jcodemodel.JBlock;
1919

20-
public interface HasLifecycleMethods extends GeneratedClassHolder {
20+
public interface HasActivityLifecycleMethods extends GeneratedClassHolder {
2121

2222
JBlock getOnCreateAfterSuperBlock();
2323
JBlock getOnDestroyBeforeSuperBlock();
@@ -27,7 +27,4 @@ public interface HasLifecycleMethods extends GeneratedClassHolder {
2727

2828
JBlock getOnResumeAfterSuperBlock();
2929
JBlock getOnPauseBeforeSuperBlock();
30-
31-
JBlock getOnAttachAfterSuperBlock();
32-
JBlock getOnDetachBeforeSuperBlock();
3330
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasReceiverRegistration.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import com.helger.jcodemodel.JBlock;
2222
import com.helger.jcodemodel.JFieldVar;
2323

24-
public interface HasReceiverRegistration extends HasLifecycleMethods {
24+
public interface HasReceiverRegistration extends HasSimpleLifecycleMethods {
2525

2626
IJExpression getContextRef();
2727

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.androidannotations.holder;
2+
3+
import com.helger.jcodemodel.JBlock;
4+
5+
public interface HasSimpleLifecycleMethods extends GeneratedClassHolder {
6+
7+
JBlock getStartLifecycleAfterSuperBlock();
8+
JBlock getEndLifecycleBeforeSuperBlock();
9+
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/ReceiverRegistrationDelegate.java‎

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
public class ReceiverRegistrationDelegate<T extends EComponentHolder & HasReceiverRegistration> extends GeneratedClassHolderDelegate<T> {
3636

3737
private Map<IntentFilterData, JFieldVar> intentFilterFields = new HashMap<>();
38-
private IllegalStateException illegalStateException = new IllegalStateException("This shouldn't happen unless the validation is bad");
3938

4039
public ReceiverRegistrationDelegate(T holder) {
4140
super(holder);
@@ -66,38 +65,6 @@ private JFieldVar createIntentFilterField(IntentFilterData intentFilterData) {
6665
return intentFilterField;
6766
}
6867

69-
public JBlock getOnStartAfterSuperBlock() {
70-
throw illegalStateException;
71-
}
72-
73-
public JBlock getOnStopBeforeSuperBlock() {
74-
throw illegalStateException;
75-
}
76-
77-
public JBlock getOnPauseBeforeSuperBlock() {
78-
throw illegalStateException;
79-
}
80-
81-
public JBlock getOnAttachAfterSuperBlock() {
82-
throw illegalStateException;
83-
}
84-
85-
public JBlock getOnDetachBeforeSuperBlock() {
86-
throw illegalStateException;
87-
}
88-
89-
public JBlock getOnResumeAfterSuperBlock() {
90-
throw illegalStateException;
91-
}
92-
93-
public JBlock getOnCreateAfterSuperBlock() {
94-
throw illegalStateException;
95-
}
96-
97-
public JBlock getOnDestroyBeforeSuperBlock() {
98-
throw illegalStateException;
99-
}
100-
10168
public static class IntentFilterData {
10269

10370
private final RegisterAt registerAt;

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

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import org.androidannotations.handler.AnnotationHandler;
3737
import org.androidannotations.handler.HasParameterHandlers;
3838
import org.androidannotations.helper.CanonicalNameConstants;
39+
import org.androidannotations.holder.EFragmentHolder;
40+
import org.androidannotations.holder.HasActivityLifecycleMethods;
3941
import org.androidannotations.holder.HasReceiverRegistration;
4042
import org.androidannotations.holder.ReceiverRegistrationDelegate.IntentFilterData;
4143

@@ -138,22 +140,35 @@ private JFieldVar createReceiverField(HasReceiverRegistration holder, String rec
138140
private void registerAndUnregisterReceiver(HasReceiverRegistration holder, Receiver.RegisterAt registerAt, JFieldVar intentFilterField, JFieldVar receiverField, boolean local) {
139141
JBlock registerBlock = null;
140142
JBlock unregisterBlock = null;
141-
switch (registerAt) {
142-
case OnCreateOnDestroy:
143-
registerBlock = holder.getOnCreateAfterSuperBlock();
144-
unregisterBlock = holder.getOnDestroyBeforeSuperBlock();
145-
break;
146-
case OnStartOnStop:
147-
registerBlock = holder.getOnStartAfterSuperBlock();
148-
unregisterBlock = holder.getOnStopBeforeSuperBlock();
149-
break;
150-
case OnResumeOnPause:
151-
registerBlock = holder.getOnResumeAfterSuperBlock();
152-
unregisterBlock = holder.getOnPauseBeforeSuperBlock();
153-
break;
154-
case OnAttachOnDetach:
155-
registerBlock = holder.getOnAttachAfterSuperBlock();
156-
unregisterBlock = holder.getOnDetachBeforeSuperBlock();
143+
144+
if (holder instanceof HasActivityLifecycleMethods) {
145+
HasActivityLifecycleMethods activityLifecycleMethods = (HasActivityLifecycleMethods) holder;
146+
147+
switch (registerAt) {
148+
case OnCreateOnDestroy:
149+
registerBlock = activityLifecycleMethods.getOnCreateAfterSuperBlock();
150+
unregisterBlock = activityLifecycleMethods.getOnDestroyBeforeSuperBlock();
151+
break;
152+
case OnStartOnStop:
153+
registerBlock = activityLifecycleMethods.getOnStartAfterSuperBlock();
154+
unregisterBlock = activityLifecycleMethods.getOnStopBeforeSuperBlock();
155+
break;
156+
case OnResumeOnPause:
157+
registerBlock = activityLifecycleMethods.getOnResumeAfterSuperBlock();
158+
unregisterBlock = activityLifecycleMethods.getOnPauseBeforeSuperBlock();
159+
break;
160+
}
161+
162+
if (holder instanceof EFragmentHolder && registerAt == Receiver.RegisterAt.OnAttachOnDetach) {
163+
EFragmentHolder fragmentHolder = (EFragmentHolder) holder;
164+
165+
registerBlock = fragmentHolder.getOnAttachAfterSuperBlock();
166+
unregisterBlock = fragmentHolder.getOnDetachBeforeSuperBlock();
167+
}
168+
169+
} else {
170+
registerBlock = holder.getStartLifecycleAfterSuperBlock();
171+
unregisterBlock = holder.getEndLifecycleBeforeSuperBlock();
157172
}
158173

159174
IJExpression broadcastManager;

‎AndroidAnnotations/androidannotations-ormlite/ormlite/src/main/java/org/androidannotations/ormlite/holder/OrmLiteHolder.java‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.androidannotations.helper.CaseHelper;
2727
import org.androidannotations.helper.ModelConstants;
2828
import org.androidannotations.holder.EComponentHolder;
29-
import org.androidannotations.holder.HasLifecycleMethods;
29+
import org.androidannotations.holder.HasSimpleLifecycleMethods;
3030
import org.androidannotations.ormlite.helper.OrmLiteClasses;
3131
import org.androidannotations.plugin.PluginClassHolder;
3232

@@ -47,7 +47,7 @@ public JFieldVar getDatabaseHelperRef(TypeMirror databaseHelperTypeMirror) {
4747
JFieldVar databaseHelperRef = databaseHelperRefs.get(databaseHelperTypeMirror);
4848
if (databaseHelperRef == null) {
4949
databaseHelperRef = setDatabaseHelperRef(databaseHelperTypeMirror);
50-
injectReleaseInOnDestroy(databaseHelperRef);
50+
injectReleaseAtEndLifecycle(databaseHelperRef);
5151
}
5252
return databaseHelperRef;
5353
}
@@ -65,12 +65,12 @@ private JFieldVar setDatabaseHelperRef(TypeMirror databaseHelperTypeMirror) {
6565
return databaseHelperRef;
6666
}
6767

68-
private void injectReleaseInOnDestroy(JFieldVar databaseHelperRef) {
69-
if (holder() instanceof HasLifecycleMethods) {
70-
JBlock destroyBody = ((HasLifecycleMethods) holder()).getOnDestroyBeforeSuperBlock();
68+
private void injectReleaseAtEndLifecycle(JFieldVar databaseHelperRef) {
69+
if (holder() instanceof HasSimpleLifecycleMethods) {
70+
JBlock endLifecycleBody = ((HasSimpleLifecycleMethods) holder()).getEndLifecycleBeforeSuperBlock();
7171

72-
destroyBody.staticInvoke(getJClass(OrmLiteClasses.OPEN_HELPER_MANAGER), "releaseHelper");
73-
destroyBody.assign(databaseHelperRef, _null());
72+
endLifecycleBody.staticInvoke(getJClass(OrmLiteClasses.OPEN_HELPER_MANAGER), "releaseHelper");
73+
endLifecycleBody.assign(databaseHelperRef, _null());
7474
}
7575
}
7676

0 commit comments

Comments
 (0)