From 0f7e6219182a13ef49b4c99d0b0bc2b96045172e Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Fri, 1 Apr 2016 17:25:18 +0300 Subject: [PATCH] Javafx: Don't show private methods as unresolved, show them as not accessible from FXML (IDEA-153671) --- .../plugins/javaFX/fxml/JavaFXHighlightingTest.java | 4 ++++ .../javaFX/fxml/refs/JavaFxEventHandlerReference.java | 6 +++--- .../fxml/refs/JavaFxEventHandlerReferenceProvider.java | 2 +- .../testData/highlighting/PrivateControllerMethod.java | 7 +++++++ .../testData/highlighting/privateControllerMethod.fxml | 5 +++++ 5 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 plugins/javaFX/testData/highlighting/PrivateControllerMethod.java create mode 100644 plugins/javaFX/testData/highlighting/privateControllerMethod.fxml diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java index 026b0fa1c762..fea80b3d4432 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java @@ -366,6 +366,10 @@ public class JavaFXHighlightingTest extends AbstractJavaFXTestCase { doTest(); } + public void testPrivateControllerMethod() throws Exception { + doTest(getTestName(false) + ".java"); + } + public void testPropertyTagCompatibleClass() throws Exception { doTest(); } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReference.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReference.java index 2bbad76d3b8f..2c6fb10aa05f 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReference.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReference.java @@ -58,16 +58,16 @@ public class JavaFxEventHandlerReference extends PsiReferenceBase availableHandlers = new ArrayList(); for (PsiMethod psiMethod : myController.getMethods()) { - if (isHandlerMethod(psiMethod)) { + if (isHandlerMethod(psiMethod, true)) { availableHandlers.add(psiMethod); } } return availableHandlers.isEmpty() ? EMPTY_ARRAY : ArrayUtil.toObjectArray(availableHandlers); } - public static boolean isHandlerMethod(PsiMethod psiMethod) { + public static boolean isHandlerMethod(PsiMethod psiMethod, boolean isVisibleInFxml) { if (!psiMethod.hasModifierProperty(PsiModifier.STATIC) && - JavaFxPsiUtil.isVisibleInFxml(psiMethod)) { + (!isVisibleInFxml || JavaFxPsiUtil.isVisibleInFxml(psiMethod))) { final PsiParameter[] parameters = psiMethod.getParameterList().getParameters(); if (parameters.length == 1) { final PsiType parameterType = parameters[0].getType(); diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceProvider.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceProvider.java index 39ba749eb381..ae782e35ea98 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceProvider.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceProvider.java @@ -51,7 +51,7 @@ class JavaFxEventHandlerReferenceProvider extends JavaFxControllerBasedReference final PsiMethod[] methods = controllerClass.findMethodsByName(eventHandlerName, true); final PsiReference[] references = Arrays.stream(methods) - .filter(JavaFxEventHandlerReference::isHandlerMethod) + .filter(psiMethod -> JavaFxEventHandlerReference.isHandlerMethod(psiMethod, false)) .map(handlerMethod -> new JavaFxEventHandlerReference(xmlAttributeValue, handlerMethod, controllerClass)) .toArray(PsiReference.ARRAY_FACTORY::create); diff --git a/plugins/javaFX/testData/highlighting/PrivateControllerMethod.java b/plugins/javaFX/testData/highlighting/PrivateControllerMethod.java new file mode 100644 index 000000000000..e5c41e187fd6 --- /dev/null +++ b/plugins/javaFX/testData/highlighting/PrivateControllerMethod.java @@ -0,0 +1,7 @@ +import javafx.scene.control.SortEvent; +import javafx.scene.control.TableView; + +public class PrivateControllerMethod { + private void onSort(SortEvent tableViewSortEvent) { + } +} \ No newline at end of file diff --git a/plugins/javaFX/testData/highlighting/privateControllerMethod.fxml b/plugins/javaFX/testData/highlighting/privateControllerMethod.fxml new file mode 100644 index 000000000000..a8674066daed --- /dev/null +++ b/plugins/javaFX/testData/highlighting/privateControllerMethod.fxml @@ -0,0 +1,5 @@ + + + + "#onSort"/> + \ No newline at end of file