diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXRenameTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXRenameTest.java index 122cac29eea4..56f647133506 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXRenameTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXRenameTest.java @@ -36,6 +36,10 @@ public class JavaFXRenameTest extends JavaFXDaemonAnalyzerTestCase { doTest(getTestName(false) + "1"); } + public void testInRoot() throws Exception { + doTest(getTestName(false) + "1"); + } + public void testControllerField() throws Exception { doTest("newFieldName"); } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/FxmlReferencesContributor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/FxmlReferencesContributor.java index 91a5e8dfcad5..dfb4b3773e0e 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/FxmlReferencesContributor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/FxmlReferencesContributor.java @@ -21,6 +21,7 @@ import com.intellij.patterns.XmlAttributeValuePattern; import com.intellij.patterns.XmlPatterns; import com.intellij.psi.*; import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider; +import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlProcessingInstruction; import com.intellij.psi.xml.XmlTag; @@ -193,20 +194,37 @@ public class FxmlReferencesContributor extends PsiReferenceContributor { } public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { - String oldText = ((XmlTag)myPosition).getName(); + String oldText = getOldName(); final TextRange range = getRangeInElement(); final String newText = oldText.substring(0, range.getStartOffset() - 1) + newElementName + oldText.substring(range.getEndOffset() - 1); - return ((XmlTag)myPosition).setName(newText); + return setNewName(newText); } public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { - String oldText = ((XmlTag)myPosition).getName(); + String oldText = getOldName(); final TextRange range = getRangeInElement(); final String newText = (element instanceof PsiPackage ? ((PsiPackage)element).getQualifiedName() : ((PsiClass)element).getName()) + oldText.substring(range.getEndOffset() - 1); - return ((XmlTag)myPosition).setName(newText); + return setNewName(newText); + } + + private PsiElement setNewName(String newText) { + if (myPosition instanceof XmlTag) { + return ((XmlTag)myPosition).setName(newText); + } + else { + final XmlElementFactory xmlElementFactory = XmlElementFactory.getInstance(myPosition.getProject()); + final XmlAttribute xmlAttribute = xmlElementFactory.createXmlAttribute("attributeName", newText); + final XmlAttributeValue valueElement = xmlAttribute.getValueElement(); + assert valueElement != null; + return myPosition.replace(valueElement); + } + } + + private String getOldName() { + return myPosition instanceof XmlTag ? ((XmlTag)myPosition).getName() : ((XmlAttributeValue)myPosition).getValue(); } public boolean isReferenceTo(PsiElement element) { diff --git a/plugins/javaFX/testData/rename/InRoot.java b/plugins/javaFX/testData/rename/InRoot.java new file mode 100644 index 000000000000..646aa93646ef --- /dev/null +++ b/plugins/javaFX/testData/rename/InRoot.java @@ -0,0 +1 @@ +public class InRoot extends javafx.scene.layout.GridPane {} \ No newline at end of file diff --git a/plugins/javaFX/testData/rename/inRoot.fxml b/plugins/javaFX/testData/rename/inRoot.fxml new file mode 100644 index 000000000000..2976f723cf3e --- /dev/null +++ b/plugins/javaFX/testData/rename/inRoot.fxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/javaFX/testData/rename/inRoot_after.fxml b/plugins/javaFX/testData/rename/inRoot_after.fxml new file mode 100644 index 000000000000..a34f9135b13b --- /dev/null +++ b/plugins/javaFX/testData/rename/inRoot_after.fxml @@ -0,0 +1 @@ + \ No newline at end of file