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

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

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

Loading…
Cancel
Save