Skip to content

Commit

Permalink
javafx: variables resolve (IDEA-100318)
Browse files Browse the repository at this point in the history
  • Loading branch information
akozlova committed Feb 4, 2013
1 parent 2798d26 commit ef8deec
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(XmlPatterns.xmlAttributeValue().withValue(string().startsWith("@")).and(attributeValueInFxml),
new JavaFxLocationReferenceProvider());

registrar.registerReferenceProvider(XmlPatterns.xmlAttributeValue().withValue(string().startsWith("$")).and(attributeValueInFxml),
new JavaFxComponentIdReferenceProvider());

registrar.registerReferenceProvider(XmlPatterns.xmlAttributeValue().withParent(XmlPatterns.xmlAttribute().withName("url")).and(attributeValueInFxml),
new JavaFxLocationReferenceProvider());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
*/
package org.jetbrains.plugins.javaFX.fxml.refs;

import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlTag;
Expand All @@ -37,20 +39,31 @@ class JavaFxComponentIdReferenceProvider extends PsiReferenceProvider {
public PsiReference[] getReferencesByElement(@NotNull PsiElement element,
@NotNull ProcessingContext context) {
final XmlAttributeValue xmlAttributeValue = (XmlAttributeValue)element;
final String referencesId = xmlAttributeValue.getValue();
final XmlTag currentTag = PsiTreeUtil.getParentOfType(xmlAttributeValue, XmlTag.class);
final String value = xmlAttributeValue.getValue();
final boolean startsWithDollar = value.startsWith("$");
final String referencesId = startsWithDollar ? value.substring(1) : value;
final Map<String, XmlAttributeValue> fileIds = new HashMap<String, XmlAttributeValue>();
xmlAttributeValue.getContainingFile().accept(new XmlRecursiveElementVisitor() {
@Override
public void visitXmlTag(XmlTag tag) {
super.visitXmlTag(tag);
final XmlAttribute attribute = tag.getAttribute(FxmlConstants.FX_ID);
if (attribute != null) {
fileIds.put(attribute.getValue(), attribute.getValueElement());
if (currentTag != tag) {
final XmlAttribute attribute = tag.getAttribute(FxmlConstants.FX_ID);
if (attribute != null) {
fileIds.put(attribute.getValue(), attribute.getValueElement());
}
}
}
});

return new PsiReference[]{new PsiReferenceBase<XmlAttributeValue>(xmlAttributeValue) {
@Override
public TextRange getRangeInElement() {
final TextRange rangeInElement = super.getRangeInElement();
return startsWithDollar ? new TextRange(rangeInElement.getStartOffset() + 1, rangeInElement.getEndOffset()) : rangeInElement;
}

@Nullable
@Override
public PsiElement resolve() {
Expand Down
10 changes: 10 additions & 0 deletions plugins/javaFX/testData/completion/variableCompletion.fxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tooltip?>
<GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
<fx:define>
<Tooltip text="tooltip" fx:id="t"/>
</fx:define>

<Button onAction="#sayHello" text="Hello" fx:id="b1" tooltip="$<caret>" />
</GridPane>
10 changes: 10 additions & 0 deletions plugins/javaFX/testData/completion/variableCompletion_after.fxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tooltip?>
<GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
<fx:define>
<Tooltip text="tooltip" fx:id="t"/>
</fx:define>

<Button onAction="#sayHello" text="Hello" fx:id="b1" tooltip="$t" />
</GridPane>
10 changes: 10 additions & 0 deletions plugins/javaFX/testData/highlighting/variables.fxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tooltip?>
<GridPane xmlns:fx="http://javafx.com/fxml">
<fx:define>
<Tooltip text="tooltip" fx:id="mytt"/>
</fx:define>

<Button text="Hello" fx:id="b1" tooltip="$mytt" />
</GridPane>
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ public void testReferenceAttributes() throws Exception {
doTest();
}

public void testVariables() throws Exception {
doTest();
}

public void testDefineAttributes() throws Exception {
doTest();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ public void testFactoryMethods() throws Exception {
doTest("observableArrayList");
}

public void testVariableCompletion() throws Exception {
doTest();
}

private void doTest() throws Exception {
doTest(null);
}
Expand Down

0 comments on commit ef8deec

Please sign in to comment.