From 4a159a864889b6b7616b1fac7b96175eddb60e65 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 25 Mar 2013 18:04:15 +0100 Subject: [PATCH] javafx: filter out unacceptable ids during fx:reference source processing (cherry picked from commit 490500af5adb50c3cd1b35de700a28fd37ca644b) --- .../javaFX/fxml/JavaFxCompletionTest.java | 6 ++++ .../JavaFxComponentIdReferenceProvider.java | 36 +++++++++++++++---- .../completion/acceptableSourceOnly.fxml | 7 ++++ 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 plugins/javaFX/testData/completion/acceptableSourceOnly.fxml 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 f4dc9e7de8d5..88ed649fe695 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 @@ -148,6 +148,12 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase { assertEquals(5, myItems.length); } + public void testAcceptableSourceOnly() throws Exception { + myFixture.configureByFiles(getTestName(true) + ".fxml"); + myItems = myFixture.completeBasic(); + assertEmpty(myItems); + } + public void testIncludedRootAttributes() throws Exception { myFixture.addFileToProject("foo.fxml", "\n" + "\n" + diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxComponentIdReferenceProvider.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxComponentIdReferenceProvider.java index 3f344c1572f9..20b7fad50d55 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxComponentIdReferenceProvider.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxComponentIdReferenceProvider.java @@ -31,10 +31,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.FxmlConstants; import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * User: anna @@ -94,24 +91,49 @@ class JavaFxComponentIdReferenceProvider extends PsiReferenceProvider { } return new PsiReference[] {idReferenceBase}; } - final JavaFxIdReferenceBase idReferenceBase = new JavaFxIdReferenceBase(xmlAttributeValue, fileIds, referencesId); if (startsWithDollar) { + final JavaFxIdReferenceBase idReferenceBase = new JavaFxIdReferenceBase(xmlAttributeValue, fileIds, referencesId); final TextRange rangeInElement = idReferenceBase.getRangeInElement(); idReferenceBase.setRangeInElement(new TextRange(rangeInElement.getStartOffset() + 1, rangeInElement.getEndOffset())); + return new PsiReference[]{idReferenceBase}; + } else { + final Set acceptableIds = new HashSet(); + if (currentTag != null) { + final XmlTag parentTag = currentTag.getParentTag(); + for (final String id : fileIds.keySet()) { + final XmlAttributeValue resolvedAttrValue = fileIds.get(id); + if (JavaFxPsiUtil.isClassAcceptable(parentTag, JavaFxPsiUtil.getTagClass(resolvedAttrValue)) == null) { + acceptableIds.add(id); + } + } + } + JavaFxIdReferenceBase idReferenceBase = new JavaFxIdReferenceBase(xmlAttributeValue, fileIds, acceptableIds, referencesId); + return new PsiReference[]{idReferenceBase}; } - return new PsiReference[]{idReferenceBase}; } private static class JavaFxIdReferenceBase extends PsiReferenceBase { private final Map myFileIds; + private final Set myAcceptableIds; private final String myReferencesId; + private JavaFxIdReferenceBase(XmlAttributeValue element, + Map fileIds, + Set acceptableIds, + String referencesId) { + super(element); + myFileIds = fileIds; + myAcceptableIds = acceptableIds; + myReferencesId = referencesId; + } + public JavaFxIdReferenceBase(XmlAttributeValue xmlAttributeValue, Map fileIds, String referencesId) { super(xmlAttributeValue); myFileIds = fileIds; myReferencesId = referencesId; + myAcceptableIds = myFileIds.keySet(); } @Nullable @@ -123,7 +145,7 @@ class JavaFxComponentIdReferenceProvider extends PsiReferenceProvider { @NotNull @Override public Object[] getVariants() { - return ArrayUtil.toStringArray(myFileIds.keySet()); + return ArrayUtil.toStringArray(myAcceptableIds); } } diff --git a/plugins/javaFX/testData/completion/acceptableSourceOnly.fxml b/plugins/javaFX/testData/completion/acceptableSourceOnly.fxml new file mode 100644 index 000000000000..350e929d2a08 --- /dev/null +++ b/plugins/javaFX/testData/completion/acceptableSourceOnly.fxml @@ -0,0 +1,7 @@ + + + + + + +