public AddExpensiveCommentContextAction(ICSharpContextActionDataProvider dataProvider)
 {
     myDataProvider = dataProvider;
     mySwa          = dataProvider.Solution.GetComponent <SolutionAnalysisService>();
     myPerformanceContextProvider = dataProvider.Solution.GetComponent <PerformanceCriticalContextProvider>();
     myExpensiveContextProvider   = dataProvider.Solution.GetComponent <ExpensiveInvocationContextProvider>();
 }
Esempio n. 2
0
        public AddDiscardAttributeContextAction([NotNull] ICSharpContextActionDataProvider dataProvider)
        {
            myDataProvider = dataProvider;

            mySwa = dataProvider.Solution.GetComponent <SolutionAnalysisService>();
            myBurstContextProvider = dataProvider.Solution.GetComponent <BurstContextProvider>();
        }
 protected PerformanceAnalysisContextActionBase([NotNull] ICSharpContextActionDataProvider dataProvider)
     : base(dataProvider)
 {
     ExpensiveContextProvider   = dataProvider.Solution.GetComponent <ExpensiveInvocationContextProvider>().NotNull();
     PerformanceContextProvider = dataProvider.Solution.GetComponent <PerformanceCriticalContextProvider>().NotNull();
     SolutionAnalysisService    = dataProvider.Solution.GetComponent <SolutionAnalysisService>().NotNull();
 }
Esempio n. 4
0
 public static bool IsMarkedSweaDependent(
     [CanBeNull] this ICallGraphContextProvider contextProvider,
     [CanBeNull] IDeclaredElement declaredElement,
     [CanBeNull] SolutionAnalysisService swea)
 {
     return(IsMarkedSweaDependent(contextProvider, declaredElement, swea?.Configuration));
 }
Esempio n. 5
0
 public static DaemonProcessKind GetProcessKindForGraph(
     [NotNull] SolutionAnalysisService solutionAnalysisService)
 {
     return(IsSweaCompleted(solutionAnalysisService)
         ? DaemonProcessKind.GLOBAL_WARNINGS
         : DaemonProcessKind.VISIBLE_DOCUMENT);
 }
 public EventHandlerDetector(ISolution solution, SolutionAnalysisService swa, SettingsStore settingsStore,
                             CallGraphSwaExtensionProvider callGraphSwaExtension, UnityEventHandlerReferenceCache cache, PerformanceCriticalCodeCallGraphAnalyzer analyzer)
     : base(solution, swa, callGraphSwaExtension, settingsStore, analyzer)
 {
     myCallGraphSwaExtension = callGraphSwaExtension;
     myCache = cache;
 }
        public static bool HasHotIcon(this IDeclaredElement element, SolutionAnalysisService swa,
                                      CallGraphSwaExtensionProvider callGraphSwaExtensionProvider, IContextBoundSettingsStore settingsStore,
                                      PerformanceCriticalCodeCallGraphAnalyzer analyzer, DaemonProcessKind kind)
        {
            if (!settingsStore.GetValue((UnitySettings key) => key.EnableIconsForPerformanceCriticalCode))
            {
                return(false);
            }

            if (!settingsStore.GetValue((UnitySettings key) => key.EnablePerformanceCriticalCodeHighlighting))
            {
                return(false);
            }

            var usageChecker = swa.UsageChecker;

            if (usageChecker == null)
            {
                return(false);
            }

            var id = swa.GetElementId(element, true);

            if (!id.HasValue)
            {
                return(false);
            }

            return(callGraphSwaExtensionProvider.IsMarkedByCallGraphAnalyzer(analyzer.Id, id.Value,
                                                                             kind == DaemonProcessKind.GLOBAL_WARNINGS));
        }
Esempio n. 8
0
        protected override void DoTest(IProject project)
        {
            var swea = SolutionAnalysisService.GetInstance(Solution);

            #if RIDER
            using (TestPresentationMap.Cookie())
            #else
            using (new TestPresentationMap())
            #endif
                using (TestPsiConfigurationSettings.Instance.PersistCachesCookie())
                    using (swea.RunAnalysisCookie())
                    {
                        Lifetimes.Using(lifetime =>
                        {
                            ChangeSettingsTemporarily(lifetime).BoundStore.SetValue(HighlightingSettingsAccessor.AnalysisEnabled, AnalysisScope.SOLUTION);

                            var files = swea.GetFilesToAnalyze().OrderBy(f => f.Name).ToList();
                            foreach (var file in files)
                            {
                                swea.AnalyzeInvisibleFile(file);
                            }

                            ExecuteWithGold(writer =>
                            {
                                var highlightingSettingsManager = HighlightingSettingsManager.Instance;
                                foreach (var file in files)
                                {
                                    if (file.LanguageType.IsNullOrUnknown())
                                    {
                                        continue;
                                    }
                                    var pf = file.ToProjectFile();
                                    if (pf == null)
                                    {
                                        continue;
                                    }
                                    if (!pf.Location.Name.EndsWith(".cs"))
                                    {
                                        continue;
                                    }

                                    var process = new TestHighlightingDumper(file, writer,
                                                                             DaemonStageManager.GetInstance(Solution).Stages,
                                                                             (highlighting, settingsStore) =>
                                    {
                                        var attribute = highlightingSettingsManager.GetHighlightingAttribute(highlighting);
                                        return(highlightingSettingsManager.GetSeverity(highlighting, settingsStore) !=
                                               Severity.INFO || attribute.OverlapResolve != OverlapResolveKind.NONE);
                                    },
                                                                             CSharpLanguage.Instance);
                                    process.DoHighlighting(DaemonProcessKind.VISIBLE_DOCUMENT);
                                    process.DoHighlighting(DaemonProcessKind.GLOBAL_WARNINGS);
                                    process.Dump();
                                    writer.WriteLine();
                                }
                            });
                        });
                    }
        }
Esempio n. 9
0
 public PerformanceCriticalCodeAnalysisStage(SolutionAnalysisService swa, CallGraphActivityTracker tracker, PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                             ExpensiveCodeCallGraphAnalyzer expensiveAnalyzer)
 {
     Swa                 = swa;
     Tracker             = tracker;
     PerformanceAnalyzer = performanceAnalyzer;
     ExpensiveAnalyzer   = expensiveAnalyzer;
 }
 public UnityDeclarationHighlightingProviderBase(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                                                 SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer)
 {
     Solution = solution;
     Swa      = swa;
     CallGraphSwaExtensionProvider = callGraphSwaExtensionProvider;
     Analyzer = analyzer;
     Settings = settingsStore.BindToContextTransient(ContextRange.Smart(solution.ToDataContext()));
 }
Esempio n. 11
0
 public UnityHighlightingContributor(ISolution solution, ISettingsStore settingsStore,
                                     ITextControlManager textControlManager, SolutionAnalysisService swa,
                                     PerformanceCriticalCodeCallGraphAnalyzer performanceCriticalCodeCallGraphAnalyzer)
 {
     Swa = swa;
     PerformanceAnalyzerId = performanceCriticalCodeCallGraphAnalyzer.AnalyzerId;
     Solution           = solution;
     TextControlManager = textControlManager;
     SettingsStore      = settingsStore.BindToContextTransient(ContextRange.Smart(solution.ToDataContext()));
 }
Esempio n. 12
0
 public PerformanceCriticalCodeAnalysisProcess([NotNull] IDaemonProcess process, [NotNull] ICSharpFile file,
                                               [NotNull] SolutionAnalysisService swa, CallGraphActivityTracker tracker, [NotNull] PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                               [NotNull] ExpensiveCodeCallGraphAnalyzer expensiveCodeCallGraphAnalyzer)
     : base(process, file)
 {
     mySwa     = swa;
     myTracker = tracker;
     myPerformanceAnalyzerId = performanceAnalyzer.AnalyzerId;
     myExpensiveAnalyzerId   = expensiveCodeCallGraphAnalyzer.AnalyzerId;
 }
Esempio n. 13
0
 public RiderUnityCommonIconProvider(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                                     SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnityApi api, UnityCodeInsightProvider codeInsightProvider,
                                     UnitySolutionTracker solutionTracker, ConnectionTracker connectionTracker, IconHost iconHost)
     : base(solution, swa, callGraphSwaExtensionProvider, settingsStore, analyzer, api)
 {
     myCodeInsightProvider = codeInsightProvider;
     mySolutionTracker     = solutionTracker;
     myConnectionTracker   = connectionTracker;
     myIconHost            = iconHost;
 }
Esempio n. 14
0
 public UnityCommonIconProvider(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                                SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnityApi unityApi)
 {
     Solution = solution;
     Swa      = swa;
     CallGraphSwaExtensionProvider = callGraphSwaExtensionProvider;
     Analyzer = analyzer;
     UnityApi = unityApi;
     Settings = settingsStore.BindToContextTransient(ContextRange.Smart(solution.ToDataContext()));
 }
Esempio n. 15
0
 public RiderInitialiseOnLoadCctorDetector(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                                           SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnityCodeInsightFieldUsageProvider fieldUsageProvider,
                                           UnitySolutionTracker solutionTracker, ConnectionTracker connectionTracker,
                                           IconHost iconHost)
     : base(solution, swa, callGraphSwaExtensionProvider, settingsStore, analyzer)
 {
     myFieldUsageProvider = fieldUsageProvider;
     mySolutionTracker    = solutionTracker;
     myConnectionTracker  = connectionTracker;
     myIconHost           = iconHost;
 }
Esempio n. 16
0
 public RiderEventHandlerDetector(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                                  SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnitySceneDataLocalCache cache,
                                  UnityCodeInsightProvider codeInsightProvider,
                                  UnitySolutionTracker solutionTracker, ConnectionTracker connectionTracker,
                                  IconHost iconHost)
     : base(solution, swa, settingsStore, callGraphSwaExtensionProvider, cache, analyzer)
 {
     myCodeInsightProvider = codeInsightProvider;
     mySolutionTracker     = solutionTracker;
     myConnectionTracker   = connectionTracker;
     myIconHost            = iconHost;
 }
        public PerformanceCriticalCodeAnalysisProcess([NotNull] IDaemonProcess process, [NotNull] ICSharpFile file,
                                                      [NotNull] SolutionAnalysisService swa, CallGraphActivityTracker tracker, [NotNull] PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                                      [NotNull] ExpensiveCodeCallGraphAnalyzer expensiveCodeCallGraphAnalyzer)
            : base(process, file)
        {
            mySwa     = swa;
            myTracker = tracker;
            myPerformanceAnalyzerId = performanceAnalyzer.AnalyzerId;
            myExpensiveAnalyzerId   = expensiveCodeCallGraphAnalyzer.AnalyzerId;

            myLineMarkerEnabled = DaemonProcess.ContextBoundSettingsStore.GetValue((UnitySettings key) =>
                                                                                   key.PerformanceHighlightingMode) == PerformanceHighlightingMode.Always;
        }
 public RiderFieldDetector(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider,
                           SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnityApi unityApi,
                           UnityCodeInsightFieldUsageProvider fieldUsageProvider,
                           UnitySolutionTracker solutionTracker, ConnectionTracker connectionTracker,
                           IconHost iconHost, AssetSerializationMode assetSerializationMode)
     : base(solution, swa, callGraphSwaExtensionProvider, settingsStore, analyzer, unityApi)
 {
     myFieldUsageProvider     = fieldUsageProvider;
     mySolutionTracker        = solutionTracker;
     myConnectionTracker      = connectionTracker;
     myIconHost               = iconHost;
     myAssetSerializationMode = assetSerializationMode;
 }
        public static bool HasHotIcon(this ICSharpDeclaration element, SolutionAnalysisService swa,
                                      CallGraphSwaExtensionProvider callGraphSwaExtensionProvider, IContextBoundSettingsStore settingsStore,
                                      PerformanceCriticalCodeCallGraphAnalyzer analyzer, DaemonProcessKind kind)
        {
            var declaredElement = element.DeclaredElement;

            if (declaredElement == null)
            {
                return(false);
            }

            return(declaredElement.HasHotIcon(swa, callGraphSwaExtensionProvider, settingsStore, analyzer, kind));
        }
 public PerformanceCriticalCodeAnalysisStage(SolutionAnalysisService swa,
                                             UnitySolutionTracker solutionTracker, CallGraphActivityTracker tracker,
                                             CallGraphSwaExtensionProvider callGraphSwaExtension,
                                             PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                             ExpensiveCodeCallGraphAnalyzer expensiveAnalyzer)
 {
     Swa = swa;
     mySolutionTracker     = solutionTracker;
     Tracker               = tracker;
     CallGraphSwaExtension = callGraphSwaExtension;
     PerformanceAnalyzer   = performanceAnalyzer;
     ExpensiveAnalyzer     = expensiveAnalyzer;
 }
Esempio n. 21
0
        protected override void DoTest(IProject project)
        {
            var swea = SolutionAnalysisService.GetInstance(Solution);

            using (TestPresentationMap.Cookie())
                using (TestPsiConfigurationSettings.Instance.PersistCachesCookie())
                    using (swea.RunAnalysisCookie())
                    {
                        Lifetime.Using(lifetime =>
                        {
                            ChangeSettingsTemporarily(lifetime).BoundStore.SetValue(HighlightingSettingsAccessor.AnalysisEnabled, AnalysisScope.SOLUTION);

                            var files = swea.GetFilesToAnalyze().OrderBy(f => f.Name).ToList();
                            foreach (var file in files)
                            {
                                swea.AnalyzeInvisibleFile(file);
                            }

                            ExecuteWithGold(this.TestMethodName + ".cs", writer =>
                            {
                                foreach (var file in files)
                                {
                                    if (file.LanguageType.IsNullOrUnknown())
                                    {
                                        continue;
                                    }
                                    var pf = file.ToProjectFile();
                                    if (pf == null)
                                    {
                                        continue;
                                    }
                                    if (!pf.Location.Name.EndsWith(".cs"))
                                    {
                                        continue;
                                    }

                                    var process = new TestHighlightingDumper(file, writer,
                                                                             DaemonStageManager.GetInstance(Solution).Stages,
                                                                             (highlighting, psiSourceFile, settingsStore) =>
                                    {
                                        return(highlighting is PerformanceHighlightingBase);
                                    },
                                                                             CSharpLanguage.Instance);
                                    process.DoHighlighting(DaemonProcessKind.VISIBLE_DOCUMENT);
                                    process.DoHighlighting(DaemonProcessKind.GLOBAL_WARNINGS);
                                    process.Dump();
                                }
                            });
                        });
                    }
        }
        protected override void DoTest(Lifetime lifetime, IProject testProject)
        {
            var position = GetCaretPosition();

            IProjectFile item;

            if (position == null)
            {
                item = testProject.GetSubItemsRecursively().OfType <IProjectFile>().First("No project file");
            }
            else
            {
                item = (IProjectFile)testProject.FindProjectItemsByLocation(position.FileName)
                       .Single("No project file", "More than one project file");
            }

            var swea = SolutionAnalysisService.GetInstance(Solution);

            Assert.IsTrue(item.Kind == ProjectItemKind.PHYSICAL_FILE);
            using (TestPresentationMap.Cookie())
                using (swea.RunAnalysisCookie())
                {
                    using (var definition = Lifetime.Define(lifetime))
                    {
                        var boundstore = ChangeSettingsTemporarily(definition.Lifetime).BoundStore;
                        boundstore.SetValue(HighlightingSettingsAccessor.CalculateUnusedTypeMembers, InplaceUsageAnalysis);

                        ITextControl textControl = position != null
                        ? OpenTextControl(definition.Lifetime, position)
                        : OpenTextControl(definition.Lifetime, item);

                        {
                            swea.ReanalyzeFile(item.ToSourceFile());
                            using (CompilationContextCookie.GetOrCreate(textControl.GetContext(Solution)))
                            {
                                ExecuteWithGold(item, writer =>
                                {
                                    var highlightings = GetHighlightings(textControl);

                                    DumpQuickFixesAvailability(writer, highlightings, textControl, Solution);
                                });
                            }
                        }
                    }
                }
        }
        public static void AddHotHighlighting(this IHighlightingConsumer consumer, SolutionAnalysisService swa,
                                              CallGraphSwaExtensionProvider swaExtensionProvider, ICSharpDeclaration element, PerformanceCriticalCodeCallGraphAnalyzer analyzer,
                                              IContextBoundSettingsStore settings, string text,
                                              string tooltip, DaemonProcessKind kind, IEnumerable <BulbMenuItem> items, bool onlyHot = false)
        {
            var isIconHot = element.HasHotIcon(swa, swaExtensionProvider, settings, analyzer, kind);

            if (onlyHot && !isIconHot)
            {
                return;
            }

            var highlighting = isIconHot
                ? new UnityHotGutterMarkInfo(items, element, tooltip)
                : (IHighlighting) new UnityGutterMarkInfo(items, element, tooltip);

            consumer.AddHighlighting(highlighting);
        }
Esempio n. 24
0
        protected override void DoTest(Lifetime lifetime, IProject testProject)
        {
            var swea = SolutionAnalysisService.GetInstance(Solution);

            using (swea.RunAnalysisCookie())
            {
                var files = new List <IPsiSourceFile>(swea.GetFilesToAnalyze());

                foreach (var file in files)
                {
                    swea.AnalyzeInvisibleFile(file);
                }

                swea.AllFilesAnalyzed();

                base.DoTest(lifetime, testProject);
            }
        }
Esempio n. 25
0
        protected override void DoTest(Lifetime lifetime, IProject project)
        {
            var swea = SolutionAnalysisService.GetInstance(Solution);

            using (TestPresentationMap.Cookie())
                using (TestPsiConfigurationSettings.Instance.PersistCachesCookie())
                    using (swea.RunAnalysisCookie())
                    {
                        ChangeSettingsTemporarily(lifetime).BoundStore.SetValue((UnitySettings key) =>
                                                                                key.PerformanceHighlightingMode, PerformanceHighlightingMode.Always);

                        var files = swea.GetFilesToAnalyze().OrderBy(f => f.Name).ToList();
                        swea.ReanalyzeAll();

                        ExecuteWithGold(TestMethodName + ".cs", writer =>
                        {
                            foreach (var file in files)
                            {
                                if (file.LanguageType.IsNullOrUnknown())
                                {
                                    continue;
                                }
                                var pf = file.ToProjectFile();
                                if (pf == null)
                                {
                                    continue;
                                }
                                if (!pf.Location.Name.EndsWith(".cs"))
                                {
                                    continue;
                                }

                                var process = new TestHighlightingDumperWithOverridenStages(file, writer,
                                                                                            DaemonStageManager.GetInstance(Solution).Stages,
                                                                                            HighlightingPredicate,
                                                                                            CSharpLanguage.Instance);
                                process.DoHighlighting(DaemonProcessKind.VISIBLE_DOCUMENT);
                                process.DoHighlighting(DaemonProcessKind.GLOBAL_WARNINGS);
                                process.Dump();
                            }
                        });
                    }
        }
        protected override void DoTest(Lifetime lifetime, IProject testProject)
        {
            var swea = SolutionAnalysisService.GetInstance(Solution);

            using (swea.RunAnalysisCookie())
            {
                ChangeSettingsTemporarily(lifetime).BoundStore.SetValue((UnitySettings key) =>
                                                                        key.EnableIconsForBurstCode, false);
                ChangeSettingsTemporarily(lifetime).BoundStore.SetValue((UnitySettings key) =>
                                                                        key.EnableIconsForPerformanceCriticalCode, false);

                var files = new List <IPsiSourceFile>(swea.GetFilesToAnalyze());

                foreach (var file in files)
                {
                    swea.AnalyzeInvisibleFile(file);
                }

                swea.AllFilesAnalyzed();

                base.DoTest(lifetime, testProject);
            }
        }
Esempio n. 27
0
 protected override int GetOwnCount(SolutionAnalysisService swa, IGlobalUsageChecker usageChecker, IDeclaredElement element,
                                    ElementId?elementId)
 {
     Assertion.Assert(elementId.HasValue, "elementId.HasValue");
     return(usageChecker.GetCounterValue(elementId.Value, myUnityEditorUsageCounter));
 }
Esempio n. 28
0
 public FieldDetector(ISolution solution, SolutionAnalysisService swa, CallGraphSwaExtensionProvider callGraphSwaExtensionProvider, SettingsStore settingsStore, PerformanceCriticalCodeCallGraphAnalyzer analyzer, UnityApi unityApi)
     : base(solution, swa, callGraphSwaExtensionProvider, settingsStore, analyzer)
 {
     myUnityApi = unityApi;
 }
 public VSPerformanceCriticalCodeAnalysisProcess([NotNull] IDaemonProcess process, [NotNull] ICSharpFile file,
                                                 [NotNull] SolutionAnalysisService swa, [NotNull] CallGraphActivityTracker tracker, [NotNull] PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                                 ExpensiveCodeCallGraphAnalyzer expensiveAnalyzer)
     : base(process, file, swa, tracker, performanceAnalyzer, expensiveAnalyzer)
 {
 }
 public VSPerformanceCriticalCodeAnalysisStage(SolutionAnalysisService swa, UnitySolutionTracker solutionTracker, CallGraphActivityTracker tracker, PerformanceCriticalCodeCallGraphAnalyzer performanceAnalyzer,
                                               ExpensiveCodeCallGraphAnalyzer expensiveAnalyzer)
     : base(swa, solutionTracker, tracker, performanceAnalyzer, expensiveAnalyzer)
 {
 }