public override bool VisitTypeParameter(ITypeParameterSymbol symbol) { if (symbol.HasReferenceTypeConstraint() && symbol.ReferenceTypeConstraintNullableAnnotation() == NullableAnnotation.None) { return(true); } foreach (var constraintType in symbol.ConstraintTypes) { if (Instance.Visit(constraintType)) { return(true); } } return(false); }
private static bool CheckTypeParameterConstraints(ITypeParameterSymbol symbol) { if (symbol.HasReferenceTypeConstraint() && symbol.ReferenceTypeConstraintNullableAnnotation() == NullableAnnotation.None) { // where T : class~ return(true); } foreach (var constraintType in symbol.ConstraintTypes) { if (Instance.Visit(constraintType)) { // Examples: // where T : SomeReferenceType~ // where T : I<SomeReferenceType~> return(true); } } return(false); }