Exemple #1
0
        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);
        }