mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
javafx: completion of simple property tags
This commit is contained in:
+29
-15
@@ -5,7 +5,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.GenericsHighlightUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Factory;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.xml.XmlAttributeImpl;
|
||||
@@ -83,11 +82,17 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor,
|
||||
}
|
||||
if (myPsiClass != null) {
|
||||
final List<XmlElementDescriptor> children = new ArrayList<XmlElementDescriptor>();
|
||||
collectProperties(children, new Function<PsiField, XmlElementDescriptor>() {
|
||||
@Override
|
||||
public XmlElementDescriptor fun(PsiField field) {
|
||||
return new JavaFxPropertyElementDescriptor(myPsiClass, field.getName(), false);
|
||||
}
|
||||
});
|
||||
collectParentStaticProperties(context, children, new Function<PsiMethod, XmlElementDescriptor>() {
|
||||
@Override
|
||||
public XmlElementDescriptor fun(PsiMethod method) {
|
||||
final PsiClass aClass = method.getContainingClass();
|
||||
return new JavaFxPropertyElementDescriptor(aClass, PropertyUtil.getPropertyName(method.getName()));
|
||||
return new JavaFxPropertyElementDescriptor(aClass, PropertyUtil.getPropertyName(method.getName()), true);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -132,11 +137,11 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor,
|
||||
if (!name.equals(shortName)) { //static property
|
||||
final PsiMethod propertySetter = findPropertySetter(name, childTag);
|
||||
if (propertySetter != null) {
|
||||
return new JavaFxPropertyElementDescriptor(propertySetter.getContainingClass(), shortName);
|
||||
return new JavaFxPropertyElementDescriptor(propertySetter.getContainingClass(), shortName, true);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return myPsiClass != null ? new JavaFxPropertyElementDescriptor(myPsiClass, name) : null;
|
||||
return myPsiClass != null ? new JavaFxPropertyElementDescriptor(myPsiClass, name, false) : null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,18 +157,12 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor,
|
||||
final String name = context.getName();
|
||||
if (Comparing.equal(name, getName()) && myPsiClass != null) {
|
||||
final List<XmlAttributeDescriptor> simpleAttrs = new ArrayList<XmlAttributeDescriptor>();
|
||||
final PsiField[] fields = myPsiClass.getAllFields();
|
||||
if (fields.length > 0) {
|
||||
for (PsiField field : fields) {
|
||||
if (field.hasModifierProperty(PsiModifier.STATIC)) continue;
|
||||
final PsiType fieldType = field.getType();
|
||||
if (PropertyUtil.findPropertyGetter(myPsiClass, field.getName(), false, true) != null &&
|
||||
InheritanceUtil.isInheritor(fieldType, JavaFxCommonClassNames.JAVAFX_BEANS_PROPERTY_PROPERTY) ||
|
||||
fieldType.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
|
||||
simpleAttrs.add(new JavaFxPropertyAttributeDescriptor(field.getName(), myPsiClass));
|
||||
}
|
||||
collectProperties(simpleAttrs, new Function<PsiField, XmlAttributeDescriptor>() {
|
||||
@Override
|
||||
public XmlAttributeDescriptor fun(PsiField field) {
|
||||
return new JavaFxPropertyAttributeDescriptor(field.getName(), myPsiClass);
|
||||
}
|
||||
}
|
||||
});
|
||||
collectParentStaticProperties(context.getParentTag(), simpleAttrs, new Function<PsiMethod, XmlAttributeDescriptor>() {
|
||||
@Override
|
||||
public XmlAttributeDescriptor fun(PsiMethod method) {
|
||||
@@ -176,6 +175,21 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor,
|
||||
return XmlAttributeDescriptor.EMPTY;
|
||||
}
|
||||
|
||||
private <T> void collectProperties(List<T> children, Function<PsiField, T> factory) {
|
||||
final PsiField[] fields = myPsiClass.getAllFields();
|
||||
if (fields.length > 0) {
|
||||
for (PsiField field : fields) {
|
||||
if (field.hasModifierProperty(PsiModifier.STATIC)) continue;
|
||||
final PsiType fieldType = field.getType();
|
||||
if (PropertyUtil.findPropertyGetter(myPsiClass, field.getName(), false, true) != null &&
|
||||
InheritanceUtil.isInheritor(fieldType, JavaFxCommonClassNames.JAVAFX_BEANS_PROPERTY_PROPERTY) ||
|
||||
fieldType.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
|
||||
children.add(factory.fun(field));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public XmlAttributeDescriptor getAttributeDescriptor(@NonNls String attributeName, @Nullable XmlTag context) {
|
||||
|
||||
+5
-3
@@ -21,10 +21,12 @@ import org.jetbrains.annotations.Nullable;
|
||||
public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor {
|
||||
private final PsiClass myPsiClass;
|
||||
private final String myName;
|
||||
private final boolean myStatic;
|
||||
|
||||
public JavaFxPropertyElementDescriptor(PsiClass psiClass, String name) {
|
||||
public JavaFxPropertyElementDescriptor(PsiClass psiClass, String name, boolean isStatic) {
|
||||
myPsiClass = psiClass;
|
||||
myName = name;
|
||||
myStatic = isStatic;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,7 +54,7 @@ public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor {
|
||||
return new JavaFxClassBackedElementDescriptor(name, childTag);
|
||||
}
|
||||
else if (myPsiClass != null) {
|
||||
return new JavaFxPropertyElementDescriptor(myPsiClass, name);
|
||||
return new JavaFxPropertyElementDescriptor(myPsiClass, name, name.indexOf('.') > 0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -113,7 +115,7 @@ public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
if (myPsiClass != null) {
|
||||
if (myPsiClass != null && myStatic) {
|
||||
return StringUtil.getQualifiedName(myPsiClass.getName(), myName);
|
||||
}
|
||||
return myName;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.text.*?>
|
||||
<GridPane xmlns:fx="http://javafx.com/fxml">
|
||||
<Label>
|
||||
<<caret>
|
||||
</Label>
|
||||
</GridPane>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.text.*?>
|
||||
<GridPane xmlns:fx="http://javafx.com/fxml">
|
||||
<Label>
|
||||
<text
|
||||
</Label>
|
||||
</GridPane>
|
||||
@@ -45,6 +45,10 @@ public class JavaFxCompletionTest extends CompletionTestCase {
|
||||
doTest("GridPane.columnIndex");
|
||||
}
|
||||
|
||||
public void testSimplePropertyTag() throws Exception {
|
||||
doTest("text");
|
||||
}
|
||||
|
||||
public void testStaticPropertiesEnumValue() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user