private static boolean mayBeFinal(Set<PsiReference> refsSet, PsiElement firstElement) { for (PsiReference ref : refsSet) { PsiElement element = ref.getElement(); if (element == firstElement) continue; if (element instanceof PsiExpression && PsiUtil.isAccessedForWriting((PsiExpression) element)) return false; } return true; }
private static boolean notAccessedForWriting( @NotNull PsiVariable variable, @NotNull LocalSearchScope searchScope) { for (PsiReference reference : ReferencesSearch.search(variable, searchScope)) { final PsiElement element = reference.getElement(); if (element instanceof PsiExpression && PsiUtil.isAccessedForWriting((PsiExpression) element)) { return false; } } return true; }
private static PsiElement getFirstElement(Collection<PsiReference> refs) { PsiElement firstElement = null; for (PsiReference reference : refs) { final PsiElement element = reference.getElement(); if (firstElement == null || firstElement.getTextRange().getStartOffset() > element.getTextRange().getStartOffset()) { firstElement = element; } } return firstElement; }
private static PsiCodeBlock findAnchorBlock(final Collection<PsiReference> refs) { PsiCodeBlock result = null; for (PsiReference psiReference : refs) { final PsiElement element = psiReference.getElement(); PsiCodeBlock block = PsiTreeUtil.getParentOfType(element, PsiCodeBlock.class); if (result == null || block == null) { result = block; } else { final PsiElement commonParent = PsiTreeUtil.findCommonParent(result, block); result = PsiTreeUtil.getParentOfType(commonParent, PsiCodeBlock.class, false); } } return result; }
private void removeParametersUsedInExitsOnly( PsiElement codeFragment, List<PsiVariable> inputVariables) { LocalSearchScope scope = new LocalSearchScope(codeFragment); Variables: for (Iterator<PsiVariable> iterator = inputVariables.iterator(); iterator.hasNext(); ) { PsiVariable variable = iterator.next(); for (PsiReference ref : ReferencesSearch.search(variable, scope)) { PsiElement element = ref.getElement(); int elementOffset = myControlFlow.getStartOffset(element); if (elementOffset == -1) { continue Variables; } if (elementOffset >= myFlowStart && elementOffset <= myFlowEnd) { if (!isInExitStatements(element, myExitStatements)) continue Variables; } } iterator.remove(); } }
@Override public boolean process(PsiReference reference) { final PsiElement element = reference.getElement(); if (element instanceof PsiReferenceExpression && PsiUtil.isAccessedForWriting((PsiExpression) element)) { myIsWriteRefFound = true; return false; } return true; }