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 0744d5da4d77..3c533d836b6b 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 @@ -252,6 +252,11 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase { assertSameElements(myFixture.getLookupElementStrings(),"pane", "node", "box", "model", "text", "target"); } + public void testInheritedConstant() throws Exception { + configureAndComplete("InheritedConstantData.java", "InheritedConstantSuperData.java"); + assertSameElements(myFixture.getLookupElementStrings(), "MY_TEXT", "SUPER_TEXT"); + } + private void configureAndComplete(final String... extraFiles) { final String fxmlFileName = getTestName(true) + ".fxml"; if (extraFiles.length != 0) { diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxBuiltInAttributeDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxBuiltInAttributeDescriptor.java index 37ef164b9fef..ec3376cff4e6 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxBuiltInAttributeDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxBuiltInAttributeDescriptor.java @@ -20,10 +20,12 @@ import com.intellij.psi.*; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.FxmlConstants; import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; +import java.util.ArrayList; import java.util.List; /** @@ -52,7 +54,30 @@ public class JavaFxBuiltInAttributeDescriptor extends JavaFxPropertyAttributeDes @Override public boolean isEnumerated() { - return getName().equals(FxmlConstants.FX_CONSTANT); + return getPsiClass() != null && getName().equals(FxmlConstants.FX_CONSTANT); + } + + @Nullable + @Override + public String[] getEnumeratedValues() { + final PsiClass psiClass = getPsiClass(); + if (psiClass != null) { + if (getName().equals(FxmlConstants.FX_CONSTANT)) { + final List constants = new ArrayList(); + for (PsiClass aClass = psiClass; aClass != null; aClass = aClass.getSuperClass()) { + final String qualifiedName = aClass.getQualifiedName(); + if (CommonClassNames.JAVA_LANG_OBJECT.equals(qualifiedName)) break; + final PsiField[] fields = aClass.getFields(); + for (PsiField field : fields) { + if (isConstant(field)) { + constants.add(field.getName()); + } + } + } + return ArrayUtil.toStringArray(constants); + } + } + return null; } @Override diff --git a/plugins/javaFX/testData/completion/InheritedConstantData.java b/plugins/javaFX/testData/completion/InheritedConstantData.java new file mode 100644 index 000000000000..0dd35f4d37fb --- /dev/null +++ b/plugins/javaFX/testData/completion/InheritedConstantData.java @@ -0,0 +1,3 @@ +public class InheritedConstantData extends InheritedConstantSuperData { + public static final String MY_TEXT = "MyButton"; +} \ No newline at end of file diff --git a/plugins/javaFX/testData/completion/InheritedConstantSuperData.java b/plugins/javaFX/testData/completion/InheritedConstantSuperData.java new file mode 100644 index 000000000000..644bb9777a08 --- /dev/null +++ b/plugins/javaFX/testData/completion/InheritedConstantSuperData.java @@ -0,0 +1,3 @@ +public class InheritedConstantSuperData { + public static final String SUPER_TEXT = "SuperButton"; +} \ No newline at end of file diff --git a/plugins/javaFX/testData/completion/inheritedConstant.fxml b/plugins/javaFX/testData/completion/inheritedConstant.fxml new file mode 100644 index 000000000000..5e41ab891555 --- /dev/null +++ b/plugins/javaFX/testData/completion/inheritedConstant.fxml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file