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