private bool AnalyzeMemberWithinContext(ITypeSymbol type, ISymbol?symbol, SyntaxNodeAnalysisContext context, Location?focusDiagnosticOn = null) { if (type is null) { throw new ArgumentNullException(nameof(type)); } bool requiresUIThread = (type.TypeKind == TypeKind.Interface || type.TypeKind == TypeKind.Class || type.TypeKind == TypeKind.Struct) && this.MembersRequiringMainThread.Contains(type, symbol); if (requiresUIThread) { ThreadingContext threadingContext = ThreadingContext.Unknown; SyntaxNode? methodDeclaration = context.Node.FirstAncestorOrSelf <SyntaxNode>(n => CSharpCommonInterest.MethodSyntaxKinds.Contains(n.Kind())); if (methodDeclaration is object) { threadingContext = this.methodDeclarationNodes.GetValueOrDefault(methodDeclaration); } if (threadingContext != ThreadingContext.MainThread) { CSharpUtils.ContainingFunctionData function = CSharpUtils.GetContainingFunction((CSharpSyntaxNode)context.Node); Location location = focusDiagnosticOn ?? context.Node.GetLocation(); DiagnosticDescriptor?descriptor = function.IsAsync ? DescriptorAsync : DescriptorSync; var formattingArgs = function.IsAsync ? new object[] { type.Name } : new object[] { type.Name, this.MainThreadAssertingMethods.FirstOrDefault() }; context.ReportDiagnostic(Diagnostic.Create(descriptor, location, this.DiagnosticProperties, formattingArgs)); return(true); } } return(false); }
public bool ExecuteCommand(SurroundWithCommandArgs args, CommandExecutionContext context) { ThreadingContext.ThrowIfNotOnUIThread(); if (!AreSnippetsEnabled(args)) { return(false); } return(TryInvokeInsertionUI(args.TextView, args.SubjectBuffer, surroundWith: true)); }
public TestExportJoinableTaskContext() { var synchronizationContext = SynchronizationContext.Current; try { SynchronizationContext.SetSynchronizationContext(GetEffectiveSynchronizationContext()); (JoinableTaskContext, SynchronizationContext) = ThreadingContext.CreateJoinableTaskContext(); ResetThreadAffinity(JoinableTaskContext.Factory); } finally { SynchronizationContext.SetSynchronizationContext(synchronizationContext); } }
public CommandState GetCommandState(SurroundWithCommandArgs args) { ThreadingContext.ThrowIfNotOnUIThread(); if (!AreSnippetsEnabled(args)) { return(CommandState.Unspecified); } if (!CodeAnalysis.Workspace.TryGetWorkspace(args.SubjectBuffer.AsTextContainer(), out var workspace)) { return(CommandState.Unspecified); } if (!workspace.CanApplyChange(ApplyChangesKind.ChangeDocument)) { return(CommandState.Unspecified); } return(CommandState.Available); }