Example #1
0
        public bool TryGetAssemblyDecompilationResult(string assemblyPath, out IAssemblyDecompilationResults decompilationResult)
        {
            decompilationResult = null;

            if (string.IsNullOrWhiteSpace(assemblyPath))
            {
                return(false);
            }
            return(cache.TryGetValue(assemblyPath, out decompilationResult));
        }
 private void GetAttributeDecompilationResult(string filePath, ref IDecompilationResults decompilationResults)
 {
     if (decompilationResults == null)
     {
         IAssemblyDecompilationResults assemblyResult = GetAssemblyResult(filePath);
         if (assemblyResult == null)
         {
             return;
         }
         decompilationResults = assemblyResult.AssemblyAttributesDecompilationResults;
     }
 }
Example #3
0
 public void AddDecompilationResult(string assemblyPath, IAssemblyDecompilationResults result)
 {
     cache[assemblyPath] = result;
 }
        public Task LoadItemsAsync(Action cancelAction = null)
        {
            CancellationToken cancellationToken = progressNotifier.GetCanellationToken();

            cancellationToken.Register(() =>
            {
                if (cancelAction != null)
                {
                    cancelAction();
                }
            });
            this.progressNotifier.IsBusy          = true;
            this.progressNotifier.IsIndeterminate = false;
            this.progressNotifier.LoadingMessage  = "Loading...";

            var task = Task.Factory.StartNew(() =>
            {
                try
                {
                    int assemblyCount  = TypesMap.OldType != null && TypesMap.NewType != null ? 2 : 1;
                    int assemblyNumber = 1;

                    if (TypesMap.OldType != null && !GlobalDecompilationResultsRepository.Instance.ContainsAssembly(TypesMap.OldType))
                    {
                        progressNotifier.LoadingMessage = string.Format("Loading assembly {0} of {1}", assemblyNumber, assemblyCount);

                        IAssemblyDecompilationResults r1 = Decompiler.GenerateFiles(TypesMap.OldType,
                                                                                    GenerationProjectInfoMap.OldType.OutputPath,
                                                                                    SupportedLanguage.CSharp,
                                                                                    cancellationToken,
                                                                                    progressNotifier);

                        cancellationToken.ThrowIfCancellationRequested();

                        GlobalDecompilationResultsRepository.Instance.AddDecompilationResult(TypesMap.OldType, r1);

                        TrackFrameworkVersionAndAssemblyType(TypesMap.OldType);

                        assemblyNumber++;
                    }
                    if (TypesMap.NewType != null && !GlobalDecompilationResultsRepository.Instance.ContainsAssembly(TypesMap.NewType))
                    {
                        progressNotifier.LoadingMessage = string.Format("Loading assembly {0} of {1}", assemblyNumber, assemblyCount);
                        progressNotifier.Progress       = 0;

                        IAssemblyDecompilationResults r2 = Decompiler.GenerateFiles(TypesMap.NewType,
                                                                                    GenerationProjectInfoMap.NewType.OutputPath,
                                                                                    SupportedLanguage.CSharp,
                                                                                    cancellationToken,
                                                                                    progressNotifier);

                        cancellationToken.ThrowIfCancellationRequested();

                        GlobalDecompilationResultsRepository.Instance.AddDecompilationResult(TypesMap.NewType, r2);

                        TrackFrameworkVersionAndAssemblyType(TypesMap.NewType);
                    }
                    List <SharpTreeNode> moduleNodes = this.GetMergedModules(true).ToList();

                    this.differenceDecoration = this.GetDifferenceDecoration(moduleNodes);

                    var defaultResourceNode = new DefaultResourceNode(TypesMap, this, this.GenerationProjectInfoMap, this.FilterSettings);

                    DispatcherObjectExt.BeginInvoke(() =>
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        foreach (ModuleNode node in moduleNodes)
                        {
                            this.Children.Add(node);
                        }

                        this.Children.Add(defaultResourceNode);

                        this.OnChildrenLoaded();

                        this.progressNotifier.Completed();
                    }, DispatcherPriority.Background);
                }
                catch (Exception ex)
                {
                    var exceptionStringBuilder = new StringBuilder();

                    exceptionStringBuilder.Append(ex.Message)
                    .AppendLine()
                    .AppendLine(ex.StackTrace);

                    DispatcherObjectExt.BeginInvoke(
                        () =>
                    {
                        ToolWindow.ShowDialog(new ErrorMessageWindow(exceptionStringBuilder.ToString(), "Exception"), width: 800, height: 500);
                        this.progressNotifier.Completed();
                    },
                        DispatcherPriority.Background);

                    throw ex;
                }
            }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current);

            return(task);
        }