boolean (PsiExpression expression, PsiElement context) { if (expression instanceof PsiReferenceExpression referenceExpression) { final JavaResolveResult result = referenceExpression.advancedResolve(false); if (!result.isAccessible() || !result.isValidResult()) { return false; } final PsiElement target = result.getElement(); final PsiElement parent = expression.getParent(); if (!(parent instanceof DummyHolder)) { // checking qualifier return target != null; } if (!(target instanceof PsiField field)) { return false; } final PsiType type = field.getType(); if (type instanceof PsiPrimitiveType) { return false; } final PsiExpression qualifier = referenceExpression.getQualifierExpression(); return qualifier == null || isValidGuard(qualifier, context); } else if (expression instanceof PsiMethodCallExpression methodCallExpression) { final PsiExpressionList argumentList = methodCallExpression.getArgumentList(); if (!argumentList.isEmpty()) { return false; } final JavaResolveResult result = methodCallExpression.resolveMethodGenerics(); if (!result.isAccessible() || !result.isValidResult()) { return false; } final PsiElement element = result.getElement(); if (!(element instanceof PsiMethod method)) { return false; } final PsiType type = method.getReturnType(); if (type instanceof PsiPrimitiveType) { return false; } final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); final PsiExpression qualifierExpression = methodExpression.getQualifierExpression(); return qualifierExpression == null || isValidGuard(qualifierExpression, context); } else if (expression instanceof PsiThisExpression thisExpression) { final PsiJavaCodeReferenceElement qualifier = thisExpression.getQualifier(); if (qualifier == null) { return true; } final JavaResolveResult result = qualifier.advancedResolve(false); if (!result.isValidResult() || !result.isAccessible()) { return false; } final PsiElement target = result.getElement(); if (!(target instanceof PsiClass aClass)) { return false; } return InheritanceUtil.hasEnclosingInstanceInScope(aClass, context, false, false); } else if (expression instanceof PsiClassObjectAccessExpression classObjectAccessExpression) { final PsiTypeElement operand = classObjectAccessExpression.getOperand(); final PsiType type = operand.getType(); if (!(type instanceof PsiClassType classType)) { return false; } final PsiClass target = classType.resolve(); return target != null; } return false; }