From cf9caecd5ed18dca881f3553dd0826561912ee33 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 18 May 2015 17:55:47 +0200 Subject: [PATCH] javafx: check coercing according to resolved refs (IDEA-140244) --- .../javaFX/fxml/JavaFxCoercingTest.java | 4 ++++ .../JavaFxPropertyAttributeDescriptor.java | 22 +++++++++++++++++-- .../testData/coercing/primitiveCoercing.fxml | 8 +++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 plugins/javaFX/testData/coercing/primitiveCoercing.fxml diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCoercingTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCoercingTest.java index f305c88f7e8f..a1b160fc5cca 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCoercingTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxCoercingTest.java @@ -47,6 +47,10 @@ public class JavaFxCoercingTest extends AbstractJavaFXTestCase { doTest(); } + public void testPrimitiveCoercing() throws Exception { + doTest(); + } + private void doTest() throws Exception { myFixture.testHighlighting(false, false, false, getTestName(true) + ".fxml"); } 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 37488f345330..65b66e8901e0 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 @@ -3,6 +3,7 @@ package org.jetbrains.plugins.javaFX.fxml.descriptors; import com.intellij.psi.*; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.TypeConversionUtil; import com.intellij.psi.xml.*; import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlAttributeDescriptor; @@ -151,7 +152,14 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript final XmlAttributeDescriptor attributeDescriptor = ((XmlAttribute)parent).getDescriptor(); if (attributeDescriptor != null) { final PsiElement declaration = attributeDescriptor.getDeclaration(); - final String boxedQName = getBoxedPropertyType(declaration); + final String boxedQName; + if (declaration != null) { + boxedQName = getBoxedPropertyType(declaration); + } + else { + final PsiClass tagClass = JavaFxPsiUtil.getTagClass((XmlAttributeValue)context); + boxedQName = tagClass != null ? tagClass.getQualifiedName() : null; + } if (boxedQName != null) { try { final Class aClass = Class.forName(boxedQName); @@ -161,10 +169,20 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript catch (InvocationTargetException e) { final Throwable cause = e.getCause(); if (cause instanceof NumberFormatException) { + final PsiReference reference = context.getReference(); + if (reference != null) { + final PsiElement resolve = reference.resolve(); + if (resolve instanceof XmlAttributeValue) { + final PsiClass tagClass = JavaFxPsiUtil.getTagClass((XmlAttributeValue)resolve); + if (tagClass != null && boxedQName.equals(tagClass.getQualifiedName())) { + return null; + } + } + } return "Invalid value: unable to coerce to " + boxedQName; } } - catch (Exception ignore) { + catch (Throwable ignore) { } } } diff --git a/plugins/javaFX/testData/coercing/primitiveCoercing.fxml b/plugins/javaFX/testData/coercing/primitiveCoercing.fxml new file mode 100644 index 000000000000..a77915f43493 --- /dev/null +++ b/plugins/javaFX/testData/coercing/primitiveCoercing.fxml @@ -0,0 +1,8 @@ + + + + + "200p"/> + + + \ No newline at end of file