internal override void ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken) { while (true) { cancellationToken.ThrowIfCancellationRequested(); var incompletePart = _state.NextIncompletePart; switch (incompletePart) { //@t-mawind We don't have any attributes on these, so don't // try to complete them. case CompletionPart.TypeParameterConstraints: var constraintTypes = ConstraintTypesNoUseSiteDiagnostics; // Nested type parameter references might not be valid in error scenarios. //Debug.Assert(this.ContainingSymbol.IsContainingSymbolOfAllTypeParameters(this.ConstraintTypes)); //Debug.Assert(this.ContainingSymbol.IsContainingSymbolOfAllTypeParameters(ImmutableArray<TypeSymbol>.CreateFrom(this.Interfaces))); Debug.Assert(ContainingSymbol.IsContainingSymbolOfAllTypeParameters(EffectiveBaseClassNoUseSiteDiagnostics)); Debug.Assert(ContainingSymbol.IsContainingSymbolOfAllTypeParameters(DeducedBaseTypeNoUseSiteDiagnostics)); break; case CompletionPart.None: return; default: // any other values are completion parts intended for other kinds of symbols // @t-mawind Again, we don't have attributes, so note them complete. _state.NotePartComplete(CompletionPart.All & ~CompletionPart.TypeParameterConstraints); break; } _state.SpinWaitComplete(incompletePart, cancellationToken); } }