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 e92d1b44ca09..0bbc1ea43d66 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 @@ -295,6 +295,12 @@ public class JavaFXHighlightingTest extends AbstractJavaFXTestCase { doTest(); } + public void testIncludedForm() throws Exception { + myFixture.addFileToProject("sample.fxml", "\n" + + "\n"); + myFixture.testHighlighting(true, false, false, getTestName(false) + ".fxml"); + } + public void testInjectedControllerFields() throws Exception { myFixture.addFileToProject("sample.fxml", "\n" + "\n" + diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java index 75b8c3dc93b7..fc96388464da 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java @@ -179,6 +179,12 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase { doTest("layoutY"); } + public void testIncludedRootRootAttributes() throws Exception { + myFixture.addFileToProject("sample.fxml", "?import javafx.scene.layout.GridPane?>\n" + + ""); + doTest("blendMode"); + } + public void testAllowPropertyTypeClass() throws Exception { doTest("ColumnConstraints"); } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java index 25826e9c7a79..582882b74639 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java @@ -220,12 +220,7 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor, final String name = context.getName(); if (Comparing.equal(name, getName()) && myPsiClass != null) { final List simpleAttrs = new ArrayList(); - collectProperties(simpleAttrs, new Function() { - @Override - public XmlAttributeDescriptor fun(PsiField field) { - return new JavaFxPropertyAttributeDescriptor(field.getName(), myPsiClass); - } - }, true); + collectInstanceProperties(simpleAttrs); collectStaticAttributesDescriptors(context, simpleAttrs); for (String defaultProperty : FxmlConstants.FX_DEFAULT_PROPERTIES) { simpleAttrs.add(new JavaFxDefaultAttributeDescriptor(defaultProperty, myPsiClass)); @@ -236,6 +231,15 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor, return XmlAttributeDescriptor.EMPTY; } + protected void collectInstanceProperties(List simpleAttrs) { + collectProperties(simpleAttrs, new Function() { + @Override + public XmlAttributeDescriptor fun(PsiField field) { + return new JavaFxPropertyAttributeDescriptor(field.getName(), myPsiClass); + } + }, true); + } + private void collectProperties(final List children, final Function factory, final boolean acceptPrimitive) { final List fieldList = CachedValuesManager.getManager(myPsiClass.getProject()).getCachedValue(myPsiClass, new CachedValueProvider>() { 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 7917d651fe3d..e5fb621a0ffc 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 @@ -119,8 +119,14 @@ public class JavaFxDefaultPropertyElementDescriptor implements XmlElementDescrip final XmlTag includedRoot = getIncludedRoot(context); if (includedRoot != null) { final XmlElementDescriptor includedRootDescriptor = includedRoot.getDescriptor(); - if (includedRootDescriptor != null) { - Collections.addAll(descriptors, includedRootDescriptor.getAttributesDescriptors(includedRoot)); + if (includedRootDescriptor instanceof JavaFxClassBackedElementDescriptor) { + ((JavaFxClassBackedElementDescriptor)includedRootDescriptor).collectInstanceProperties(descriptors); + } + else if (includedRootDescriptor instanceof JavaFxDefaultPropertyElementDescriptor) { + final JavaFxClassBackedElementDescriptor includedRootTagDescriptor = ((JavaFxDefaultPropertyElementDescriptor)includedRootDescriptor).getRootTagDescriptor(includedRoot); + if (includedRootTagDescriptor != null) { + includedRootTagDescriptor.collectInstanceProperties(descriptors); + } } } } diff --git a/plugins/javaFX/testData/completion/includedRootRootAttributes.fxml b/plugins/javaFX/testData/completion/includedRootRootAttributes.fxml new file mode 100644 index 000000000000..72bdcbb9b71b --- /dev/null +++ b/plugins/javaFX/testData/completion/includedRootRootAttributes.fxml @@ -0,0 +1,6 @@ + + + + /> + + \ No newline at end of file diff --git a/plugins/javaFX/testData/completion/includedRootRootAttributes_after.fxml b/plugins/javaFX/testData/completion/includedRootRootAttributes_after.fxml new file mode 100644 index 000000000000..88771dbb5f51 --- /dev/null +++ b/plugins/javaFX/testData/completion/includedRootRootAttributes_after.fxml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/plugins/javaFX/testData/highlighting/includedForm.fxml b/plugins/javaFX/testData/highlighting/includedForm.fxml new file mode 100644 index 000000000000..e0fea5e56d28 --- /dev/null +++ b/plugins/javaFX/testData/highlighting/includedForm.fxml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file