mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Javafx: Improve completion for property tags: offer names of non-abstract class compatible with the property type. Test added. (IDEA-103596)
This commit is contained in:
+7
@@ -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();
|
||||
|
||||
+10
-7
@@ -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<XmlElementDescriptor> descriptors) {
|
||||
final PsiClass aClass = PsiUtil.resolveClassInType(psiType);
|
||||
if (aClass != null) {
|
||||
ClassInheritorsSearch.search(aClass, aClass.getUseScope(), true, true, false).forEach(new Processor<PsiClass>() {
|
||||
@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<XmlElementDescriptor> descriptors, @NotNull PsiClass aClass) {
|
||||
if (!PsiUtil.isAbstractClass(aClass) && !PsiUtil.isInnerClass(aClass)) {
|
||||
descriptors.add(new JavaFxClassBackedElementDescriptor(aClass.getName(), aClass));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.paint.ImagePattern?>
|
||||
<?import javafx.scene.shape.Rectangle?>
|
||||
<fx:root xmlns:fx="http://javafx.com/fxml" type="VBox">
|
||||
<Rectangle width="100" height="100">
|
||||
<fill>
|
||||
<<caret>
|
||||
</fill>
|
||||
</Rectangle>
|
||||
</fx:root>
|
||||
Reference in New Issue
Block a user