From 9fe9f66af32b1def6a0179e9a2a3761935dff936 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 10 Jun 2013 15:17:04 +0400 Subject: [PATCH] javafx: constant values checks (IDEA-108601) --- .../javaFX/fxml/JavaFXHighlightingTest.java | 4 ++++ .../JavaFxClassBackedElementDescriptor.java | 14 +++++++++++--- .../testData/highlighting/constantValue.fxml | 10 ++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 plugins/javaFX/testData/highlighting/constantValue.fxml diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java index 971f3a9b4c3b..a88550bcc270 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java @@ -311,6 +311,10 @@ public class JavaFXHighlightingTest extends AbstractJavaFXTestCase { doTest(); } + public void testConstantValue() throws Exception { + doTest(); + } + public void testCharsetInInclude() throws Exception { myFixture.addFileToProject("sample.fxml", "\n" + "\n"); diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java index 2172ed40e399..3c8b1e887a2a 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java @@ -370,12 +370,20 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor, host.addMessage(((XmlAttributeImpl)attribute).getNameElement(), "fx:controller can only be applied to root element", ValidationHost.ErrorType.ERROR); //todo add delete/move to upper tag fix } } - final String canCoerceError = JavaFxPsiUtil.isClassAcceptable(parentTag, myPsiClass); + PsiClass aClass = myPsiClass; + final XmlAttribute constAttr = context.getAttribute(FxmlConstants.FX_CONSTANT); + if (constAttr != null) { + final PsiField constField = aClass.findFieldByName(constAttr.getValue(), false); + if (constField != null) { + aClass = PsiUtil.resolveClassInType(constField.getType()); + } + } + final String canCoerceError = JavaFxPsiUtil.isClassAcceptable(parentTag, aClass); if (canCoerceError != null) { host.addMessage(context.getNavigationElement(), canCoerceError, ValidationHost.ErrorType.ERROR); } - if (myPsiClass != null && myPsiClass.isValid()) { - final String message = JavaFxPsiUtil.isAbleToInstantiate(myPsiClass); + if (aClass != null && aClass.isValid()) { + final String message = JavaFxPsiUtil.isAbleToInstantiate(aClass); if (message != null) { host.addMessage(context, message, ValidationHost.ErrorType.ERROR); } diff --git a/plugins/javaFX/testData/highlighting/constantValue.fxml b/plugins/javaFX/testData/highlighting/constantValue.fxml new file mode 100644 index 000000000000..b31aa0260255 --- /dev/null +++ b/plugins/javaFX/testData/highlighting/constantValue.fxml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file