diff --git a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs b/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs index 84469b6267..1d85b2f454 100644 --- a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs +++ b/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs @@ -28,11 +28,11 @@ namespace ICSharpCode.NRefactory.CSharp { } public class QueryExpressionExpander { - class Visitor : IAstVisitor { + class Visitor : DepthFirstAstVisitor { int currentTransparentParameter; const string TransparentParameterNameTemplate = "<>x{0}"; - AstNode Default(AstNode node) { + protected override AstNode VisitChildren(AstNode node) { List newChildren = null; int i = 0; @@ -161,7 +161,7 @@ namespace ICSharpCode.NRefactory.CSharp { currentTransparentType.Add(Tuple.Create(identifier, new List())); } - AstNode IAstVisitor.VisitQueryExpression(QueryExpression queryExpression) { + public override AstNode VisitQueryExpression(QueryExpression queryExpression) { var oldTransparentType = currentTransparentType; var oldResult = currentResult; var oldEatSelect = eatSelect; @@ -185,13 +185,13 @@ namespace ICSharpCode.NRefactory.CSharp { } } - AstNode IAstVisitor.VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause) { + public override AstNode VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause) { var prev = VisitNested(queryContinuationClause.PrecedingQuery, null); AddFirstMemberToCurrentTransparentType(queryContinuationClause.IdentifierToken); return prev; } - AstNode IAstVisitor.VisitQueryFromClause(QueryFromClause queryFromClause) { + public override AstNode VisitQueryFromClause(QueryFromClause queryFromClause) { if (currentResult == null) { AddFirstMemberToCurrentTransparentType(queryFromClause.IdentifierToken); if (queryFromClause.Type.IsNull) { @@ -226,7 +226,7 @@ namespace ICSharpCode.NRefactory.CSharp { } } - AstNode IAstVisitor.VisitQueryLetClause(QueryLetClause queryLetClause) { + public override AstNode VisitQueryLetClause(QueryLetClause queryLetClause) { var param = CreateParameterForCurrentRangeVariable(); var body = AddMemberToCurrentTransparentType(param, queryLetClause.IdentifierToken, queryLetClause.Expression, true); var lambda = CreateLambda(new[] { param }, body); @@ -234,12 +234,12 @@ namespace ICSharpCode.NRefactory.CSharp { return currentResult.Invoke("Select", lambda); } - AstNode IAstVisitor.VisitQueryWhereClause(QueryWhereClause queryWhereClause) { + public override AstNode VisitQueryWhereClause(QueryWhereClause queryWhereClause) { var param = CreateParameterForCurrentRangeVariable(); return currentResult.Invoke("Where", CreateLambda(new[] { param }, VisitNested(queryWhereClause.Condition, param))); } - AstNode IAstVisitor.VisitQueryJoinClause(QueryJoinClause queryJoinClause) { + public override AstNode VisitQueryJoinClause(QueryJoinClause queryJoinClause) { Expression resultSelectorBody = null; var inExpression = VisitNested(queryJoinClause.InExpression, null); var key1SelectorFirstParam = CreateParameterForCurrentRangeVariable(); @@ -277,7 +277,7 @@ namespace ICSharpCode.NRefactory.CSharp { } } - AstNode IAstVisitor.VisitQueryOrderClause(QueryOrderClause queryOrderClause) { + public override AstNode VisitQueryOrderClause(QueryOrderClause queryOrderClause) { var current = currentResult; bool first = true; foreach (var o in queryOrderClause.Orderings) { @@ -292,11 +292,7 @@ namespace ICSharpCode.NRefactory.CSharp { return current; } - AstNode IAstVisitor.VisitQueryOrdering(QueryOrdering queryOrdering) { - return null; - } - - AstNode IAstVisitor.VisitQuerySelectClause(QuerySelectClause querySelectClause) { + public override AstNode VisitQuerySelectClause(QuerySelectClause querySelectClause) { if (eatSelect) { eatSelect = false; return currentResult; @@ -311,7 +307,7 @@ namespace ICSharpCode.NRefactory.CSharp { return currentResult.Invoke("Select", lambda); } - AstNode IAstVisitor.VisitQueryGroupClause(QueryGroupClause queryGroupClause) { + public override AstNode VisitQueryGroupClause(QueryGroupClause queryGroupClause) { var param = CreateParameterForCurrentRangeVariable(); var keyLambda = CreateLambda(new[] { param }, VisitNested(queryGroupClause.Key, param)); @@ -326,433 +322,11 @@ namespace ICSharpCode.NRefactory.CSharp { } } - AstNode IAstVisitor.VisitIdentifierExpression(IdentifierExpression identifierExpression) { + public override AstNode VisitIdentifierExpression(IdentifierExpression identifierExpression) { Expression subst; activeRangeVariableSubstitutions.TryGetValue(identifierExpression.Identifier, out subst); return subst != null ? subst.Clone() : null; } - -#region Uninteresting methods - AstNode IAstVisitor.VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression) { - return Default(anonymousMethodExpression); - } - - AstNode IAstVisitor.VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression) { - return Default(undocumentedExpression); - } - - AstNode IAstVisitor.VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression) { - return Default(arrayCreateExpression); - } - - AstNode IAstVisitor.VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression) { - return Default(arrayInitializerExpression); - } - - AstNode IAstVisitor.VisitAsExpression(AsExpression asExpression) { - return Default(asExpression); - } - - AstNode IAstVisitor.VisitAssignmentExpression(AssignmentExpression assignmentExpression) { - return Default(assignmentExpression); - } - - AstNode IAstVisitor.VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression) { - return Default(baseReferenceExpression); - } - - AstNode IAstVisitor.VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression) { - return Default(binaryOperatorExpression); - } - - AstNode IAstVisitor.VisitCastExpression(CastExpression castExpression) { - return Default(castExpression); - } - - AstNode IAstVisitor.VisitCheckedExpression(CheckedExpression checkedExpression) { - return Default(checkedExpression); - } - - AstNode IAstVisitor.VisitConditionalExpression(ConditionalExpression conditionalExpression) { - return Default(conditionalExpression); - } - - AstNode IAstVisitor.VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression) { - return Default(defaultValueExpression); - } - - AstNode IAstVisitor.VisitDirectionExpression(DirectionExpression directionExpression) { - return Default(directionExpression); - } - - AstNode IAstVisitor.VisitIndexerExpression(IndexerExpression indexerExpression) { - return Default(indexerExpression); - } - - AstNode IAstVisitor.VisitInvocationExpression(InvocationExpression invocationExpression) { - return Default(invocationExpression); - } - - AstNode IAstVisitor.VisitIsExpression(IsExpression isExpression) { - return Default(isExpression); - } - - AstNode IAstVisitor.VisitLambdaExpression(LambdaExpression lambdaExpression) { - return Default(lambdaExpression); - } - - AstNode IAstVisitor.VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression) { - return Default(memberReferenceExpression); - } - - AstNode IAstVisitor.VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression) { - return Default(namedArgumentExpression); - } - - AstNode IAstVisitor.VisitNamedExpression(NamedExpression namedExpression) { - return Default(namedExpression); - } - - AstNode IAstVisitor.VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression) { - return Default(nullReferenceExpression); - } - - AstNode IAstVisitor.VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression) { - return Default(objectCreateExpression); - } - - AstNode IAstVisitor.VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression) { - return Default(anonymousTypeCreateExpression); - } - - AstNode IAstVisitor.VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression) { - return Default(parenthesizedExpression); - } - - AstNode IAstVisitor.VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression) { - return Default(pointerReferenceExpression); - } - - AstNode IAstVisitor.VisitPrimitiveExpression(PrimitiveExpression primitiveExpression) { - return Default(primitiveExpression); - } - - AstNode IAstVisitor.VisitSizeOfExpression(SizeOfExpression sizeOfExpression) { - return Default(sizeOfExpression); - } - - AstNode IAstVisitor.VisitStackAllocExpression(StackAllocExpression stackAllocExpression) { - return Default(stackAllocExpression); - } - - AstNode IAstVisitor.VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression) { - return Default(thisReferenceExpression); - } - - AstNode IAstVisitor.VisitTypeOfExpression(TypeOfExpression typeOfExpression) { - return Default(typeOfExpression); - } - - AstNode IAstVisitor.VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression) { - return Default(typeReferenceExpression); - } - - AstNode IAstVisitor.VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression) { - return Default(unaryOperatorExpression); - } - - AstNode IAstVisitor.VisitUncheckedExpression(UncheckedExpression uncheckedExpression) { - return Default(uncheckedExpression); - } - - AstNode IAstVisitor.VisitEmptyExpression(EmptyExpression emptyExpression) { - return Default(emptyExpression); - } - - AstNode IAstVisitor.VisitAttribute(Attribute attribute) { - return Default(attribute); - } - - AstNode IAstVisitor.VisitAttributeSection(AttributeSection attributeSection) { - return Default(attributeSection); - } - - AstNode IAstVisitor.VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration) { - return Default(delegateDeclaration); - } - - AstNode IAstVisitor.VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration) { - return Default(namespaceDeclaration); - } - - AstNode IAstVisitor.VisitTypeDeclaration(TypeDeclaration typeDeclaration) { - return Default(typeDeclaration); - } - - AstNode IAstVisitor.VisitUsingAliasDeclaration(UsingAliasDeclaration usingAliasDeclaration) { - return Default(usingAliasDeclaration); - } - - AstNode IAstVisitor.VisitUsingDeclaration(UsingDeclaration usingDeclaration) { - return Default(usingDeclaration); - } - - AstNode IAstVisitor.VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration) { - return Default(externAliasDeclaration); - } - - AstNode IAstVisitor.VisitBlockStatement(BlockStatement blockStatement) { - return Default(blockStatement); - } - - AstNode IAstVisitor.VisitBreakStatement(BreakStatement breakStatement) { - return Default(breakStatement); - } - - AstNode IAstVisitor.VisitCheckedStatement(CheckedStatement checkedStatement) { - return Default(checkedStatement); - } - - AstNode IAstVisitor.VisitContinueStatement(ContinueStatement continueStatement) { - return Default(continueStatement); - } - - AstNode IAstVisitor.VisitDoWhileStatement(DoWhileStatement doWhileStatement) { - return Default(doWhileStatement); - } - - AstNode IAstVisitor.VisitEmptyStatement(EmptyStatement emptyStatement) { - return Default(emptyStatement); - } - - AstNode IAstVisitor.VisitExpressionStatement(ExpressionStatement expressionStatement) { - return Default(expressionStatement); - } - - AstNode IAstVisitor.VisitFixedStatement(FixedStatement fixedStatement) { - return Default(fixedStatement); - } - - AstNode IAstVisitor.VisitForeachStatement(ForeachStatement foreachStatement) { - return Default(foreachStatement); - } - - AstNode IAstVisitor.VisitForStatement(ForStatement forStatement) { - return Default(forStatement); - } - - AstNode IAstVisitor.VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement) { - return Default(gotoCaseStatement); - } - - AstNode IAstVisitor.VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement) { - return Default(gotoDefaultStatement); - } - - AstNode IAstVisitor.VisitGotoStatement(GotoStatement gotoStatement) { - return Default(gotoStatement); - } - - AstNode IAstVisitor.VisitIfElseStatement(IfElseStatement ifElseStatement) { - return Default(ifElseStatement); - } - - AstNode IAstVisitor.VisitLabelStatement(LabelStatement labelStatement) { - return Default(labelStatement); - } - - AstNode IAstVisitor.VisitLockStatement(LockStatement lockStatement) { - return Default(lockStatement); - } - - AstNode IAstVisitor.VisitReturnStatement(ReturnStatement returnStatement) { - return Default(returnStatement); - } - - AstNode IAstVisitor.VisitSwitchStatement(SwitchStatement switchStatement) { - return Default(switchStatement); - } - - AstNode IAstVisitor.VisitSwitchSection(SwitchSection switchSection) { - return Default(switchSection); - } - - AstNode IAstVisitor.VisitCaseLabel(CaseLabel caseLabel) { - return Default(caseLabel); - } - - AstNode IAstVisitor.VisitThrowStatement(ThrowStatement throwStatement) { - return Default(throwStatement); - } - - AstNode IAstVisitor.VisitTryCatchStatement(TryCatchStatement tryCatchStatement) { - return Default(tryCatchStatement); - } - - AstNode IAstVisitor.VisitCatchClause(CatchClause catchClause) { - return Default(catchClause); - } - - AstNode IAstVisitor.VisitUncheckedStatement(UncheckedStatement uncheckedStatement) { - return Default(uncheckedStatement); - } - - AstNode IAstVisitor.VisitUnsafeStatement(UnsafeStatement unsafeStatement) { - return Default(unsafeStatement); - } - - AstNode IAstVisitor.VisitUsingStatement(UsingStatement usingStatement) { - return Default(usingStatement); - } - - AstNode IAstVisitor.VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement) { - return Default(variableDeclarationStatement); - } - - AstNode IAstVisitor.VisitWhileStatement(WhileStatement whileStatement) { - return Default(whileStatement); - } - - AstNode IAstVisitor.VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement) { - return Default(yieldBreakStatement); - } - - AstNode IAstVisitor.VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement) { - return Default(yieldReturnStatement); - } - - AstNode IAstVisitor.VisitAccessor(Accessor accessor) { - return Default(accessor); - } - - AstNode IAstVisitor.VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration) { - return Default(constructorDeclaration); - } - - AstNode IAstVisitor.VisitConstructorInitializer(ConstructorInitializer constructorInitializer) { - return Default(constructorInitializer); - } - - AstNode IAstVisitor.VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration) { - return Default(destructorDeclaration); - } - - AstNode IAstVisitor.VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration) { - return Default(enumMemberDeclaration); - } - - AstNode IAstVisitor.VisitEventDeclaration(EventDeclaration eventDeclaration) { - return Default(eventDeclaration); - } - - AstNode IAstVisitor.VisitCustomEventDeclaration(CustomEventDeclaration customEventDeclaration) { - return Default(customEventDeclaration); - } - - AstNode IAstVisitor.VisitFieldDeclaration(FieldDeclaration fieldDeclaration) { - return Default(fieldDeclaration); - } - - AstNode IAstVisitor.VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration) { - return Default(indexerDeclaration); - } - - AstNode IAstVisitor.VisitMethodDeclaration(MethodDeclaration methodDeclaration) { - return Default(methodDeclaration); - } - - AstNode IAstVisitor.VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration) { - return Default(operatorDeclaration); - } - - AstNode IAstVisitor.VisitParameterDeclaration(ParameterDeclaration parameterDeclaration) { - return Default(parameterDeclaration); - } - - AstNode IAstVisitor.VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration) { - return Default(propertyDeclaration); - } - - AstNode IAstVisitor.VisitVariableInitializer(VariableInitializer variableInitializer) { - return Default(variableInitializer); - } - - AstNode IAstVisitor.VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration) { - return Default(fixedFieldDeclaration); - } - - AstNode IAstVisitor.VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer) { - return Default(fixedVariableInitializer); - } - - AstNode IAstVisitor.VisitCompilationUnit(CompilationUnit compilationUnit) { - return Default(compilationUnit); - } - - AstNode IAstVisitor.VisitSimpleType(SimpleType simpleType) { - return Default(simpleType); - } - - AstNode IAstVisitor.VisitMemberType(MemberType memberType) { - return Default(memberType); - } - - AstNode IAstVisitor.VisitComposedType(ComposedType composedType) { - return Default(composedType); - } - - AstNode IAstVisitor.VisitArraySpecifier(ArraySpecifier arraySpecifier) { - return Default(arraySpecifier); - } - - AstNode IAstVisitor.VisitPrimitiveType(PrimitiveType primitiveType) { - return Default(primitiveType); - } - - AstNode IAstVisitor.VisitComment(Comment comment) { - return Default(comment); - } - - AstNode IAstVisitor.VisitWhitespace(WhitespaceNode whitespaceNode) { - return Default(whitespaceNode); - } - - AstNode IAstVisitor.VisitText(TextNode textNode) { - return Default(textNode); - } - - AstNode IAstVisitor.VisitNewLine(NewLineNode newLineNode) { - return Default(newLineNode); - } - - AstNode IAstVisitor.VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective) { - return Default(preProcessorDirective); - } - - AstNode IAstVisitor.VisitDocumentationReference(DocumentationReference documentationReference) { - return Default(documentationReference); - } - - AstNode IAstVisitor.VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration) { - return Default(typeParameterDeclaration); - } - - AstNode IAstVisitor.VisitConstraint(Constraint constraint) { - return Default(constraint); - } - - AstNode IAstVisitor.VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode) { - return Default(cSharpTokenNode); - } - - AstNode IAstVisitor.VisitIdentifier(Identifier identifier) { - return Default(identifier); - } - - AstNode IAstVisitor.VisitPatternPlaceholder(AstNode placeholder, Pattern pattern) { - return Default(pattern); - } -#endregion } ///