/** * Convenience. Sometimes <code>PsiFile.findElementAt()</code> * isn't enough. This will never return null. * @throws IllegalArgumentException if it couldn't find an element */ public static @NotNull PsiElement findTargetElement(final Editor editor) { final PsiElement found = TargetElementUtil .findTargetElement(editor, TargetElementUtil.getInstance().getAllAccepted()); if (found == null) { throw new IllegalArgumentException("No element under the cursor"); } return found; }
@NotNull @Override protected TextRange getRangeToRename(@NotNull PsiElement element) { PsiElement namedElement = TargetElementUtil.getInstance().getNamedElement(element, 0); return namedElement instanceof PerlIdentifierRangeProvider ? ((PerlIdentifierRangeProvider)namedElement).getRangeInIdentifier() : ElementManipulators.getValueTextRange(element); }
private static PsiElement findTargetElement(@NotNull Editor editor, @NotNull PsiFile file) { PsiElement targetElement = TargetElementUtil.findTargetElement(editor, TargetElementUtil.getInstance().getReferenceSearchFlags()); if (targetElement != null && targetElement != file) { if (targetElement instanceof NavigationItem) { targetElement = (targetElement).getNavigationElement(); } if (targetElement instanceof NavigationItem) { return targetElement; } } return null; }
/** * This is a copy of {@link TargetElementUtil#findTargetElement(com.intellij.openapi.editor.Editor, int)} without obsolete EDT assertion * fixme remove after assertion removal */ @Nullable private static PsiElement findTargetElement(Editor editor, int flags) { int offset = editor.getCaretModel().getOffset(); final PsiElement result = TargetElementUtil.getInstance().findTargetElement(editor, flags, offset); if (result != null) { return result; } int expectedCaretOffset = editor instanceof EditorEx ? ((EditorEx)editor).getExpectedCaretOffset() : offset; if (expectedCaretOffset != offset) { return TargetElementUtil.getInstance().findTargetElement(editor, flags, expectedCaretOffset); } return null; }
@NotNull @Override public Tokenizer getTokenizer(PsiElement element) { IElementType elementType = PsiUtilCore.getElementType(element); if (elementType == POD_IDENTIFIER) { PsiElement namedElement = TargetElementUtil.getInstance().getNamedElement(element, 0); if (namedElement != null) { return EMPTY_TOKENIZER; } PsiFile podFile = element.getContainingFile().getViewProvider().getPsi(PodLanguage.INSTANCE); if (podFile == null) { return EMPTY_TOKENIZER; } PsiReference reference = podFile.findReferenceAt(element.getTextOffset()); return reference != null ? EMPTY_TOKENIZER : TEXT_TOKENIZER; } return super.getTokenizer(element); } }
@Override public List<PsiElement> getTargets() { PsiElement namedElement = TargetElementUtil.getInstance().getNamedElement(myElement, myAdjustedOffset - myElement.getNode().getStartOffset()); if (namedElement != null) { PsiReference reference = ReferencesSearch.search(namedElement, new LocalSearchScope(myFile)).findFirst();
@Nullable @Override protected PsiNamedElement getVariable() { PsiNamedElement variable = super.getVariable(); if (variable != null) { return variable; } if (!(myElementToRename instanceof PerlDelegatingLightNamedElement)) { return null; } PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myEditor.getDocument()); if (psiFile == null) { return null; } PsiElement psiLeaf = psiFile.getViewProvider().findElementAt(myRenameOffset.getStartOffset(), myElementToRename.getLanguage()); if (psiLeaf == null) { return null; } PsiElement namedElement = TargetElementUtil.getInstance().getNamedElement(psiLeaf, 0); if (namedElement instanceof PerlDelegatingLightNamedElement) { return (PsiNamedElement)namedElement; } return null; } }