private bool IsPredicate(ITypeSymbol type) { if (!ExpressionType.Equals(type.OriginalDefinition, SymbolEqualityComparer.Default) || !(type is INamedTypeSymbol namedType)) { return(false); } var actualFuncType = namedType.TypeArguments[0]; if (!FuncType.Equals(actualFuncType.OriginalDefinition, SymbolEqualityComparer.Default) || !(actualFuncType is INamedTypeSymbol actualFuncNamedType)) { return(false); } var returnType = actualFuncNamedType.TypeArguments[1]; if (returnType.SpecialType != SpecialType.System_Boolean) { return(false); } return(true); }