Browse Source

Fix remaining cases with changes to IntroduceUsingDeclarations.

pull/3614/head
mmusu3 1 month ago committed by Siegfried Pammer
parent
commit
22ceb6e7d1
  1. 39
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/Issue3611.cs
  2. 18
      ICSharpCode.Decompiler/CSharp/Transforms/IntroduceUsingDeclarations.cs

39
ICSharpCode.Decompiler.Tests/TestCases/Pretty/Issue3611.cs

@ -12,19 +12,19 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
public string Value { get; } = value; public string Value { get; } = value;
} }
//private class C5(C5.ValueArray array) private class C5(C5.ValueArray array)
//{ {
// public struct ValueArray public struct ValueArray
// { {
// private bool b; private bool b;
// public bool[] ToArray() public bool[] ToArray()
// { {
// return null; return null;
// } }
// } }
// public bool[] Values = array.ToArray(); public bool[] Values = array.ToArray();
//} }
private class BaseClass private class BaseClass
{ {
@ -33,14 +33,15 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
} }
} }
//private class C6(C6.Data2 data) : BaseClass(data.Value) private class C6(C6.Data2 data) : BaseClass(data.Value)
//{ {
// public struct Data2 { public struct Data2
// public int Value { get; set; } {
// } public int Value { get; set; }
}
// public Data2 Data => data; public Data2 Data => data;
//} }
private struct S3<T>(T v) private struct S3<T>(T v)
{ {

18
ICSharpCode.Decompiler/CSharp/Transforms/IntroduceUsingDeclarations.cs

@ -189,6 +189,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
CSharpResolver resolver; CSharpResolver resolver;
TypeSystemAstBuilder astBuilder; TypeSystemAstBuilder astBuilder;
bool inPrimaryConstructor;
public FullyQualifyAmbiguousTypeNamesVisitor(TransformContext context, UsingScope usingScope) public FullyQualifyAmbiguousTypeNamesVisitor(TransformContext context, UsingScope usingScope)
{ {
this.ignoreUsingScope = !context.Settings.UsingDeclarations; this.ignoreUsingScope = !context.Settings.UsingDeclarations;
@ -265,9 +267,19 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
base.VisitTypeDeclaration(typeDeclaration); base.VisitTypeDeclaration(typeDeclaration);
return; return;
} }
if (typeDeclaration.HasPrimaryConstructor)
{
inPrimaryConstructor = true;
typeDeclaration.PrimaryConstructorParameters.AcceptVisitor(this);
inPrimaryConstructor = false;
}
var previousResolver = resolver; var previousResolver = resolver;
var previousAstBuilder = astBuilder; var previousAstBuilder = astBuilder;
resolver = resolver.WithCurrentTypeDefinition(typeDeclaration.GetSymbol() as ITypeDefinition); resolver = resolver.WithCurrentTypeDefinition(typeDeclaration.GetSymbol() as ITypeDefinition);
try try
{ {
astBuilder = CreateAstBuilder(resolver); astBuilder = CreateAstBuilder(resolver);
@ -280,6 +292,12 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
} }
} }
public override void VisitParameterDeclaration(ParameterDeclaration parameterDeclaration)
{
if (inPrimaryConstructor || parameterDeclaration.Parent is not TypeDeclaration)
base.VisitParameterDeclaration(parameterDeclaration);
}
public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration) public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
{ {
Visit(methodDeclaration, base.VisitMethodDeclaration); Visit(methodDeclaration, base.VisitMethodDeclaration);

Loading…
Cancel
Save