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