|
|
|
@ -144,7 +144,10 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
@@ -144,7 +144,10 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
|
|
|
|
|
Name = Pattern.AnyString, |
|
|
|
|
PrivateImplementationType = new AnyNodeOrNull(), |
|
|
|
|
ReturnType = new AnyNode(), |
|
|
|
|
Getter = new Accessor() { Body = new BlockStatement() { new ReturnStatement(new AnyNode("expression")) } } |
|
|
|
|
Getter = new Accessor() { |
|
|
|
|
Modifiers = Modifiers.Any, |
|
|
|
|
Body = new BlockStatement() { new ReturnStatement(new AnyNode("expression")) } |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static readonly IndexerDeclaration CalculatedGetterOnlyIndexerPattern = new IndexerDeclaration() { |
|
|
|
@ -153,14 +156,25 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
@@ -153,14 +156,25 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
|
|
|
|
|
PrivateImplementationType = new AnyNodeOrNull(), |
|
|
|
|
Parameters = { new Repeat(new AnyNode()) }, |
|
|
|
|
ReturnType = new AnyNode(), |
|
|
|
|
Getter = new Accessor() { Body = new BlockStatement() { new ReturnStatement(new AnyNode("expression")) } } |
|
|
|
|
Getter = new Accessor() { |
|
|
|
|
Modifiers = Modifiers.Any, |
|
|
|
|
Body = new BlockStatement() { new ReturnStatement(new AnyNode("expression")) } |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Modifiers that are emitted on accessors, but can be moved to the property declaration.
|
|
|
|
|
/// </summary>
|
|
|
|
|
const Modifiers movableModifiers = Modifiers.Readonly; |
|
|
|
|
|
|
|
|
|
void SimplifyPropertyDeclaration(PropertyDeclaration propertyDeclaration) |
|
|
|
|
{ |
|
|
|
|
var m = CalculatedGetterOnlyPropertyPattern.Match(propertyDeclaration); |
|
|
|
|
if (!m.Success) |
|
|
|
|
return; |
|
|
|
|
if ((propertyDeclaration.Getter.Modifiers & ~movableModifiers) != 0) |
|
|
|
|
return; |
|
|
|
|
propertyDeclaration.Modifiers |= propertyDeclaration.Getter.Modifiers; |
|
|
|
|
propertyDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach(); |
|
|
|
|
propertyDeclaration.Getter.Remove(); |
|
|
|
|
} |
|
|
|
@ -170,6 +184,9 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
@@ -170,6 +184,9 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
|
|
|
|
|
var m = CalculatedGetterOnlyIndexerPattern.Match(indexerDeclaration); |
|
|
|
|
if (!m.Success) |
|
|
|
|
return; |
|
|
|
|
if ((indexerDeclaration.Getter.Modifiers & ~movableModifiers) != 0) |
|
|
|
|
return; |
|
|
|
|
indexerDeclaration.Modifiers |= indexerDeclaration.Getter.Modifiers; |
|
|
|
|
indexerDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach(); |
|
|
|
|
indexerDeclaration.Getter.Remove(); |
|
|
|
|
} |
|
|
|
|