Browse Source

Fix #1013, #1034: Option to show code unfolded (expanded) by default

pull/1040/head
Siegfried Pammer 7 years ago
parent
commit
8af973ef35
  1. 12
      ICSharpCode.Decompiler/DecompilerSettings.cs
  2. 6
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
  3. 3
      ICSharpCode.Decompiler/Output/TextTokenWriter.cs
  4. 2
      ILSpy/Languages/CSharpLanguage.cs
  5. 3
      ILSpy/Languages/ILLanguage.cs
  6. 1
      ILSpy/Options/DecompilerSettingsPanel.xaml
  7. 5
      ILSpy/Options/DecompilerSettingsPanel.xaml.cs
  8. 9
      ILSpy/Options/DisplaySettings.cs
  9. 2
      ILSpy/Options/DisplaySettingsPanel.xaml
  10. 6
      ILSpy/Options/DisplaySettingsPanel.xaml.cs

12
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -345,6 +345,18 @@ namespace ICSharpCode.Decompiler @@ -345,6 +345,18 @@ namespace ICSharpCode.Decompiler
}
}
bool expandMemberDefinitions = false;
public bool ExpandMemberDefinitions {
get { return expandMemberDefinitions; }
set {
if (expandMemberDefinitions != value) {
expandMemberDefinitions = value;
OnPropertyChanged();
}
}
}
#region Options to aid VB decompilation
bool introduceIncrementAndDecrement = true;

6
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -45,6 +45,8 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -45,6 +45,8 @@ namespace ICSharpCode.Decompiler.Disassembler
set => methodBodyDisassembler.ShowSequencePoints = value;
}
public bool ExpandMemberDefinitions { get; set; } = false;
public ReflectionDisassembler(ITextOutput output, CancellationToken cancellationToken)
: this(output, new MethodBodyDisassembler(output, cancellationToken), cancellationToken)
{
@ -846,7 +848,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -846,7 +848,7 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(DisassemblerHelpers.Escape(type.DeclaringType != null ? type.Name : type.FullName));
WriteTypeParameters(output, type);
output.MarkFoldStart(defaultCollapsed: isInType);
output.MarkFoldStart(defaultCollapsed: !ExpandMemberDefinitions && isInType);
output.WriteLine();
if (type.BaseType != null) {
@ -1003,7 +1005,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -1003,7 +1005,7 @@ namespace ICSharpCode.Decompiler.Disassembler
void OpenBlock(bool defaultCollapsed)
{
output.MarkFoldStart(defaultCollapsed: defaultCollapsed);
output.MarkFoldStart(defaultCollapsed: !ExpandMemberDefinitions && defaultCollapsed);
output.WriteLine();
output.WriteLine("{");
output.Indent();

3
ICSharpCode.Decompiler/Output/TextTokenWriter.cs

@ -40,6 +40,7 @@ namespace ICSharpCode.Decompiler @@ -40,6 +40,7 @@ namespace ICSharpCode.Decompiler
bool lastUsingDeclaration;
public bool FoldBraces = false;
public bool ExpandMemberDefinitions = false;
public TextTokenWriter(ITextOutput output, DecompilerSettings settings, IDecompilerTypeSystem typeSystem)
{
@ -216,7 +217,7 @@ namespace ICSharpCode.Decompiler @@ -216,7 +217,7 @@ namespace ICSharpCode.Decompiler
if (braceLevelWithinType >= 0 || nodeStack.Peek() is TypeDeclaration)
braceLevelWithinType++;
if (nodeStack.OfType<BlockStatement>().Count() <= 1 || FoldBraces) {
output.MarkFoldStart(defaultCollapsed: braceLevelWithinType == 1);
output.MarkFoldStart(defaultCollapsed: !ExpandMemberDefinitions && braceLevelWithinType == 1);
}
output.Write("{");
break;

2
ILSpy/Languages/CSharpLanguage.cs

@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy @@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy
void WriteCode(ITextOutput output, DecompilerSettings settings, SyntaxTree syntaxTree, IDecompilerTypeSystem typeSystem)
{
syntaxTree.AcceptVisitor(new InsertParenthesesVisitor { InsertParenthesesForReadability = true });
TokenWriter tokenWriter = new TextTokenWriter(output, settings, typeSystem) { FoldBraces = settings.FoldBraces };
TokenWriter tokenWriter = new TextTokenWriter(output, settings, typeSystem) { FoldBraces = settings.FoldBraces, ExpandMemberDefinitions = settings.ExpandMemberDefinitions };
if (output is ISmartTextOutput highlightingOutput) {
tokenWriter = new CSharpHighlightingTokenWriter(tokenWriter, highlightingOutput);
}

3
ILSpy/Languages/ILLanguage.cs

@ -48,7 +48,8 @@ namespace ICSharpCode.ILSpy @@ -48,7 +48,8 @@ namespace ICSharpCode.ILSpy
{
return new ReflectionDisassembler(output, options.CancellationToken) {
DetectControlStructure = detectControlStructure,
ShowSequencePoints = options.DecompilerSettings.ShowDebugInfo
ShowSequencePoints = options.DecompilerSettings.ShowDebugInfo,
ExpandMemberDefinitions = options.DecompilerSettings.ExpandMemberDefinitions
};
}

1
ILSpy/Options/DecompilerSettingsPanel.xaml

@ -18,5 +18,6 @@ @@ -18,5 +18,6 @@
<CheckBox IsChecked="{Binding UsingDeclarations}">Insert using declarations</CheckBox>
<CheckBox IsChecked="{Binding FullyQualifyAmbiguousTypeNames}">Fully qualify ambiguous type names</CheckBox>
<CheckBox IsChecked="{Binding AlwaysUseBraces}">Always use braces</CheckBox>
<CheckBox IsChecked="{Binding ExpandMemberDefinitions}">Expand member definitions after decompilation</CheckBox>
</StackPanel>
</UserControl>

5
ILSpy/Options/DecompilerSettingsPanel.xaml.cs

@ -61,6 +61,8 @@ namespace ICSharpCode.ILSpy.Options @@ -61,6 +61,8 @@ namespace ICSharpCode.ILSpy.Options
s.ShowDebugInfo = (bool?)e.Attribute("showDebugInfo") ?? s.ShowDebugInfo;
s.ShowXmlDocumentation = (bool?)e.Attribute("xmlDoc") ?? s.ShowXmlDocumentation;
s.FoldBraces = (bool?)e.Attribute("foldBraces") ?? s.FoldBraces;
s.ExpandMemberDefinitions = (bool?)e.Attribute("expandMemberDefinitions") ?? s.ExpandMemberDefinitions;
s.RemoveDeadCode = (bool?)e.Attribute("removeDeadCode") ?? s.RemoveDeadCode;
s.UsingDeclarations = (bool?)e.Attribute("usingDeclarations") ?? s.UsingDeclarations;
s.FullyQualifyAmbiguousTypeNames = (bool?)e.Attribute("fullyQualifyAmbiguousTypeNames") ?? s.FullyQualifyAmbiguousTypeNames;
s.AlwaysUseBraces = (bool?)e.Attribute("alwaysUseBraces") ?? s.AlwaysUseBraces;
@ -82,7 +84,8 @@ namespace ICSharpCode.ILSpy.Options @@ -82,7 +84,8 @@ namespace ICSharpCode.ILSpy.Options
section.SetAttributeValue("showDebugInfo", s.ShowDebugInfo);
section.SetAttributeValue("xmlDoc", s.ShowXmlDocumentation);
section.SetAttributeValue("foldBraces", s.FoldBraces);
section.SetAttributeValue("foldBraces", s.RemoveDeadCode);
section.SetAttributeValue("expandMemberDefinitions", s.ExpandMemberDefinitions);
section.SetAttributeValue("removeDeadCode", s.RemoveDeadCode);
section.SetAttributeValue("usingDeclarations", s.UsingDeclarations);
section.SetAttributeValue("fullyQualifyAmbiguousTypeNames", s.FullyQualifyAmbiguousTypeNames);
section.SetAttributeValue("alwaysUseBraces", s.AlwaysUseBraces);

9
ILSpy/Options/DisplaySettings.cs

@ -110,13 +110,10 @@ namespace ICSharpCode.ILSpy.Options @@ -110,13 +110,10 @@ namespace ICSharpCode.ILSpy.Options
bool sortResults = true;
public bool SortResults
{
public bool SortResults {
get { return sortResults; }
set
{
if (sortResults != value)
{
set {
if (sortResults != value) {
sortResults = value;
OnPropertyChanged();
}

2
ILSpy/Options/DisplaySettingsPanel.xaml

@ -61,7 +61,7 @@ @@ -61,7 +61,7 @@
<StackPanel Margin="3">
<CheckBox IsChecked="{Binding ShowLineNumbers}">Show line numbers</CheckBox>
<CheckBox IsChecked="{Binding ShowMetadataTokens}">Show metadata tokens</CheckBox>
<CheckBox IsChecked="{Binding EnableWordWrap}">Enable word wrap</CheckBox>
<CheckBox IsChecked="{Binding EnableWordWrap}">Enable word wrap</CheckBox>
<CheckBox IsChecked="{Binding SortResults}">Sort results by fitness</CheckBox>
</StackPanel>
</GroupBox>

6
ILSpy/Options/DisplaySettingsPanel.xaml.cs

@ -102,8 +102,8 @@ namespace ICSharpCode.ILSpy.Options @@ -102,8 +102,8 @@ namespace ICSharpCode.ILSpy.Options
s.ShowLineNumbers = (bool?)e.Attribute("ShowLineNumbers") ?? false;
s.ShowMetadataTokens = (bool?) e.Attribute("ShowMetadataTokens") ?? false;
s.EnableWordWrap = (bool?)e.Attribute("EnableWordWrap") ?? false;
s.SortResults = (bool?)e.Attribute("SortResults") ?? false;
s.SortResults = (bool?)e.Attribute("SortResults") ?? true;
return s;
}
@ -118,7 +118,7 @@ namespace ICSharpCode.ILSpy.Options @@ -118,7 +118,7 @@ namespace ICSharpCode.ILSpy.Options
section.SetAttributeValue("ShowMetadataTokens", s.ShowMetadataTokens);
section.SetAttributeValue("EnableWordWrap", s.EnableWordWrap);
section.SetAttributeValue("SortResults", s.SortResults);
XElement existingElement = root.Element("DisplaySettings");
if (existingElement != null)
existingElement.ReplaceWith(section);

Loading…
Cancel
Save