diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/ViewsInjectionOrderActivity.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/ViewsInjectionOrderActivity.java new file mode 100644 index 0000000000..613ca8cc9c --- /dev/null +++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/ViewsInjectionOrderActivity.java @@ -0,0 +1,35 @@ +/** + * Copyright (C) 2016-2017 the AndroidAnnotations project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.androidannotations.test; + +import java.util.List; + +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.ViewsById; + +import android.app.Activity; +import android.widget.TextView; + +@EActivity(R.layout.views_injected) +public class ViewsInjectionOrderActivity extends Activity { + + List methodInjectedViews; + + @ViewsById({ R.id.my_text_view, R.id.someView }) + void methodInjectedViews(List someView) { + methodInjectedViews = someView; + } +} diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/ViewsInjectedActivityTest.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/ViewsInjectedActivityTest.java index 45deeb43fe..491e278e4e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/ViewsInjectedActivityTest.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/ViewsInjectedActivityTest.java @@ -1,5 +1,6 @@ /** * Copyright (C) 2010-2016 eBusiness Information, Excilys Group + * Copyright (C) 2016-2017 the AndroidAnnotations project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of @@ -87,6 +88,13 @@ public void methodInjectedViewsNotNullAndHasTwoElements() { assertThat(activity.methodInjectedViews).hasSize(2); } + @Test + public void methodInjectedViewsNotNullAndHasTwoElements2() { + ViewsInjectionOrderActivity_ inOrderActivity = Robolectric.buildActivity(ViewsInjectionOrderActivity_.class).create().get(); + assertThat(inOrderActivity.methodInjectedViews).isNotNull(); + assertThat(inOrderActivity.methodInjectedViews).hasSize(2); + } + @Test public void multiInjectedViewsNotNullAndHasTwoElements() { assertThat(activity.multiInjectedViews).isNotNull(); diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java index 65ff565365..c9bb48a9d0 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java @@ -1,5 +1,6 @@ /** * Copyright (C) 2010-2016 eBusiness Information, Excilys Group + * Copyright (C) 2016-2017 the AndroidAnnotations project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of @@ -54,6 +55,7 @@ public abstract class EComponentWithViewSupportHolder extends EComponentHolder i private JMethod onViewChanged; private JBlock onViewChangedBody; private JBlock onViewChangedBodyInjectionBlock; + private JBlock onViewChangedBodyViewHolderBlock; private JBlock onViewChangedBodyAfterInjectionBlock; private JBlock onViewChangedBodyBeforeInjectionBlock; private JVar onViewChangedHasViewsParam; @@ -94,6 +96,13 @@ public JBlock getOnViewChangedBodyInjectionBlock() { return onViewChangedBodyInjectionBlock; } + public JBlock getOnViewChangedBodyViewHolderBlock() { + if (onViewChangedBodyViewHolderBlock == null) { + setOnViewChanged(); + } + return onViewChangedBodyViewHolderBlock; + } + public JBlock getOnViewChangedBodyAfterInjectionBlock() { if (onViewChangedBodyAfterInjectionBlock == null) { setOnViewChanged(); @@ -114,6 +123,7 @@ protected void setOnViewChanged() { onViewChanged.annotate(Override.class); onViewChangedBody = onViewChanged.body(); onViewChangedBodyBeforeInjectionBlock = onViewChangedBody.blockVirtual(); + onViewChangedBodyViewHolderBlock = onViewChangedBody.blockVirtual(); onViewChangedBodyInjectionBlock = onViewChangedBody.blockVirtual(); onViewChangedBodyAfterInjectionBlock = onViewChangedBody.blockVirtual(); onViewChangedHasViewsParam = onViewChanged.param(HasViews.class, "hasViews"); @@ -161,7 +171,7 @@ protected FoundViewHolder createFoundViewAndIfNotNullBlock(JFieldRef idRef, Abst } else { block.add(foundView.assign(findViewExpression)); } - return new FoundViewHolder(this, viewClass, foundView, getOnViewChangedBodyInjectionBlock()); + return new FoundViewHolder(this, viewClass, foundView, getOnViewChangedBodyViewHolderBlock()); } public JMethod getFindNativeFragmentById() {