From aa593ba392c6d2f3c0f7e91bc2268cef84be08e2 Mon Sep 17 00:00:00 2001 From: Yoann Delouis Date: Wed, 12 Jun 2013 10:47:42 +0200 Subject: [PATCH 1/2] Fix wrong generated code --- .../processing/ItemClickProcessor.java | 10 ++++-- .../res/layout/item_clicks_handled.xml | 6 ++++ .../test15/ItemClicksHandledActivity.java | 32 +++++++++++++------ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java index 4968155ddc..d7759bbac9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java @@ -29,6 +29,7 @@ import javax.lang.model.type.TypeMirror; import org.androidannotations.annotations.ItemClick; +import org.androidannotations.helper.APTCodeModelHelper; import org.androidannotations.helper.IdAnnotationHelper; import org.androidannotations.processing.EBeansHolder.Classes; import org.androidannotations.rclass.IRClass; @@ -48,6 +49,7 @@ public class ItemClickProcessor implements DecoratingElementProcessor { private IdAnnotationHelper helper; + private final APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); public ItemClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) { helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass); @@ -90,8 +92,12 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { if (parameterType.getKind() == TypeKind.INT) { itemClickCall.arg(onItemClickPositionParam); } else { - String parameterTypeQualifiedName = parameterType.toString(); - itemClickCall.arg(cast(holder.refClass(parameterTypeQualifiedName), invoke(onItemClickParentParam, "getAdapter").invoke("getItem").arg(onItemClickPositionParam))); + JClass parameterClass = codeModelHelper.typeMirrorToJClass(parameterType, holder); + itemClickCall.arg(cast(parameterClass, invoke(onItemClickParentParam, "getAdapter").invoke("getItem").arg(onItemClickPositionParam))); + + if (parameterClass.isParameterized()) { + onItemClickMethod.annotate(SuppressWarnings.class).param("value", "unchecked"); + } } } diff --git a/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml b/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml index bb593c7cff..bfdadfec7a 100644 --- a/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml +++ b/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml @@ -44,6 +44,12 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" /> + + item) { + + } + @ItemClick public void spinner() { spinnerItemClicked = true; @@ -101,23 +113,23 @@ public void spinner() { public void spinnerWithArgument(String selectedItem) { spinnerWithArgumentSelectedItem = selectedItem; } - + @ItemClick void listViewWithPosition(int position) { listViewWithPositionClickedPosition = position; } - + @ItemSelect void listViewWithPositionItemSelected(boolean selected, int position) { listViewWithPositionItemSelected = selected; listViewWithPositionItemSelectedPosition = position; } - + @ItemSelect void listViewWithOneParamItemSelected(boolean selected) { listViewWithOneParamItemSelected = selected; } - + @ItemLongClick void listViewWithPositionItemLongClicked(int position) { From aee786f2900f953c0feba8b4b9c64781efd59095 Mon Sep 17 00:00:00 2001 From: Yoann Delouis Date: Mon, 17 Jun 2013 10:26:04 +0200 Subject: [PATCH 2/2] Add functional test --- .../test15/ItemClicksHandledActivityTest.java | 20 ++++++++--- .../test15/ItemClicksHandledActivity.java | 33 ++++++++++++------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java index 262a11fc44..ac6f689507 100644 --- a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java @@ -15,15 +15,14 @@ */ package org.androidannotations.test15; -import static org.fest.assertions.Assertions.assertThat; - +import android.view.View; +import android.widget.ListView; +import android.widget.Spinner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import android.view.View; -import android.widget.ListView; -import android.widget.Spinner; +import static org.fest.assertions.Assertions.assertThat; @RunWith(AndroidAnnotationsTestRunner.class) public class ItemClicksHandledActivityTest { @@ -117,4 +116,15 @@ public void can_have_one_selected_argument() { assertThat(activity.listViewWithOneParamItemSelected).isTrue(); } + @Test + public void handlingListViewItemClickWithParametrizedItem() { + ListView listView = (ListView) activity.findViewById(R.id.listViewWithArgumentWithParameterType); + long itemId = listView.getAdapter().getItemId(TESTED_CLICKED_INDEX); + View view = listView.getChildAt(TESTED_CLICKED_INDEX); + + assertThat(activity.listViewParametrizedItemClicked).isFalse(); + listView.performItemClick(view, TESTED_CLICKED_INDEX, itemId); + assertThat(activity.listViewParametrizedItemClicked).isTrue(); + } + } diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ItemClicksHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ItemClicksHandledActivity.java index e506f6fa2b..62374c1148 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ItemClicksHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ItemClicksHandledActivity.java @@ -15,19 +15,14 @@ */ package org.androidannotations.test15; -import java.util.ArrayList; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.ItemClick; -import org.androidannotations.annotations.ItemLongClick; -import org.androidannotations.annotations.ItemSelect; -import org.androidannotations.annotations.ViewById; - import android.app.Activity; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Spinner; +import org.androidannotations.annotations.*; + +import java.util.ArrayList; +import java.util.List; @EActivity(R.layout.item_clicks_handled) public class ItemClicksHandledActivity extends Activity { @@ -55,6 +50,7 @@ public class ItemClicksHandledActivity extends Activity { boolean spinnerItemClicked = false; boolean listViewItemClicked = false; + boolean listViewParametrizedItemClicked = false; String spinnerWithArgumentSelectedItem = null; String listViewWithArgumentSelectedItem = null; @@ -65,6 +61,7 @@ public class ItemClicksHandledActivity extends Activity { int listViewWithPositionItemSelectedPosition; private ArrayAdapter adapter; + private ArrayAdapter> parametrizedAdapter; boolean listViewWithOneParamItemSelected; @@ -74,11 +71,13 @@ void initView() { R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + parametrizedAdapter = new ArrayAdapter>(this, android.R.layout.simple_list_item_1, stringLists()); + spinner.setAdapter(adapter); listView.setAdapter(adapter); spinnerWithArgument.setAdapter(adapter); listViewWithArgument.setAdapter(adapter); - listViewWithArgumentWithParameterType.setAdapter(adapter); + listViewWithArgumentWithParameterType.setAdapter(parametrizedAdapter); listViewWithPosition.setAdapter(adapter); listViewWithOneParam.setAdapter(adapter); spinnerItemClicked = false; @@ -101,7 +100,7 @@ public void listViewWithArgument(String selectedItem) { @ItemClick(R.id.listViewWithArgumentWithParameterType) protected void listViewWithArgumentWithParameterType(ArrayList item) { - + listViewParametrizedItemClicked = true; } @ItemClick @@ -135,4 +134,16 @@ void listViewWithPositionItemLongClicked(int position) { } + private List> stringLists() { + List> stringLists = new ArrayList>(); + for (int i = 0; i < 10; i++) { + ArrayList stringList = new ArrayList(); + for (int j = 0; j < 4; j++) { + stringList.add(i + " : " + j); + } + stringLists.add(stringList); + } + return stringLists; + } + }