TailType (@NotNull PsiElement call, @Nullable PsiType returnType, @NotNull PsiMethod method) { if (method.isConstructor() && call instanceof PsiMethodCallExpression && ((PsiMethodCallExpression)call).getMethodExpression() instanceof PsiSuperExpression) { return JavaTailTypes.CALL_RPARENTH_SEMICOLON; } final boolean chainable = !PsiTypes.voidType().equals(returnType) && returnType != null || method.isConstructor() && call instanceof PsiNewExpression; final PsiElement parent = call.getParent(); final boolean statementContext = parent instanceof PsiExpressionStatement || parent instanceof PsiVariable || parent instanceof PsiCodeBlock; if (parent instanceof PsiThrowStatement || statementContext && !chainable) { return JavaTailTypes.CALL_RPARENTH_SEMICOLON; } return JavaTailTypes.CALL_RPARENTH; }