Browse Source

Use ParserService.ParseAsync for view initialization

newNRILSpyDebugger
Siegfried Pammer 12 years ago
parent
commit
a0ec3c4942
  1. 18
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs
  2. 2
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
  3. 14
      src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs

18
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs

@ -114,18 +114,12 @@ namespace ICSharpCode.ILSpyAddIn
} }
} }
public static ILSpyUnresolvedFile DecompileType(DecompiledTypeReference name) public static ILSpyFullParseInformation DecompileType(DecompiledTypeReference name, CancellationToken cancellationToken = default(CancellationToken))
{ {
if (name == null) if (name == null)
throw new ArgumentNullException("name"); throw new ArgumentNullException("name");
return DoDecompile(name); var astBuilder = CreateAstBuilder(name, cancellationToken);
} return new ILSpyFullParseInformation(ILSpyUnresolvedFile.Create(name, astBuilder), null, astBuilder.SyntaxTree);
public static async Task<ILSpyUnresolvedFile> DecompileTypeAsync(DecompiledTypeReference name, CancellationToken cancellationToken)
{
return await Task.Run(
delegate() { return DoDecompile(name, cancellationToken); },
cancellationToken);
} }
static AstBuilder CreateAstBuilder(DecompiledTypeReference name, CancellationToken cancellationToken = default(CancellationToken)) static AstBuilder CreateAstBuilder(DecompiledTypeReference name, CancellationToken cancellationToken = default(CancellationToken))
@ -152,12 +146,6 @@ namespace ICSharpCode.ILSpyAddIn
{ {
return ILSpyUnresolvedFile.Create(name, CreateAstBuilder(name, cancellationToken)); return ILSpyUnresolvedFile.Create(name, CreateAstBuilder(name, cancellationToken));
} }
public static ILSpyFullParseInformation ParseDecompiledType(DecompiledTypeReference name, CancellationToken cancellationToken = default(CancellationToken))
{
var astBuilder = CreateAstBuilder(name, cancellationToken);
return new ILSpyFullParseInformation(ILSpyUnresolvedFile.Create(name, astBuilder), null, astBuilder.SyntaxTree);
}
} }
public class DecompiledTypeReference : IEquatable<DecompiledTypeReference> public class DecompiledTypeReference : IEquatable<DecompiledTypeReference>

2
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpyAddIn
public ParseInformation Parse(FileName fileName, ITextSource fileContent, bool fullParseInformationRequested, IProject parentProject, CancellationToken cancellationToken) public ParseInformation Parse(FileName fileName, ITextSource fileContent, bool fullParseInformationRequested, IProject parentProject, CancellationToken cancellationToken)
{ {
return ILSpyDecompilerService.ParseDecompiledType(DecompiledTypeReference.FromFileName(fileName), cancellationToken); return ILSpyDecompilerService.DecompileType(DecompiledTypeReference.FromFileName(fileName), cancellationToken);
} }
public ResolveResult Resolve(ParseInformation parseInfo, TextLocation location, ICompilation compilation, CancellationToken cancellationToken) public ResolveResult Resolve(ParseInformation parseInfo, TextLocation location, ICompilation compilation, CancellationToken cancellationToken)

14
src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs

@ -48,11 +48,7 @@ namespace ICSharpCode.ILSpyAddIn
this.jumpToEntityIdStringWhenDecompilationFinished = entityTag; this.jumpToEntityIdStringWhenDecompilationFinished = entityTag;
this.TitleName = "[" + ReflectionHelper.SplitTypeParameterCountFromReflectionName(typeName.Type.Name) + "]"; this.TitleName = "[" + ReflectionHelper.SplitTypeParameterCountFromReflectionName(typeName.Type.Name) + "]";
DecompilationThread(); InitializeView();
// Thread thread = new Thread(DecompilationThread);
// thread.Name = "Decompiler (" + shortTypeName + ")";
// thread.Start();
// thread.Join();
SD.BookmarkManager.BookmarkRemoved += BookmarkManager_Removed; SD.BookmarkManager.BookmarkRemoved += BookmarkManager_Removed;
SD.BookmarkManager.BookmarkAdded += BookmarkManager_Added; SD.BookmarkManager.BookmarkAdded += BookmarkManager_Added;
@ -173,10 +169,12 @@ namespace ICSharpCode.ILSpyAddIn
#endregion #endregion
#region Decompilation #region Decompilation
void DecompilationThread() async void InitializeView()
{ {
try { try {
var file = ILSpyDecompilerService.DecompileType(DecompiledTypeName); var parseInformation = await SD.ParserService.ParseAsync(DecompiledTypeName.ToFileName(), cancellationToken: cancellation.Token);
if (parseInformation == null || !(parseInformation.UnresolvedFile is ILSpyUnresolvedFile)) return;
var file = (ILSpyUnresolvedFile)parseInformation.UnresolvedFile;
memberLocations = file.MemberLocations; memberLocations = file.MemberLocations;
DebugSymbols = file.DebugSymbols; DebugSymbols = file.DebugSymbols;
OnDecompilationFinished(file.Output); OnDecompilationFinished(file.Output);
@ -193,7 +191,7 @@ namespace ICSharpCode.ILSpyAddIn
writer.WriteLine(string.Format("Exception while decompiling {0} ({1})", DecompiledTypeName.Type, DecompiledTypeName.AssemblyFile)); writer.WriteLine(string.Format("Exception while decompiling {0} ({1})", DecompiledTypeName.Type, DecompiledTypeName.AssemblyFile));
writer.WriteLine(); writer.WriteLine();
writer.WriteLine(ex.ToString()); writer.WriteLine(ex.ToString());
SD.MainThread.InvokeAsyncAndForget(() => OnDecompilationFinished(writer.ToString())); OnDecompilationFinished(writer.ToString());
} }
} }

Loading…
Cancel
Save