From 2bb6d246e0b856f35446783422018ab6b4174c57 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 22 Mar 2013 15:57:24 +0100 Subject: [PATCH] javafx: field name isCaseInsensitiveEqual to default property should be treated as subTag (cherry picked from commit df4e26648dd1e5040ae2cba4f96cdb1ef10222b5) --- .../javaFX/fxml/JavaFXHighlightingTest.java | 4 ++++ .../JavaFxClassBackedElementDescriptor.java | 21 ++++++++++++++++--- .../highlighting/defaultPropertyField.fxml | 8 +++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 plugins/javaFX/testData/highlighting/defaultPropertyField.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 5e102ed66bf3..44851316b960 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 @@ -281,6 +281,10 @@ public class JavaFXHighlightingTest extends AbstractJavaFXTestCase { doTest(); } + public void testDefaultPropertyField() 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/JavaFxClassBackedElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxClassBackedElementDescriptor.java index 9ca469404597..005e205845c6 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 @@ -1,5 +1,6 @@ package org.jetbrains.plugins.javaFX.fxml.descriptors; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.Validator; import com.intellij.codeInsight.daemon.impl.analysis.GenericsHighlightUtil; import com.intellij.openapi.project.Project; @@ -26,6 +27,7 @@ import org.jetbrains.plugins.javaFX.fxml.JavaFxCommonClassNames; import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -150,14 +152,27 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor, final String parentTagName = contextTag.getName(); if (myPsiClass != null) { if (!FxmlConstants.FX_DEFINE.equals(parentTagName)) { - final JavaFxPropertyElementDescriptor elementDescriptor = new JavaFxPropertyElementDescriptor(myPsiClass, name, false); + JavaFxPropertyElementDescriptor elementDescriptor = new JavaFxPropertyElementDescriptor(myPsiClass, name, false); if (FxmlConstants.FX_ROOT.equals(parentTagName)) { final PsiField fieldByName = myPsiClass.findFieldByName(name, true); if (fieldByName != null) { return elementDescriptor; } - } else if (elementDescriptor.getDeclaration() != null) { - return elementDescriptor; + } else { + final PsiAnnotation defaultProperty = AnnotationUtil + .findAnnotationInHierarchy(myPsiClass, Collections.singleton(JavaFxCommonClassNames.JAVAFX_BEANS_DEFAULT_PROPERTY)); + if (defaultProperty != null) { + final PsiAnnotationMemberValue defaultPropertyAttributeValue = defaultProperty.findAttributeValue("value"); + if (defaultPropertyAttributeValue instanceof PsiLiteralExpression) { + final Object value = ((PsiLiteralExpression)defaultPropertyAttributeValue).getValue(); + if (value instanceof String && ((String)value).equalsIgnoreCase(name) && myPsiClass.findFieldByName(name, true) == null) { + elementDescriptor = null; + } + } + } + if (elementDescriptor != null && elementDescriptor.getDeclaration() != null) { + return elementDescriptor; + } } } } diff --git a/plugins/javaFX/testData/highlighting/defaultPropertyField.fxml b/plugins/javaFX/testData/highlighting/defaultPropertyField.fxml new file mode 100644 index 000000000000..df6b79c789e6 --- /dev/null +++ b/plugins/javaFX/testData/highlighting/defaultPropertyField.fxml @@ -0,0 +1,8 @@ + + + + + + + +