@Override
  public boolean processUsage(
      ChangeInfo changeInfo, UsageInfo usageInfo, boolean beforeMethodChange, UsageInfo[] usages) {
    if (!(changeInfo instanceof JavaChangeInfo)) return false;

    PsiElement element = usageInfo.getElement();
    if (element == null) return false;
    if (!GroovyLanguage.INSTANCE.equals(element.getLanguage())) return false;

    if (beforeMethodChange) {
      if (usageInfo instanceof OverriderUsageInfo) {
        processPrimaryMethodInner(
            ((JavaChangeInfo) changeInfo),
            (GrMethod) ((OverriderUsageInfo) usageInfo).getElement(),
            ((OverriderUsageInfo) usageInfo).getBaseMethod());
      }
    } else {
      if (usageInfo instanceof GrMethodCallUsageInfo) {
        processMethodUsage(
            element,
            ((JavaChangeInfo) changeInfo),
            ((GrMethodCallUsageInfo) usageInfo).isToChangeArguments(),
            ((GrMethodCallUsageInfo) usageInfo).isToCatchExceptions(),
            ((GrMethodCallUsageInfo) usageInfo).getMapToArguments(),
            ((GrMethodCallUsageInfo) usageInfo).getSubstitutor());
        return true;
      } else if (usageInfo instanceof DefaultConstructorImplicitUsageInfo) {
        processConstructor(
            (GrMethod) ((DefaultConstructorImplicitUsageInfo) usageInfo).getConstructor(),
            (JavaChangeInfo) changeInfo);
        return true;
      } else if (usageInfo instanceof NoConstructorClassUsageInfo) {
        processClassUsage(
            (GrTypeDefinition) ((NoConstructorClassUsageInfo) usageInfo).getPsiClass(),
            ((JavaChangeInfo) changeInfo));
        return true;
      } else if (usageInfo instanceof ChangeSignatureParameterUsageInfo) {
        String newName = ((ChangeSignatureParameterUsageInfo) usageInfo).newParameterName;
        ((PsiReference) element).handleElementRename(newName);
        return true;
      } else {
        PsiReference ref = element.getReference();
        if (ref != null && changeInfo.getMethod() != null) {
          ref.bindToElement(changeInfo.getMethod());
          return true;
        }
      }
    }
    return false;
  }