public static boolean validate(@NotNull PsiModifierListOwner psiModifierListOwner,
                                 @NotNull PsiType delegateTargetType,
                                 @NotNull PsiAnnotation psiAnnotation,
                                 @NotNull ProblemSink problemSink) {
    boolean result = true;

    if (psiModifierListOwner.hasModifierProperty(PsiModifier.STATIC)) {
      problemSink.addErrorMessage("inspection.message.delegate.legal.only.on.instance.fields");
      result = false;
    }

    final Collection<PsiType> types = collectDelegateTypes(psiAnnotation, delegateTargetType);
    result &= validateTypes(types, problemSink);
    result &= validateTypesMethodsExistsInDelegateTargetType(types, delegateTargetType, problemSink);

    final Collection<PsiType> excludes = collectExcludeTypes(psiAnnotation);
    result &= validateTypes(excludes, problemSink);

    return result;
  }
public static boolean validate(@NotNull PsiModifierListOwner psiModifierListOwner,
                                 @NotNull PsiType delegateTargetType,
                                 @NotNull PsiAnnotation psiAnnotation,
                                 @NotNull ProblemSink problemSink)