MethodCandidateInfo (@NotNull final MethodCandidateInfo staticFactoryMethod, final PsiElement parent, final boolean varargs, final PsiExpressionList argumentList) { return new MethodCandidateInfo(staticFactoryMethod.getElement(), PsiSubstitutor.EMPTY, !staticFactoryMethod.isAccessible(), false, argumentList, parent, null, null) { private PsiType[] myExpressionTypes; @Override public boolean isVarargs() { return varargs; } @Override protected PsiElement getParent() { return parent; } @Override public PsiType[] getArgumentTypes() { if (myExpressionTypes == null) { final PsiType[] expressionTypes = argumentList.getExpressionTypes(); if (MethodCandidateInfo.isOverloadCheck()) { return expressionTypes; } myExpressionTypes = expressionTypes; } return myExpressionTypes; } }; }