public AlternativeFieldSignatureData(
      @NotNull JavaAnnotationResolver annotationResolver,
      @NotNull JavaFieldImpl field,
      @NotNull JetType originalReturnType,
      boolean isVar) {
    String signature = SignaturesUtil.getKotlinSignature(annotationResolver, field);

    if (signature == null) {
      setAnnotated(false);
      return;
    }

    setAnnotated(true);
    Project project = field.getPsi().getProject();
    JetProperty altPropertyDeclaration = JetPsiFactory.createProperty(project, signature);

    try {
      checkForSyntaxErrors(altPropertyDeclaration);
      checkFieldAnnotation(altPropertyDeclaration, field, isVar);
      altReturnType =
          computeReturnType(
              originalReturnType,
              altPropertyDeclaration.getTypeRef(),
              new HashMap<TypeParameterDescriptor, TypeParameterDescriptorImpl>());
    } catch (AlternativeSignatureMismatchException e) {
      setError(e.getMessage());
    }
  }
  public AlternativeMethodSignatureData(
      @NotNull ExternalAnnotationResolver externalAnnotationResolver,
      @NotNull JavaMethod method,
      @Nullable JetType receiverType,
      @NotNull Project project,
      @NotNull List<ValueParameterDescriptor> valueParameters,
      @Nullable JetType originalReturnType,
      @NotNull List<TypeParameterDescriptor> methodTypeParameters,
      boolean hasSuperMethods) {
    String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, method);

    if (signature == null) {
      setAnnotated(false);
      altFunDeclaration = null;
      return;
    }

    if (receiverType != null) {
      throw new UnsupportedOperationException(
          "Alternative annotations for extension functions are not supported yet");
    }

    setAnnotated(true);
    altFunDeclaration = JetPsiFactory.createFunction(project, signature);

    originalToAltTypeParameters =
        DescriptorResolverUtils.recreateTypeParametersAndReturnMapping(methodTypeParameters, null);

    try {
      checkForSyntaxErrors(altFunDeclaration);
      checkEqualFunctionNames(altFunDeclaration, method);

      computeTypeParameters(methodTypeParameters);
      computeValueParameters(valueParameters);

      if (originalReturnType != null) {
        altReturnType =
            computeReturnType(
                originalReturnType,
                altFunDeclaration.getReturnTypeRef(),
                originalToAltTypeParameters);
      }

      if (hasSuperMethods) {
        checkParameterAndReturnTypesForOverridingMethods(
            valueParameters, methodTypeParameters, originalReturnType);
      }
    } catch (AlternativeSignatureMismatchException e) {
      setError(e.getMessage());
    }
  }