Fixed
Status Update
Comments
yb...@google.com <yb...@google.com> #2
thanks for the bug, we should be able to detect this.
yb...@google.com <yb...@google.com> #3
1.1 alpha3 should have the fix, thanks for the report.
ra...@gmail.com <ra...@gmail.com> #4
Thanks
ra...@gmail.com <ra...@gmail.com> #5
.
ra...@gmail.com <ra...@gmail.com> #6
..
ra...@gmail.com <ra...@gmail.com> #7
...
Description
Version used: either 1.0.0 or 1.1.0-alpha2
Devices/Android versions reproduced on: n/a
The Room compiler does not support two @Dao classes with the same simple name and same package. This would occur if you have two static @Dao classes:
@Entity
public class GoodThingy {
@PrimaryKey int id;
public String something;
@Dao
public static abstract class Store {
@Query("SELECT * FROM GoodThingy")
public abstract List<GoodThingy> all();
}
}
@Entity
public class BadThingy {
@PrimaryKey int id;
public String something;
@Dao
public static abstract class Store {
@Query("SELECT * FROM BadThingy")
abstract List<BadThingy> all();
}
}
The code generator tries generating Store_Impl.java for each of those, and that fails with:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> javax.annotation.processing.FilerException: Attempt to recreate a file for type com.commonsware.abstractroombug.Store_Impl
The workaround is to name each static @Dao something different (e.g., GoodStore, BadStore).
IMHO, ideally either:
- Using the same name is supported, by generating distinct Java classes for each (e.g., GoodThingy_Store_Impl.java, BadThingy_Store_Impl.java), or
- This limitation is documented, or
- The error message be more specific, indicating that this sort of thing is the source of the trouble (as "Attempt to recreate a file" may not be intuitively obvious to developers)
The code shown above is from the attached project that reproduces the problem. The project right now is set for 1.1.0-alpha2, but the same problem exists with 1.0.0.