ublic boolean validate(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation, @NotNull ProblemSink problemSink) {
    boolean result = validateAnnotationOnRightType(psiClass, problemSink);
    if (result) {
      final Project project = psiAnnotation.getProject();
      final String builderClassName = getBuilderClassName(psiClass, psiAnnotation);
      final String buildMethodName = getBuildMethodName(psiAnnotation);
      final String builderMethodName = getBuilderMethodName(psiAnnotation);
      result = validateBuilderIdentifier(builderClassName, project, problemSink) &&
               validateBuilderIdentifier(buildMethodName, project, problemSink) &&
               (builderMethodName.isEmpty() || validateBuilderIdentifier(builderMethodName, project, problemSink)) &&
               validateExistingBuilderClass(builderClassName, psiClass, problemSink);
      if (result) {
        final Collection<BuilderInfo> builderInfos = createBuilderInfos(psiClass, null).collect(Collectors.toList());
        result = validateBuilderDefault(builderInfos, problemSink) &&
                 validateSingular(builderInfos, problemSink) &&
                 validateBuilderConstructor(psiClass, builderInfos, problemSink) &&
                 validateObtainViaAnnotations(builderInfos.stream(), problemSink);
      }
    }
    return result;
  }

ublic boolean validate(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation, @NotNull ProblemSink problemSink) 