@Override public JSType restrictByNotNullOrUndefined() { UnionTypeBuilder restricted = new UnionTypeBuilder(registry); for (JSType t : alternatesWithoutStucturalTyping) { restricted.addAlternate(t.restrictByNotNullOrUndefined()); } return restricted.build(); }
@Override JSType resolveInternal(ErrorReporter t, StaticScope<JSType> scope) { setResolvedTypeInternal(this); call = (ArrowType) safeResolve(call, t, scope); if (prototypeSlot != null) { prototypeSlot.setType(safeResolve(prototypeSlot.getType(), t, scope)); } // Warning about typeOfThis if it doesn't resolve to an ObjectType // is handled further upstream. // // TODO(nicksantos): Handle this correctly if we have a UnionType. JSType maybeTypeOfThis = safeResolve(typeOfThis, t, scope); if (maybeTypeOfThis != null) { if (maybeTypeOfThis.isNullType() || maybeTypeOfThis.isVoidType()) { typeOfThis = maybeTypeOfThis; } else { maybeTypeOfThis = ObjectType.cast(maybeTypeOfThis.restrictByNotNullOrUndefined()); if (maybeTypeOfThis != null) { typeOfThis = maybeTypeOfThis; } } } ImmutableList<ObjectType> resolvedImplemented = resolveTypeListHelper(implementedInterfaces, t, scope); if (resolvedImplemented != null) { implementedInterfaces = resolvedImplemented; } ImmutableList<ObjectType> resolvedExtended = resolveTypeListHelper(extendedInterfaces, t, scope); if (resolvedExtended != null) { extendedInterfaces = resolvedExtended; } if (subTypes != null) { for (int i = 0; i < subTypes.size(); i++) { subTypes.set(i, JSType.toMaybeFunctionType(subTypes.get(i).resolve(t, scope))); } } return super.resolveInternal(t, scope); }