mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
javafx: filter out unacceptable ids during fx:reference source processing
(cherry picked from commit 490500af5adb50c3cd1b35de700a28fd37ca644b)
This commit is contained in:
+6
@@ -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", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<?import javafx.scene.layout.*?>\n" +
|
||||
|
||||
+29
-7
@@ -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<String> acceptableIds = new HashSet<String>();
|
||||
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<XmlAttributeValue> {
|
||||
private final Map<String, XmlAttributeValue> myFileIds;
|
||||
private final Set<String> myAcceptableIds;
|
||||
private final String myReferencesId;
|
||||
|
||||
private JavaFxIdReferenceBase(XmlAttributeValue element,
|
||||
Map<String, XmlAttributeValue> fileIds,
|
||||
Set<String> acceptableIds,
|
||||
String referencesId) {
|
||||
super(element);
|
||||
myFileIds = fileIds;
|
||||
myAcceptableIds = acceptableIds;
|
||||
myReferencesId = referencesId;
|
||||
}
|
||||
|
||||
public JavaFxIdReferenceBase(XmlAttributeValue xmlAttributeValue,
|
||||
Map<String, XmlAttributeValue> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?import javafx.scene.layout.GridPane?>
|
||||
|
||||
<GridPane xmlns:fx="http://javafx.com/fxml" fx:id="foo">
|
||||
<rowConstraints>
|
||||
<fx:reference source="<caret>"/>
|
||||
</rowConstraints>
|
||||
</GridPane>
|
||||
Reference in New Issue
Block a user