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); }
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); }
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)); } }