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 88ed649fe695..cd1727c092da 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 @@ -141,6 +141,18 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase { assertContainsElements(myFixture.getLookupElementStrings(), "image", "Image"); } + public void testInfinity() throws Exception { + myFixture.configureByFiles(getTestName(true) + ".fxml"); + complete(); + assertContainsElements(myFixture.getLookupElementStrings(), "Infinity", "-Infinity", "NaN", "-NaN"); + } + + public void testNoInfinity() throws Exception { + myFixture.configureByFiles(getTestName(true) + ".fxml"); + complete(); + assertDoesntContain(myFixture.getLookupElementStrings(), "Infinity"); + } + public void testDefaultPropertyIncludeOnce() throws Exception { myFixture.configureByFiles(getTestName(true) + ".fxml"); myItems = myFixture.completeBasic(); diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java index 7c14f02d9467..1ac4d62c4951 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java @@ -524,6 +524,9 @@ public class JavaFxPsiUtil { } } if (substitute == null) { + if (!InheritanceUtil.isInheritor(fieldType, JavaFxCommonClassNames.JAVAFX_BEANS_VALUE_OBSERVABLE_VALUE)) { + return Result.create(fieldType, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT); + } final PsiClass aClass = JavaPsiFacade.getInstance(project) .findClass(JavaFxCommonClassNames.JAVAFX_BEANS_VALUE_OBSERVABLE_VALUE, GlobalSearchScope.allScope(project)); LOG.assertTrue(aClass != null); diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java index f79c765bb0aa..7faf2dbc7515 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java @@ -79,7 +79,13 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor } return ArrayUtil.toStringArray(enumConstants); } - return null; + + final String propertyQName = getBoxedPropertyType(getDeclaration()); + if (CommonClassNames.JAVA_LANG_FLOAT.equals(propertyQName) || CommonClassNames.JAVA_LANG_DOUBLE.equals(propertyQName)) { + return new String[] {"Infinity", "-Infinity", "NaN", "-NaN"}; + } + + return ArrayUtil.EMPTY_STRING_ARRAY; } protected boolean isConstant(PsiField enumField) { @@ -140,7 +146,7 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor final XmlAttributeDescriptor attributeDescriptor = ((XmlAttribute)parent).getDescriptor(); if (attributeDescriptor != null) { final PsiElement declaration = attributeDescriptor.getDeclaration(); - final String boxedQName = getBoxedPropertyType(context, declaration); + final String boxedQName = getBoxedPropertyType(declaration); if (boxedQName != null) { try { final Class aClass = Class.forName(boxedQName); @@ -164,14 +170,10 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor } @Nullable - private static String getBoxedPropertyType(XmlElement context, PsiElement declaration) { + private static String getBoxedPropertyType(PsiElement declaration) { PsiType attrType = null; if (declaration instanceof PsiField) { - attrType = ((PsiField)declaration).getType(); - if (InheritanceUtil.isInheritor(attrType, JavaFxCommonClassNames.JAVAFX_BEANS_VALUE_OBSERVABLE_VALUE)) { - attrType = JavaFxPsiUtil - .getWrappedPropertyType((PsiField)declaration, context.getProject(), JavaFxCommonClassNames.ourWritableMap); - } + attrType = JavaFxPsiUtil.getWrappedPropertyType((PsiField)declaration, declaration.getProject(), JavaFxCommonClassNames.ourWritableMap); } else if (declaration instanceof PsiMethod) { final PsiParameter[] parameters = ((PsiMethod)declaration).getParameterList().getParameters(); if (parameters.length == 2) { diff --git a/plugins/javaFX/testData/completion/infinity.fxml b/plugins/javaFX/testData/completion/infinity.fxml new file mode 100644 index 000000000000..f964ef327687 --- /dev/null +++ b/plugins/javaFX/testData/completion/infinity.fxml @@ -0,0 +1,5 @@ + + + +