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 83b4108de7ff..5c5196006669 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java @@ -201,7 +201,10 @@ public class JavaFxPsiUtil { if (containingFile instanceof XmlFile) { final XmlTag rootTag = ((XmlFile)containingFile).getRootTag(); if (rootTag != null) { - final XmlAttribute attribute = rootTag.getAttribute(FxmlConstants.FX_CONTROLLER); + XmlAttribute attribute = rootTag.getAttribute(FxmlConstants.FX_CONTROLLER); + if (attribute == null && FxmlConstants.FX_ROOT.equals(rootTag.getName())) { + attribute = rootTag.getAttribute(FxmlConstants.TYPE); + } if (attribute != null) { final String attributeValue = attribute.getValue(); if (!StringUtil.isEmptyOrSpaces(attributeValue)) { 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 8a7711ebb0b6..63740afb35b7 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 @@ -16,11 +16,18 @@ package org.jetbrains.plugins.javaFX.fxml.refs; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.psi.*; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiReference; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; +import com.intellij.psi.xml.XmlFile; +import com.intellij.psi.xml.XmlTag; import com.intellij.util.ProcessingContext; +import com.intellij.xml.XmlElementDescriptor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.javaFX.fxml.FxmlConstants; import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; /** @@ -40,7 +47,9 @@ class JavaFxEventHandlerReferenceProvider extends JavaFxControllerBasedReference final XmlAttribute attribute = (XmlAttribute)xmlAttributeValue.getContext(); if (attribute == null) return PsiReference.EMPTY_ARRAY; if (!JavaFxPsiUtil.checkIfAttributeHandler(attribute)) return PsiReference.EMPTY_ARRAY; - final PsiElement currentTagClass = attribute.getParent().getDescriptor().getDeclaration(); + final XmlElementDescriptor descriptor = attribute.getParent().getDescriptor(); + if (descriptor == null) return PsiReference.EMPTY_ARRAY; + final PsiElement currentTagClass = descriptor.getDeclaration(); final String eventHandlerName = attValueString.substring(1); final PsiMethod[] methods = controllerClass.findMethodsByName(eventHandlerName, true); @@ -51,6 +60,12 @@ class JavaFxEventHandlerReferenceProvider extends JavaFxControllerBasedReference break; } } + if (handlerMethod == null) { + final XmlTag rootTag = ((XmlFile)xmlAttributeValue.getContainingFile()).getRootTag(); + if (rootTag == null || FxmlConstants.FX_ROOT.equals(rootTag.getName())) { + return PsiReference.EMPTY_ARRAY; + } + } return new PsiReference[]{new JavaFxEventHandlerReference(xmlAttributeValue, (PsiClass)currentTagClass, handlerMethod, controllerClass)}; } } diff --git a/plugins/javaFX/testData/highlighting/custom/CustomVBox.java b/plugins/javaFX/testData/highlighting/custom/CustomVBox.java new file mode 100644 index 000000000000..5ae634ed7999 --- /dev/null +++ b/plugins/javaFX/testData/highlighting/custom/CustomVBox.java @@ -0,0 +1,16 @@ +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.VBox; + + +public class CustomVBox extends VBox { + @FXML + private TextField tf; + @FXML + private Label lab1; + @FXML + void myMethod(){ + lab1.setText(tf.getText()); + } +} \ No newline at end of file diff --git a/plugins/javaFX/testData/highlighting/custom/customComponentFields.fxml b/plugins/javaFX/testData/highlighting/custom/customComponentFields.fxml new file mode 100644 index 000000000000..bf162a6ec73c --- /dev/null +++ b/plugins/javaFX/testData/highlighting/custom/customComponentFields.fxml @@ -0,0 +1,8 @@ + + + + +