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 @@
+
+
+
+
+
diff --git a/plugins/javaFX/testData/completion/noInfinity.fxml b/plugins/javaFX/testData/completion/noInfinity.fxml
new file mode 100644
index 000000000000..189d04b5d6fd
--- /dev/null
+++ b/plugins/javaFX/testData/completion/noInfinity.fxml
@@ -0,0 +1,5 @@
+
+
+
+
+