diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxClassBackedElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxClassBackedElementDescriptor.java index be5007f0ccc7..99ca633ab2dc 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxClassBackedElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxClassBackedElementDescriptor.java @@ -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 children = new ArrayList(); + collectProperties(children, new Function() { + @Override + public XmlElementDescriptor fun(PsiField field) { + return new JavaFxPropertyElementDescriptor(myPsiClass, field.getName(), false); + } + }); collectParentStaticProperties(context, children, new Function() { @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 simpleAttrs = new ArrayList(); - 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() { + @Override + public XmlAttributeDescriptor fun(PsiField field) { + return new JavaFxPropertyAttributeDescriptor(field.getName(), myPsiClass); } - } + }); collectParentStaticProperties(context.getParentTag(), simpleAttrs, new Function() { @Override public XmlAttributeDescriptor fun(PsiMethod method) { @@ -176,6 +175,21 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor, return XmlAttributeDescriptor.EMPTY; } + private void collectProperties(List children, Function 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) { diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPropertyElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPropertyElementDescriptor.java index 4b9855e44010..70b51b6bd0b0 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPropertyElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPropertyElementDescriptor.java @@ -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; diff --git a/plugins/javaFX/testData/completion/simplePropertyTag.fxml b/plugins/javaFX/testData/completion/simplePropertyTag.fxml new file mode 100644 index 000000000000..feb00169f11c --- /dev/null +++ b/plugins/javaFX/testData/completion/simplePropertyTag.fxml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/plugins/javaFX/testData/completion/simplePropertyTag_after.fxml b/plugins/javaFX/testData/completion/simplePropertyTag_after.fxml new file mode 100644 index 000000000000..c55eb3c4ccd4 --- /dev/null +++ b/plugins/javaFX/testData/completion/simplePropertyTag_after.fxml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/plugins/javaFX/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java b/plugins/javaFX/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java index b19f37fa97f6..7d7e88e2e7f3 100644 --- a/plugins/javaFX/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java +++ b/plugins/javaFX/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCompletionTest.java @@ -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(); }