Fixed
Status Update
Comments
da...@google.com <da...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
https://android-review.googlesource.com/1123258
https://goto.google.com/android-sha1/b90079595f33f58fece04026a97faa0d243acdb1
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
Description
Version used: 2.2.0-alpha01
Devices/Android versions reproduced on: Emulator x86_64 API level 27
I have been provided JAR with a POJO from a third party. The POJO is used extensively by the library code and it has package name such as "com.library.LibraryItem". I want to use this POJO with Room as an entity so I can save instances to a local DB.
I cannot annotate their library POJO, it is a JAR supplied to us that may change on a semi-regular basis.
I tried creating a subclass and using ignoredColumns but I still get errors because Room complains it cannot convert some of the fields I said to ignored. I created a TypeConverter to make the errors from Room go away but there are still more errors referring to the columns I am ignoring.
Here is my subclass:
/**
* I really want to save instances of LibraryItem in my database!
*/
@Entity(tableName = "items", ignoredColumns = "obj")
public class RoomItem extends LibraryItem {
// I have to put these fields here even though they aren't used to store any
// data just to make Room happy!
@PrimaryKey
@NonNull
private String id;
private String name;
private Long price;
public RoomItem(String id, String name, Long price) {
setId(id);
setName(name);
setPrice(price);
}
}
See the attached sample app that demonstrates the trouble. The output currently is:
> Task :app:compileDebugJavaWithJavac FAILED
/home/jacob/work/source/jwapp/app/src/main/java/com/library/LibraryItem.java:13: error: Cannot find getter for field.
private final JSONObject obj = new JSONObject();
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:14: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
List<RoomItem> getAll();
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:17: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
List<RoomItem> loadAllByIds(int[] ids);
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:20: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
RoomItem findByName(String name);
^
1 error
3 warnings