internal static bool IsType(AttributeSyntax attribute, QualifiedType qualifiedType, SemanticModel semanticModel, CancellationToken cancellationToken) { if (attribute == null) { return(false); } if (attribute.Name is SimpleNameSyntax simpleName) { if (!IsMatch(simpleName, qualifiedType) && !AliasWalker.Contains(attribute.SyntaxTree, simpleName.Identifier.ValueText)) { return(false); } } else if (attribute.Name is QualifiedNameSyntax qualifiedName && qualifiedName.Right is SimpleNameSyntax typeName) { if (!IsMatch(typeName, qualifiedType) && !AliasWalker.Contains(attribute.SyntaxTree, typeName.Identifier.ValueText)) { return(false); } } var attributeType = semanticModel.GetTypeInfoSafe(attribute, cancellationToken).Type; return(attributeType == qualifiedType); bool IsMatch(SimpleNameSyntax sn, QualifiedType qt) { return(sn.Identifier.ValueText == qt.Type || qt.Type.IsParts(sn.Identifier.ValueText, "Attribute")); } }
internal static bool TryGetConstructor(this ObjectCreationExpressionSyntax objectCreation, QualifiedType qualifiedType, SemanticModel semanticModel, CancellationToken cancellationToken, out IMethodSymbol ctor) { if (objectCreation.Type is SimpleNameSyntax typeName && (typeName.Identifier.ValueText == qualifiedType.Type || AliasWalker.Contains(objectCreation.SyntaxTree, typeName.Identifier.ValueText))) { ctor = semanticModel.GetSymbolSafe(objectCreation, cancellationToken) as IMethodSymbol; return(ctor?.ContainingType == qualifiedType); } if (objectCreation.Type is QualifiedNameSyntax qualifiedName && qualifiedName.Right.Identifier.ValueText == qualifiedType.Type) { ctor = semanticModel.GetSymbolSafe(objectCreation, cancellationToken) as IMethodSymbol; return(ctor?.ContainingType == qualifiedType); } ctor = null; return(false); }