There have been recent changes in the area of raw types (TreeView field in this case). Instead of holding T as "?" or "? extends Object", it is now resolved to the erasure type "Object". So, TreeCell<Path> is not compatible with TreeCell<Object> and an error is emitted.
If you specified your field with a type argument, the return type checking should be okay: @FXML private TreeView<Path> treeView ________________________________ From: Mirco Colletta <mirch...@gmail.com> Sent: Monday, December 2, 2024 4:42 PM To: dev@groovy.apache.org <dev@groovy.apache.org> Cc: Milles, Eric (TR Technology) <eric.mil...@thomsonreuters.com> Subject: Re: [EXT] Static type checking error from groovy version 4.0.22 Hi Eric, actually there isn't an explicit instantiation of the treeView in the code since it's defined inside an .fxml file: <TreeView fx:id="treeView" styleClass="folder-tree" maxWidth="Infinity" maxHeight="Infinity" VBox.vgrow="ALWAYS"/> that is eventually loaded inside the controller: FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(getClass().getSimpleName() + ".fxml")) ... fxmlLoader.load() But in the controller declaration I didn't specify the type of the generics @FXML private TreeView treeView so maybe a recent modification made the groovy type checker more strict. Thanks Il Lun 2 Dic 2024, 21:40 Milles, Eric (TR Technology) via dev <dev@groovy.apache.org<mailto:dev@groovy.apache.org>> ha scritto: The missing info from your description for me is how treeView is declared. When I ensure that treeView is an instance of TreeView<Path>, the checks work out fine. interface Callback<P,R> { R call(P param) } class TreeCell<T> { } class TreeView<T> { void setCellFactory(Callback<TreeView<T>,TreeCell<T>> value) { } } class Path { } class PathTreeCell extends TreeCell<Path> { } @groovy.transform.TypeChecked test() { def treeView = new TreeView<Path>() // not TreeView or TreeView<?> treeView.setCellFactory({ /*TreeView<Path>*/ p -> def treeCell = new PathTreeCell() return treeCell }) } ________________________________ From: Milles, Eric (TR Technology) via dev <dev@groovy.apache.org<mailto:dev@groovy.apache.org>> Sent: Monday, December 2, 2024 9:45 AM To: dev@groovy.apache.org<mailto:dev@groovy.apache.org> <dev@groovy.apache.org<mailto:dev@groovy.apache.org>> Cc: Milles, Eric (TR Technology) <eric.mil...@thomsonreuters.com<mailto:eric.mil...@thomsonreuters.com>> Subject: Re: [EXT] Static type checking error from groovy version 4.0.22 Micro, Please create a new bug report at issues.apache.org<https://urldefense.com/v3/__http://issues.apache.org__;!!GFN0sa3rsbfR8OLyAw!ZOfYR2D6zT7F52tmV8qCubBdUFRDQNPfX56LZWLNMCdJMavUdhHk16eT0jgS-b3W4VkAxN5J0w3lU_GMAmvD7m8$> and I will have a look at what changed. ________________________________ From: Mirco Colletta <mirch...@gmail.com<mailto:mirch...@gmail.com>> Sent: Saturday, November 30, 2024 12:20 PM To: dev@groovy.apache.org<mailto:dev@groovy.apache.org> <dev@groovy.apache.org<mailto:dev@groovy.apache.org>> Subject: [EXT] Static type checking error from groovy version 4.0.22 External Email: Use caution with links and attachments. Hello, recently I've updated the groovy version of my project (STC with compiler-configuration) from 4.0.21 to 4.0.24 and in the process I've encountered the following unexpected error: [Static type checking] - Cannot return value of type ...PathTreeCell for closure expecting javafx.scene.control.TreeCell<java.lang.Object> (after further investigation it seems introduced from v4.0.22) The error came up calling this method of the JavaFx TreeView (with a closure) https://openjfx.io/javadoc/21/javafx.controls/javafx/scene/control/TreeView.html#setCellFactory(javafx.util.Callback)<https://urldefense.com/v3/__https://openjfx.io/javadoc/21/javafx.controls/javafx/scene/control/TreeView.html*setCellFactory(javafx.util.Callback)__;Iw!!GFN0sa3rsbfR8OLyAw!bhkxAtKCcCoBP6_yq_UXSTJtpdyaaP3fx207yBuyP6IrCOCFSCZBuachWG4pzvoKw3JK31poWMrMii3T5yhIza0$> public final void setCellFactory(Callback<TreeView<T>,TreeCell<T>> value) My code: public class PathTreeCell extends TreeCell<Path> { … } ... treeView.setCellFactory({ p -> var treeCell = new PathTreeCell(this) makeDraggable(treeCell) // This doesn't work anymore // return treeCell return (TreeCell<Path>)treeCell // OK }) This portion of code has always worked for every version of groovy STC I've used up until now. As above, the workaround is effortless, just an explicit cast to TreeCell<Path> Nevertheless I'm worried that it could be some sort of side effect of a regression. Is this an intentional change of behaviour or a bug? Cheers, Mirco