@Override
  public boolean isAssignableFrom(@NotNull PsiType type) {
    if (type instanceof GrTupleType) {
      List<PsiType> otherComponents = ((GrTupleType)type).getComponentTypes();
      List<PsiType> componentTypes = getComponentTypes();
      for (int i = 0; i < Math.min(componentTypes.size(), otherComponents.size()); i++) {
        PsiType componentType = componentTypes.get(i);
        PsiType otherComponent = otherComponents.get(i);
        if (otherComponent == null) {
          if (componentType != null && !TypesUtil.isClassType(componentType, CommonClassNames.JAVA_LANG_OBJECT)) return false;
        }
        else if (componentType != null && !componentType.isAssignableFrom(otherComponent)) return false;
      }
      return true;
    }

    return super.isAssignableFrom(type);
  }
@Override
  public boolean isAssignableFrom(@NotNull PsiType type)