Browse Source

IntroduceQueryExpressions: Do not ignore attributes on lambdas

pull/2642/head
Siegfried Pammer 4 years ago
parent
commit
cbcfcf6c2a
  1. 2
      .github/workflows/build-ilspy.yml
  2. 10
      ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs

2
.github/workflows/build-ilspy.yml

@ -56,7 +56,7 @@ jobs:
env: env:
Tests1: ICSharpCode.Decompiler.Tests\bin\${{ matrix.configuration }}\net6.0-windows\win-x64\ICSharpCode.Decompiler.Tests.dll Tests1: ICSharpCode.Decompiler.Tests\bin\${{ matrix.configuration }}\net6.0-windows\win-x64\ICSharpCode.Decompiler.Tests.dll
Tests2: ILSpy.Tests\bin\${{ matrix.configuration }}\net6.0-windows\ILSpy.Tests.dll Tests2: ILSpy.Tests\bin\${{ matrix.configuration }}\net6.0-windows\ILSpy.Tests.dll
Tests3: ILSpy.BamlDecompiler.Tests\bin\${{ matrix.configuration }}\net6.0-windows\ILSpy.BamlDecompiler.Tests.dll Tests3: ILSpy.BamlDecompiler.Tests\bin\${{ matrix.configuration }}\net6.0-windows\win-x64\ILSpy.BamlDecompiler.Tests.dll
- name: Test Report - name: Test Report
uses: dorny/test-reporter@v1 uses: dorny/test-reporter@v1

10
ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs

@ -266,7 +266,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{ {
ParameterDeclaration p1 = lambda.Parameters.ElementAt(0); ParameterDeclaration p1 = lambda.Parameters.ElementAt(0);
ParameterDeclaration p2 = lambda.Parameters.ElementAt(1); ParameterDeclaration p2 = lambda.Parameters.ElementAt(1);
if (p1.Name == element1.Name && (p2.Name == element2.Name || mre.MemberName == "GroupJoin")) if (ValidateParameter(p1) && ValidateParameter(p2)
&& p1.Name == element1.Name && (p2.Name == element2.Name || mre.MemberName == "GroupJoin"))
{ {
QueryExpression query = new QueryExpression(); QueryExpression query = new QueryExpression();
query.Clauses.Add(MakeFromClause(element1, source1.Detach())); query.Clauses.Add(MakeFromClause(element1, source1.Detach()));
@ -374,7 +375,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (expr is LambdaExpression lambda && lambda.Parameters.Count == 1 && lambda.Body is Expression) if (expr is LambdaExpression lambda && lambda.Parameters.Count == 1 && lambda.Body is Expression)
{ {
ParameterDeclaration p = lambda.Parameters.Single(); ParameterDeclaration p = lambda.Parameters.Single();
if (p.ParameterModifier == ParameterModifier.None) if (ValidateParameter(p))
{ {
parameter = p; parameter = p;
body = (Expression)lambda.Body; body = (Expression)lambda.Body;
@ -385,5 +386,10 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
body = null; body = null;
return false; return false;
} }
private static bool ValidateParameter(ParameterDeclaration p)
{
return p.ParameterModifier == ParameterModifier.None && p.Attributes.Count == 0;
}
} }
} }

Loading…
Cancel
Save