boolean (PsiElement body) { class Visitor extends JavaRecursiveElementWalkingVisitor { boolean leak = false; @Override public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) { super.visitMethodCallExpression(call); PsiExpression qualifier = ExpressionUtils.getEffectiveQualifier(call.getMethodExpression()); if (qualifier instanceof PsiQualifiedExpression) { leak = true; stopWalking(); } } @Override public void visitNewExpression(@NotNull PsiNewExpression expression) { super.visitNewExpression(expression); if (expression.getQualifier() == null) { PsiJavaCodeReferenceElement reference = expression.getClassReference(); if (reference != null) { PsiClass target = tryCast(reference.resolve(), PsiClass.class); if (target != null && target.getContainingClass() != null && !target.hasModifierProperty(PsiModifier.STATIC)) { leak = true; stopWalking(); } } } } @Override public void visitThisExpression(@NotNull PsiThisExpression expression) { super.visitThisExpression(expression); PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); if (!(parent instanceof PsiReferenceExpression)) { leak = true; stopWalking(); } } } Visitor visitor = new Visitor(); body.accept(visitor); return visitor.leak; }