From 3beb9f094f4381ccd708b9f4a76004cb405b540d Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 22 Apr 2013 15:00:53 +0400 Subject: [PATCH] InplaceRefactoring getVariable fix (by Greg) --- .../rename/inplace/InplaceRefactoring.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java index 2ce06379d3ef..183ec0b4cc42 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java @@ -138,9 +138,11 @@ public abstract class InplaceRefactoring { if (myElementToRename != null) { myInitialName = initialName; final PsiFile containingFile = myElementToRename.getContainingFile(); - if (!notSameFile(getTopLevelVirtualFile(containingFile.getViewProvider()), containingFile)) { - myRenameOffset = myElementToRename != null && myElementToRename.getTextRange() != null ? myEditor.getDocument() - .createRangeMarker(myElementToRename.getTextRange()) : null; + if (!notSameFile(getTopLevelVirtualFile(containingFile.getViewProvider()), containingFile) && + myElementToRename != null && myElementToRename.getTextRange() != null) { + myRenameOffset = myEditor.getDocument().createRangeMarker(myElementToRename.getTextRange()); + myRenameOffset.setGreedyToRight(true); + myRenameOffset.setGreedyToLeft(true); // todo not sure if we need this } } } @@ -484,15 +486,18 @@ public abstract class InplaceRefactoring { @Nullable protected PsiNamedElement getVariable() { + // todo we can use more specific class, shouldn't we? + //Class clazz = myElementToRename != null? myElementToRename.getClass() : PsiNameIdentifierOwner.class; if (myElementToRename != null && myElementToRename.isValid()) { if (Comparing.strEqual(myOldName, myElementToRename.getName())) return myElementToRename; - if (myRenameOffset != null) return PsiTreeUtil.getParentOfType(myElementToRename.getContainingFile().findElementAt(myRenameOffset.getStartOffset()), PsiNameIdentifierOwner.class); + if (myRenameOffset != null) return PsiTreeUtil.findElementOfClassAtRange( + myElementToRename.getContainingFile(), myRenameOffset.getStartOffset(), myRenameOffset.getEndOffset(), PsiNameIdentifierOwner.class); } if (myRenameOffset != null) { final PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myEditor.getDocument()); if (psiFile != null) { - return PsiTreeUtil.getParentOfType(psiFile.findElementAt(myRenameOffset.getStartOffset()), PsiNameIdentifierOwner.class); + return PsiTreeUtil.findElementOfClassAtRange(psiFile, myRenameOffset.getStartOffset(), myRenameOffset.getEndOffset(), PsiNameIdentifierOwner.class); } } return myElementToRename;