示例#1
0
        public static void TryGetTargetAssemblyGetTypeWithParameterByType()
        {
            var code          = @"
namespace N
{
    using System.Reflection;

    public class C
    {
        public C(Assembly assembly)
        {
            assembly.GetType(""System.Int32"");
        }
    }
}";
            var syntaxTree    = CSharpSyntaxTree.ParseText(code);
            var compilation   = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes());
            var semanticModel = compilation.GetSemanticModel(syntaxTree);
            var invocation    = syntaxTree.FindInvocation("GetType");
            var method        = new QualifiedMethod(new QualifiedType(typeof(Assembly).FullName), "GetType");

            Assert.AreEqual(true, invocation.TryGetTarget(method, QualifiedParameter.Create(QualifiedType.FromType(typeof(string))), semanticModel, CancellationToken.None, out var target, out var arg));
            Assert.AreEqual("System.Reflection.Assembly.GetType(string)", target.ToString());
            Assert.AreEqual("\"System.Int32\"", arg.ToString());
        }
        internal IHostedServiceType()
            : base("Microsoft.Extensions.Hosting.IHostedService")
        {
            var parameters = ImmutableArray.Create(QualifiedParameter.Create(new QualifiedType("System.Threading.CancellationToken")));

            this.StartAsync = new QualifiedOverload(this, nameof(this.StartAsync), parameters);
            this.StopAsync  = new QualifiedOverload(this, nameof(this.StopAsync), parameters);
        }
示例#3
0
        private static bool TryGetArgs(SyntaxNodeAnalysisContext context, [NotNullWhen(true)] out IMethodSymbol?target, [NotNullWhen(true)] out ArgumentSyntax?propertyArg, [NotNullWhen(true)] out ArgumentSyntax?valueArg)
        {
            if (context.Node is InvocationExpressionSyntax invocation)
            {
                var propertyParameter = QualifiedParameter.Create(KnownSymbols.DependencyProperty);
                var valueParameter    = QualifiedParameter.Create(KnownSymbols.Object);
                return(invocation.TryGetTarget(KnownSymbols.DependencyObject.SetValue, propertyParameter, valueParameter, context.SemanticModel, context.CancellationToken, out target, out propertyArg, out valueArg) ||
                       invocation.TryGetTarget(KnownSymbols.DependencyObject.SetValue, QualifiedParameter.Create(KnownSymbols.DependencyPropertyKey), valueParameter, context.SemanticModel, context.CancellationToken, out target, out propertyArg, out valueArg) ||
                       invocation.TryGetTarget(KnownSymbols.DependencyObject.SetCurrentValue, propertyParameter, valueParameter, context.SemanticModel, context.CancellationToken, out target, out propertyArg, out valueArg));
            }

            target      = null;
            propertyArg = null;
            valueArg    = null;
            return(false);
        }
示例#4
0
 private static void Handle(SyntaxNodeAnalysisContext context)
 {
     if (!context.IsExcludedFromAnalysis() &&
         context.Node is InvocationExpressionSyntax invocation &&
         invocation.TryGetTarget(KnownSymbol.Type.IsAssignableFrom, QualifiedParameter.Create(KnownSymbol.Type), context.SemanticModel, context.CancellationToken, out _, out var arg) &&
         Type.TryGet(arg.Expression, context, out _, out var source) &&
         IsInstanceGetType(source, context.SemanticModel, context.CancellationToken, out var instance))
     {
         context.ReportDiagnostic(
             Diagnostic.Create(
                 REFL040PreferIsInstanceOfType.Descriptor,
                 invocation.GetLocation(),
                 invocation.Expression,
                 instance));
     }
 }