code: final boolean isStructuralSubtype(ObjectType superType,
        ImplCache implicitImplCache, SubtypingMode subtypingMode) {
      // Union types should be handled by isSubtype already
      checkArgument(!this.isUnionType());
      checkArgument(!superType.isUnionType());
      Preconditions.checkArgument(superType.isStructuralType(),
          "isStructuralSubtype should be called with structural supertype. Found %s", superType);
  
      MatchStatus cachedResult = implicitImplCache.checkCache(this, superType);
      if (cachedResult != null) {
        return cachedResult.subtypeValue();
      }
  
      boolean result =
          isStructuralSubtypeHelper(
              this, superType, implicitImplCache, subtypingMode, VOIDABLE_PROPS_ARE_OPTIONAL);
      return implicitImplCache.updateCache(this, superType, MatchStatus.valueOf(result));
    }
docs: Determine if {@code this} is a an implicit subtype of {@code superType}.