diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java index 63d6048183ae..e73e5c627192 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java @@ -180,12 +180,9 @@ public class JavaClassReference extends GenericReference implements PsiJavaRefer @Override public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { final ElementManipulator manipulator = getManipulator(getElement()); - if (manipulator != null) { - final PsiElement element = manipulator.handleContentChange(getElement(), getRangeInElement(), newElementName); - myRange = new TextRange(getRangeInElement().getStartOffset(), getRangeInElement().getStartOffset() + newElementName.length()); - return element; - } - throw new IncorrectOperationException("Manipulator for this element is not defined: " + getElement()); + final PsiElement element = manipulator.handleContentChange(getElement(), getRangeInElement(), newElementName); + myRange = new TextRange(getRangeInElement().getStartOffset(), getRangeInElement().getStartOffset() + newElementName.length()); + return element; } @Override @@ -215,12 +212,9 @@ public class JavaClassReference extends GenericReference implements PsiJavaRefer } TextRange range = new TextRange(myJavaClassReferenceSet.getReference(0).getRangeInElement().getStartOffset(), end); final ElementManipulator manipulator = getManipulator(getElement()); - if (manipulator != null) { - final PsiElement finalElement = manipulator.handleContentChange(getElement(), range, newName); - myJavaClassReferenceSet.reparse(finalElement, TextRange.from(range.getStartOffset(), newName.length())); - return finalElement; - } - return element; + final PsiElement finalElement = manipulator.handleContentChange(getElement(), range, newName); + myJavaClassReferenceSet.reparse(finalElement, TextRange.from(range.getStartOffset(), newName.length())); + return finalElement; } @Override diff --git a/platform/core-api/src/com/intellij/psi/PsiElement.java b/platform/core-api/src/com/intellij/psi/PsiElement.java index 9f1b0d026376..e6394bb13b1c 100644 --- a/platform/core-api/src/com/intellij/psi/PsiElement.java +++ b/platform/core-api/src/com/intellij/psi/PsiElement.java @@ -96,7 +96,6 @@ public interface PsiElement extends UserDataHolder, Iconable { * * @return the first child, or null if the element has no children. */ - @Nullable PsiElement getFirstChild(); /** @@ -104,7 +103,6 @@ public interface PsiElement extends UserDataHolder, Iconable { * * @return the last child, or null if the element has no children. */ - @Nullable PsiElement getLastChild(); /** diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/CachingReference.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/CachingReference.java index fe032d918805..5f59d511a03b 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/CachingReference.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/CachingReference.java @@ -21,6 +21,7 @@ import com.intellij.psi.ElementManipulators; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.ResolveCache; +import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -46,9 +47,13 @@ public abstract class CachingReference implements PsiReference, EmptyResolveMess return false; } - @Nullable + @NotNull public static ElementManipulator getManipulator(T currentElement){ - return ElementManipulators.getManipulator(currentElement); + ElementManipulator manipulator = ElementManipulators.getManipulator(currentElement); + if (manipulator == null) { + throw new IncorrectOperationException("Manipulator for this element is not defined: " + currentElement); + } + return manipulator; } private static class MyResolver implements ResolveCache.Resolver { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java index 2f37c1431a18..ae652a95a1e0 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java @@ -399,18 +399,15 @@ public class FileReference implements FileReferenceOwner, PsiPolyVariantReferenc @Override public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { final ElementManipulator manipulator = CachingReference.getManipulator(getElement()); - if (manipulator != null) { - myFileReferenceSet.setElement(manipulator.handleContentChange(getElement(), getRangeInElement(), newElementName)); - //Correct ranges - int delta = newElementName.length() - myRange.getLength(); - myRange = new TextRange(getRangeInElement().getStartOffset(), getRangeInElement().getStartOffset() + newElementName.length()); - FileReference[] references = myFileReferenceSet.getAllReferences(); - for (int idx = myIndex + 1; idx < references.length; idx++) { - references[idx].myRange = references[idx].myRange.shiftRight(delta); - } - return myFileReferenceSet.getElement(); + myFileReferenceSet.setElement(manipulator.handleContentChange(getElement(), getRangeInElement(), newElementName)); + //Correct ranges + int delta = newElementName.length() - myRange.getLength(); + myRange = new TextRange(getRangeInElement().getStartOffset(), getRangeInElement().getStartOffset() + newElementName.length()); + FileReference[] references = myFileReferenceSet.getAllReferences(); + for (int idx = myIndex + 1; idx < references.length; idx++) { + references[idx].myRange = references[idx].myRange.shiftRight(delta); } - throw new IncorrectOperationException("Manipulator for this element is not defined: " + getElement()); + return myFileReferenceSet.getElement(); } public PsiElement bindToElement(@NotNull final PsiElement element, final boolean absolute) throws IncorrectOperationException {