public static bool Equals(ITypeSymbol x, ITypeSymbol y) { if (ReferenceEquals(x, y)) { return(true); } if (x == null || y == null) { return(false); } if (x.TypeKind != y.TypeKind) { return(false); } if (x is INamedTypeSymbol xNamedType && y is INamedTypeSymbol yNamedType) { return(NamedTypeSymbolComparer.Equals(xNamedType, yNamedType)); } if (x.TypeKind == TypeKind.TypeParameter) { return(x.MetadataName == y.MetadataName && SymbolComparer.Equals(x.ContainingSymbol, y.ContainingSymbol)); } return(x.MetadataName == y.MetadataName && Equals(x.ContainingType, y.ContainingType) && NamespaceSymbolComparer.Equals(x.ContainingNamespace, y.ContainingNamespace)); }
private static bool IsArguments(InvocationExpressionSyntax invocation, SemanticModel semanticModel, CancellationToken cancellationToken, ISymbol first, ISymbol other) { if (invocation.ArgumentList == null || invocation.ArgumentList.Arguments.Count < 2) { return(false); } var e0 = invocation.ArgumentList.Arguments[0].Expression; var e1 = invocation.ArgumentList.Arguments[1].Expression; if (TryGetName(e0, out var name0) && TryGetName(e1, out var name1)) { var firstName = GetSymbolName(first); var otherName = GetSymbolName(other); if (name0 == firstName && name1 == otherName) { return(SymbolComparer.Equals(semanticModel.GetSymbolSafe(e0, cancellationToken), first) && SymbolComparer.Equals(semanticModel.GetSymbolSafe(e1, cancellationToken), other)); } if (name0 == otherName && name1 == firstName) { return(SymbolComparer.Equals(semanticModel.GetSymbolSafe(e0, cancellationToken), other) && SymbolComparer.Equals(semanticModel.GetSymbolSafe(e1, cancellationToken), first)); } } return(false); }
internal static bool IsInstanceEquals(ExpressionSyntax condition, SemanticModel semanticModel, ISymbol instance, ISymbol arg, CancellationToken cancellationToken) { return(condition is InvocationExpressionSyntax { ArgumentList : { Arguments : { Count : 1 } arguments } } invocation&& arguments.TrySingle(out var argument) && TryGetName(argument.Expression) == GetSymbolName(arg) && invocation.TryGetMethodName(out var name) && name == "Equals" && invocation.Expression is MemberAccessExpressionSyntax memberAccess && TryGetName(memberAccess.Expression) == GetSymbolName(instance) && SymbolComparer.Equals(instance, semanticModel.GetSymbolSafe(memberAccess.Expression, cancellationToken)) && SymbolComparer.Equals(semanticModel.GetSymbolSafe(argument.Expression, cancellationToken), arg)); }
public static bool Equals(ILocalSymbol x, ILocalSymbol y) { if (ReferenceEquals(x, y)) { return(true); } if (x == null || y == null) { return(false); } return(x.MetadataName == y.MetadataName && SymbolComparer.Equals(x.ContainingSymbol, y.ContainingSymbol)); }