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 426541d8c120..1ffe5fc06575 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 @@ -178,6 +178,13 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase { assertContainsElements(myFixture.getLookupElementStrings(), "disable"); } + public void testPropertyTagSubclass() throws Exception { + myFixture.configureByFiles(getTestName(true) + ".fxml"); + complete(); + assertContainsElements(myFixture.getLookupElementStrings(), "Color", "ImagePattern", "LinearGradient", "RadialGradient"); + assertDoesntContain(myFixture.getLookupElementStrings(), "Paint"); + } + public void testSubclassesAndDefaultProperty() throws Exception { myFixture.configureByFiles(getTestName(true) + ".fxml"); complete(); diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java index d6bf5dbc2660..bf1a1fdf55f8 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java @@ -9,7 +9,6 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; -import com.intellij.util.Processor; import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.XmlElementDescriptor; import com.intellij.xml.XmlElementsGroup; @@ -84,13 +83,17 @@ public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor { private static void collectSubclassesDescriptors(PsiType psiType, @NotNull final List descriptors) { final PsiClass aClass = PsiUtil.resolveClassInType(psiType); if (aClass != null) { - ClassInheritorsSearch.search(aClass, aClass.getUseScope(), true, true, false).forEach(new Processor() { - @Override - public boolean process(PsiClass aClass) { - descriptors.add(new JavaFxClassBackedElementDescriptor(aClass.getName(), aClass)); + ClassInheritorsSearch.search(aClass, aClass.getUseScope(), true, true, false) + .forEach(psiClass -> { + addElementDescriptor(descriptors, psiClass); return true; - } - }); + }); + addElementDescriptor(descriptors, aClass); + } + } + + private static void addElementDescriptor(@NotNull List descriptors, @NotNull PsiClass aClass) { + if (!PsiUtil.isAbstractClass(aClass) && !PsiUtil.isInnerClass(aClass)) { descriptors.add(new JavaFxClassBackedElementDescriptor(aClass.getName(), aClass)); } } diff --git a/plugins/javaFX/testData/completion/propertyTagSubclass.fxml b/plugins/javaFX/testData/completion/propertyTagSubclass.fxml new file mode 100644 index 000000000000..0687de0c1671 --- /dev/null +++ b/plugins/javaFX/testData/completion/propertyTagSubclass.fxml @@ -0,0 +1,10 @@ + + + + + + + < + + + \ No newline at end of file