From 7959524d1be473841eb6ba45e01a6e882ab9e234 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Thu, 31 Mar 2016 15:48:25 +0300 Subject: [PATCH] Javafx: In quickfix that creates FXML event handler don't specify unresolved genetic parameters in argument type. Tests added (IDEA-153589) --- .../fxml/JavaFxEventHandlerInspectionTest.java | 8 ++++++++ .../plugins/javaFX/fxml/JavaFxPsiUtil.java | 14 +++++++++----- .../inspections/eventHandler/QuickfixNoField.java | 2 ++ .../eventHandler/QuickfixNoFieldNested.java | 4 ++++ .../eventHandler/QuickfixNoFieldNested_after.java | 7 +++++++ .../eventHandler/QuickfixNoField_after.java | 8 ++++++++ .../inspections/eventHandler/quickfixNoField.fxml | 6 ++++++ .../eventHandler/quickfixNoFieldNested.fxml | 11 +++++++++++ 8 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField.java create mode 100644 plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested.java create mode 100644 plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested_after.java create mode 100644 plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField_after.java create mode 100644 plugins/javaFX/testData/inspections/eventHandler/quickfixNoField.fxml create mode 100644 plugins/javaFX/testData/inspections/eventHandler/quickfixNoFieldNested.fxml diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxEventHandlerInspectionTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxEventHandlerInspectionTest.java index 7a39d85a2283..1ac851aefa0d 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxEventHandlerInspectionTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxEventHandlerInspectionTest.java @@ -68,6 +68,14 @@ public class JavaFxEventHandlerInspectionTest extends AbstractJavaFXTestCase { doQuickfixTest("Create method 'void onSort(SortEvent)'"); } + public void testQuickfixNoField() throws Exception { + doQuickfixTest("Create method 'void onSort(SortEvent)'"); + } + + public void testQuickfixNoFieldNested() throws Exception { + doQuickfixTest("Create method 'void onColumnEditStart(CellEditEvent)'"); + } + public void testQuickfixSuper() throws Exception { doQuickfixTest("Create method 'void click(MouseEvent)'"); } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java index ad09a680600f..fe142a6a851b 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java @@ -556,12 +556,14 @@ public class JavaFxPsiUtil { return canCoerceImpl(targetType, fromClass, context, messageConsumer); } - /** - * Similar to {@link GenericsUtil#getVariableTypeByExpressionType(PsiType)} and {@link TypeConversionUtil#erasure(PsiType)} - */ @Nullable - private static PsiType eraseFreeTypeParameters(@Nullable PsiType psiType, PsiMember member) { + private static PsiType eraseFreeTypeParameters(@Nullable PsiType psiType, @NotNull PsiMember member) { final PsiClass containingClass = member.getContainingClass(); + return eraseFreeTypeParameters(psiType, containingClass); + } + + @Nullable + private static PsiType eraseFreeTypeParameters(@Nullable PsiType psiType, @Nullable PsiClass containingClass) { if (containingClass == null) return null; return JavaPsiFacade.getElementFactory(containingClass.getProject()).createRawSubstitutor(containingClass).substitute(psiType); } @@ -975,7 +977,9 @@ public class JavaFxPsiUtil { final PsiType handlerType = tagClassSubstitutor != null ? tagClassSubstitutor.substitute(eventHandlerPropertyType) : eventHandlerPropertyType; - return substituteEventType(handlerType, xmlAttribute.getProject()); + final PsiClassType eventType = substituteEventType(handlerType, xmlAttribute.getProject()); + final PsiType erasedType = eraseFreeTypeParameters(eventType, tagClass); + return erasedType instanceof PsiClassType ? (PsiClassType)erasedType : null; } } } diff --git a/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField.java b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField.java new file mode 100644 index 000000000000..2d3c8cb0b221 --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField.java @@ -0,0 +1,2 @@ +public class QuickfixNoField { +} diff --git a/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested.java b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested.java new file mode 100644 index 000000000000..cc4358da1623 --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested.java @@ -0,0 +1,4 @@ +import javafx.scene.control.TableColumn.CellEditEvent; + +public class QuickfixNoFieldNested { +} diff --git a/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested_after.java b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested_after.java new file mode 100644 index 000000000000..dbd3ba34beae --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoFieldNested_after.java @@ -0,0 +1,7 @@ +import javafx.scene.control.TableColumn.CellEditEvent; + +public class QuickfixNoFieldNested { + public void onColumnEditStart(CellEditEvent cellEditEvent) { + + } +} diff --git a/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField_after.java b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField_after.java new file mode 100644 index 000000000000..55046662bd9f --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/QuickfixNoField_after.java @@ -0,0 +1,8 @@ +import javafx.scene.control.SortEvent; +import javafx.scene.control.TableView; + +public class QuickfixNoField { + public void onSort(SortEvent tableViewSortEvent) { + + } +} diff --git a/plugins/javaFX/testData/inspections/eventHandler/quickfixNoField.fxml b/plugins/javaFX/testData/inspections/eventHandler/quickfixNoField.fxml new file mode 100644 index 000000000000..028538fa27b1 --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/quickfixNoField.fxml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/plugins/javaFX/testData/inspections/eventHandler/quickfixNoFieldNested.fxml b/plugins/javaFX/testData/inspections/eventHandler/quickfixNoFieldNested.fxml new file mode 100644 index 000000000000..87b554c57d4f --- /dev/null +++ b/plugins/javaFX/testData/inspections/eventHandler/quickfixNoFieldNested.fxml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file