Skip to content

Commit bed7344

Browse files
committed
Fix IllegalStateException for @OrmLiteDao in view
androidannotations#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 bed7344

10 files changed

Lines changed: 95 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
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2017 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -39,6 +40,7 @@ public class EServiceHolder extends EComponentHolder implements HasIntentBuilder
3940
private ServiceIntentBuilder intentBuilder;
4041
private JDefinedClass intentBuilderClass;
4142
private ReceiverRegistrationDelegate<EServiceHolder> receiverRegistrationDelegate;
43+
private JBlock onCreateAfterSuperBlock;
4244
private JBlock onDestroyBeforeSuperBlock;
4345

4446
public EServiceHolder(AndroidAnnotationsEnvironment environment, TypeElement annotatedElement, AndroidManifest androidManifest) throws Exception {
@@ -70,6 +72,7 @@ private void setOnCreate() {
7072
JBlock onCreateBody = onCreate.body();
7173
onCreateBody.invoke(getInit());
7274
onCreateBody.invoke(JExpr._super(), onCreate);
75+
onCreateAfterSuperBlock = onCreateBody.blockVirtual();
7376
}
7477

7578
private void setOnDestroy() {
@@ -101,45 +104,16 @@ public JBlock getIntentFilterInitializationBlock(IntentFilterData intentFilterDa
101104
}
102105

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-
}
120116

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-
}
135-
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: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2017 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -17,7 +18,7 @@
1718

1819
import com.helger.jcodemodel.JBlock;
1920

20-
public interface HasLifecycleMethods extends GeneratedClassHolder {
21+
public interface HasActivityLifecycleMethods extends GeneratedClassHolder {
2122

2223
JBlock getOnCreateAfterSuperBlock();
2324
JBlock getOnDestroyBeforeSuperBlock();
@@ -27,7 +28,4 @@ public interface HasLifecycleMethods extends GeneratedClassHolder {
2728

2829
JBlock getOnResumeAfterSuperBlock();
2930
JBlock getOnPauseBeforeSuperBlock();
30-
31-
JBlock getOnAttachAfterSuperBlock();
32-
JBlock getOnDetachBeforeSuperBlock();
3331
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2017 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -21,7 +22,7 @@
2122
import com.helger.jcodemodel.JBlock;
2223
import com.helger.jcodemodel.JFieldVar;
2324

24-
public interface HasReceiverRegistration extends HasLifecycleMethods {
25+
public interface HasReceiverRegistration extends HasSimpleLifecycleMethods {
2526

2627
IJExpression getContextRef();
2728

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Copyright (C) 2016-2017 the AndroidAnnotations project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package org.androidannotations.holder;
17+
18+
import com.helger.jcodemodel.JBlock;
19+
20+
public interface HasSimpleLifecycleMethods extends GeneratedClassHolder {
21+
22+
JBlock getStartLifecycleAfterSuperBlock();
23+
JBlock getEndLifecycleBeforeSuperBlock();
24+
}

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

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2010-2016 eBusiness Information, Excilys Group
3+
* Copyright (C) 2016-2017 the AndroidAnnotations project
34
*
45
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
56
* use this file except in compliance with the License. You may obtain a copy of
@@ -35,7 +36,6 @@
3536
public class ReceiverRegistrationDelegate<T extends EComponentHolder & HasReceiverRegistration> extends GeneratedClassHolderDelegate<T> {
3637

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

4040
public ReceiverRegistrationDelegate(T holder) {
4141
super(holder);
@@ -66,38 +66,6 @@ private JFieldVar createIntentFilterField(IntentFilterData intentFilterData) {
6666
return intentFilterField;
6767
}
6868

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-
10169
public static class IntentFilterData {
10270

10371
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;

0 commit comments

Comments
 (0)