/** * 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; }
@Nullable @Override public PsiElement adjustReferenceOrReferencedElement(@NotNull PsiFile file, @NotNull Editor editor, int offset, int flags, @Nullable PsiElement refElement) { if (refElement == null) { PsiReference ref = TargetElementUtil.findReference(editor, offset); if (ref instanceof PerlCachingReference) { ResolveResult[] resolveResults = ((PsiPolyVariantReference)ref).multiResolve(false); if (resolveResults.length > 0) { return resolveResults[0].getElement(); } } } return refElement; }
@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; }
@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(); PsiReference reference = TargetElementUtil.findReference(myEditor, myAdjustedOffset); if (reference instanceof PsiPolyVariantReference) { List<PsiElement> result = new ArrayList<>();
protected void doTestFindUsages() { initWithFileSmart(); int flags = TargetElementUtil.ELEMENT_NAME_ACCEPTED | TargetElementUtil.REFERENCED_ELEMENT_ACCEPTED; PsiElement targetElement = TargetElementUtil.findTargetElement(getEditor(), flags); assertNotNull("Cannot find referenced element", targetElement); UsefulTestCase.assertSameLinesWithFile(getTestResultsFilePath(), checkAndSerializeFindUsages(targetElement)); }
@Nullable @Override public HighlightUsagesHandlerBase createHighlightUsagesHandler(@NotNull Editor editor, @NotNull PsiFile file) { int offset = TargetElementUtil.adjustOffset(file, editor.getDocument(), editor.getCaretModel().getOffset()); PsiElement target = file.getViewProvider().findElementAt(offset, PerlLanguage.INSTANCE); return target == null ? null : new PerlHighlightUsagesHandler(editor, file, target, offset); }
@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); } }
boolean found = false; final PsiReference ref = TargetElementUtil.findReference(editor); if (ref instanceof PsiPolyVariantReference) { ResolveResult[] results = ((PsiPolyVariantReference) ref).multiResolve(false);
@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; } }
PsiReference reference = editor != null ? TargetElementUtil.findReference(editor, editor.getCaretModel().getOffset()) : null; if (reference != null && !rule.equals(reference.resolve())) { reference = null;