Browse Source

simplify FullyQualifyAmbiguousTypeNamesVisitor

pull/728/head
Siegfried Pammer 10 years ago
parent
commit
5ef12f60c8
  1. 21
      ICSharpCode.Decompiler/CSharp/Transforms/IntroduceUsingDeclarations.cs

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

@ -67,7 +67,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return; return;
// verify that the SimpleTypes refer to the correct type (no ambiguities) // verify that the SimpleTypes refer to the correct type (no ambiguities)
compilationUnit.AcceptVisitor(new FullyQualifyAmbiguousTypeNamesVisitor(context, usingScope), null); compilationUnit.AcceptVisitor(new FullyQualifyAmbiguousTypeNamesVisitor(context, usingScope));
} }
sealed class FindRequiredImports : DepthFirstAstVisitor sealed class FindRequiredImports : DepthFirstAstVisitor
@ -116,7 +116,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
} }
} }
sealed class FullyQualifyAmbiguousTypeNamesVisitor : DepthFirstAstVisitor<object, object> sealed class FullyQualifyAmbiguousTypeNamesVisitor : DepthFirstAstVisitor
{ {
Stack<CSharpTypeResolveContext> context; Stack<CSharpTypeResolveContext> context;
TypeSystemAstBuilder astBuilder; TypeSystemAstBuilder astBuilder;
@ -137,7 +137,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
}; };
} }
public override object VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data) public override void VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration)
{ {
var previousContext = context.Peek(); var previousContext = context.Peek();
var currentUsingScope = new UsingScope(previousContext.CurrentUsingScope.UnresolvedUsingScope, namespaceDeclaration.Identifiers.Last()); var currentUsingScope = new UsingScope(previousContext.CurrentUsingScope.UnresolvedUsingScope, namespaceDeclaration.Identifiers.Last());
@ -145,31 +145,32 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
context.Push(currentContext); context.Push(currentContext);
try { try {
astBuilder = CreateAstBuilder(currentContext); astBuilder = CreateAstBuilder(currentContext);
return base.VisitNamespaceDeclaration(namespaceDeclaration, data); base.VisitNamespaceDeclaration(namespaceDeclaration);
} finally { } finally {
context.Pop(); context.Pop();
} }
} }
public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
{ {
var currentContext = context.Peek().WithCurrentTypeDefinition(typeDeclaration.GetSymbol() as ITypeDefinition); var currentContext = context.Peek().WithCurrentTypeDefinition(typeDeclaration.GetSymbol() as ITypeDefinition);
context.Push(currentContext); context.Push(currentContext);
try { try {
astBuilder = CreateAstBuilder(currentContext); astBuilder = CreateAstBuilder(currentContext);
return base.VisitTypeDeclaration(typeDeclaration, data); base.VisitTypeDeclaration(typeDeclaration);
} finally { } finally {
context.Pop(); context.Pop();
} }
} }
public override object VisitSimpleType(SimpleType simpleType, object data) public override void VisitSimpleType(SimpleType simpleType)
{ {
TypeResolveResult rr; TypeResolveResult rr;
if (simpleType.Ancestors.OfType<UsingDeclaration>().Any() || (rr = simpleType.Annotation<TypeResolveResult>()) == null) if (simpleType.Ancestors.OfType<UsingDeclaration>().Any() || (rr = simpleType.Annotation<TypeResolveResult>()) == null) {
return base.VisitSimpleType(simpleType, data); base.VisitSimpleType(simpleType);
return;
}
simpleType.ReplaceWith(astBuilder.ConvertType(rr.Type)); simpleType.ReplaceWith(astBuilder.ConvertType(rr.Type));
return null;
} }
} }
} }

Loading…
Cancel
Save