boolean (GrMethod method) { if (!method.getName().equals(MAIN_METHOD)) return false; else if (!GrModifierListUtil.hasCodeModifierProperty(method, PsiModifier.STATIC)) return false; final GrParameter[] parameters = method.getParameters(); if (parameters.length == 0) return false; if (parameters.length == 1 && parameters[0].getTypeElementGroovy() == null) return true; int args_count = 0; int optional_count = 0; for (GrParameter p : parameters) { final GrTypeElement declaredType = p.getTypeElementGroovy(); boolean optional = p.isOptional(); if (optional) { optional_count++; } else if (declaredType == null || declaredType.getType().equalsToText(CommonClassNames.JAVA_LANG_STRING + "[]")) { args_count++; } } return optional_count == parameters.length - 1 && args_count == 1; }