diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
index 5a49915d0423..9e784b547af7 100644
--- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
+++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
@@ -43,6 +43,13 @@ public class JavaFXUnresolvedFxIdReferenceInspectionTest extends AbstractJavaFXQ
assertEmpty(intentionActions);
}
+ public void testIncludeBtnWithController() throws Exception {
+ myFixture.addFileToProject("btn.fxml", "\n" +
+ "\n" +
+ "");
+ doTest("MyController");
+ }
+
public void testFieldsFromControllerSuper() throws Exception {
myFixture.addClass("import javafx.scene.control.RadioButton;\n" +
"public class SuperController {\n" +
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java
index 04ed5b69013b..13f113d540b6 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java
@@ -39,6 +39,7 @@ import org.jetbrains.plugins.javaFX.fxml.FxmlConstants;
import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory;
import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil;
import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxClassBackedElementDescriptor;
+import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxDefaultPropertyElementDescriptor;
import org.jetbrains.plugins.javaFX.fxml.refs.JavaFxFieldIdReferenceProvider;
/**
@@ -87,14 +88,23 @@ public class JavaFxUnresolvedFxIdReferenceInspection extends XmlSuppressableInsp
if (attributeValue == null) return null;
final PsiElement parent = attributeValue.getParent();
if (parent instanceof XmlAttribute) {
- final XmlTag tag = ((XmlAttribute)parent).getParent();
- if (tag != null) {
- final XmlElementDescriptor descriptor = tag.getDescriptor();
- if (descriptor instanceof JavaFxClassBackedElementDescriptor) {
- final PsiElement declaration = descriptor.getDeclaration();
- if (declaration instanceof PsiClass) {
- return (PsiClass)declaration;
- }
+ return checkClass(((XmlAttribute)parent).getParent());
+ }
+ return null;
+ }
+
+ private static PsiClass checkClass(XmlTag tag) {
+ if (tag != null) {
+ final XmlElementDescriptor descriptor = tag.getDescriptor();
+ if (descriptor instanceof JavaFxClassBackedElementDescriptor) {
+ final PsiElement declaration = descriptor.getDeclaration();
+ if (declaration instanceof PsiClass) {
+ return (PsiClass)declaration;
+ }
+ } else if (descriptor instanceof JavaFxDefaultPropertyElementDescriptor) {
+ final XmlTag includedRoot = JavaFxDefaultPropertyElementDescriptor.getIncludedRoot(tag);
+ if (includedRoot != null && !includedRoot.equals(tag)) {
+ return checkClass(includedRoot);
}
}
}
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxDefaultPropertyElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxDefaultPropertyElementDescriptor.java
index 0004b3e0d098..70fd3c1024e6 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxDefaultPropertyElementDescriptor.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxDefaultPropertyElementDescriptor.java
@@ -193,7 +193,7 @@ public class JavaFxDefaultPropertyElementDescriptor implements XmlElementDescrip
return null;
}
- private static XmlTag getIncludedRoot(XmlTag context) {
+ public static XmlTag getIncludedRoot(XmlTag context) {
if (context == null) return null;
final XmlAttribute xmlAttribute = context.getAttribute(FxmlConstants.FX_ELEMENT_SOURCE);
if (xmlAttribute != null) {
diff --git a/plugins/javaFX/testData/inspections/unresolvedFxId/MyController.java b/plugins/javaFX/testData/inspections/unresolvedFxId/MyController.java
new file mode 100644
index 000000000000..2603234ac39e
--- /dev/null
+++ b/plugins/javaFX/testData/inspections/unresolvedFxId/MyController.java
@@ -0,0 +1 @@
+public class MyController {}
\ No newline at end of file
diff --git a/plugins/javaFX/testData/inspections/unresolvedFxId/MyController_after.java b/plugins/javaFX/testData/inspections/unresolvedFxId/MyController_after.java
new file mode 100644
index 000000000000..06643d1b4382
--- /dev/null
+++ b/plugins/javaFX/testData/inspections/unresolvedFxId/MyController_after.java
@@ -0,0 +1,5 @@
+import javafx.scene.control.Button;
+
+public class MyController {
+ public Button unknown;
+}
\ No newline at end of file
diff --git a/plugins/javaFX/testData/inspections/unresolvedFxId/includeBtnWithController.fxml b/plugins/javaFX/testData/inspections/unresolvedFxId/includeBtnWithController.fxml
new file mode 100644
index 000000000000..f2282bb815f7
--- /dev/null
+++ b/plugins/javaFX/testData/inspections/unresolvedFxId/includeBtnWithController.fxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+