boolean (@NotNull PsiVariable variable, @NotNull PsiExpression expression, @NotNull PsiReferenceExpression reference, @NotNull PsiFile containingFile) { if (variable.hasInitializer()) return false; if (variable instanceof PsiParameter) return false; PsiElement scope = getElementVariableReferencedFrom(variable, expression); if (variable instanceof PsiField field) { // if inside some field initializer if (HighlightUtil.findEnclosingFieldInitializer(expression) != null) return true; // assignment from within inner class is illegal always if (scope != null && !containingFile.getManager().areElementsEquivalent(scope, field.getContainingClass())) return false; PsiMember enclosingCtrOrInitializer = PsiUtil.findEnclosingConstructorOrInitializer(expression); return enclosingCtrOrInitializer != null && !(enclosingCtrOrInitializer instanceof PsiMethod && JavaPsiRecordUtil.isCompactConstructor((PsiMethod)enclosingCtrOrInitializer)) && isSameField(enclosingCtrOrInitializer, field, reference, containingFile); } if (variable instanceof PsiLocalVariable) { boolean isAccessedFromOtherClass = scope != null; return !isAccessedFromOtherClass; } return true; }