Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv6744/src/rfta Modified Files: CodeModel.cpp CodeModelElement.cpp CodeModelExpressions.cpp CodeRewriter.cpp CodeRewriter.h CodeWriterTest.cpp Log Message: * added rewriting for a replaced expression Index: CodeModel.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModel.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CodeModel.cpp 23 Dec 2002 22:31:02 -0000 1.2 --- CodeModel.cpp 25 Dec 2002 12:13:56 -0000 1.3 *************** *** 305,309 **** Generator::generateGenericExpression( const ASTNodePtr &expressionNode ) { ! ExpressionPtr expression( new GenericExpression() ); expression->setSourceRange( expressionNode->getRange() ); return expression; --- 305,310 ---- Generator::generateGenericExpression( const ASTNodePtr &expressionNode ) { ! std::string value = expressionNode->getOriginalText(); ! ExpressionPtr expression( new GenericExpression( value ) ); expression->setSourceRange( expressionNode->getRange() ); return expression; Index: CodeModelElement.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelElement.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CodeModelElement.cpp 23 Dec 2002 22:31:02 -0000 1.2 --- CodeModelElement.cpp 25 Dec 2002 12:13:56 -0000 1.3 *************** *** 13,16 **** --- 13,17 ---- Element::Element() + : wasReplaced_( false ) { unsetSourceRange(); *************** *** 27,30 **** --- 28,32 ---- { sourceRange_ = sourceRange; + wasReplaced_ = false; } *************** *** 48,51 **** --- 50,67 ---- { return sourceRange_.getStartIndex() != -1; + } + + + bool + Element::wasReplaced() const + { + return wasReplaced_; + } + + + void + Element::replace() + { + wasReplaced_ = true; } Index: CodeModelExpressions.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelExpressions.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CodeModelExpressions.cpp 22 Dec 2002 11:44:01 -0000 1.2 --- CodeModelExpressions.cpp 25 Dec 2002 12:13:56 -0000 1.3 *************** *** 16,19 **** --- 16,39 ---- + GenericExpression::GenericExpression( const std::string &value ) + : value_( value ) + { + } + + + const std::string + GenericExpression::getValue() const + { + return value_; + } + + + void + GenericExpression::setValue( const std::string &value ) + { + replace(); + value_ = value; + } + void Index: CodeRewriter.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CodeRewriter.cpp 22 Dec 2002 15:47:01 -0000 1.1 --- CodeRewriter.cpp 25 Dec 2002 12:13:56 -0000 1.2 *************** *** 6,9 **** --- 6,13 ---- #include "stdafx.h" #include "CodeRewriter.h" + #include "ReplaceTextTransform.h" + #include <rfta/refactoring/TextDocument.h> + #include <rfta/refactoring/CodeModelExpressions.h> + #include <rfta/refactoring/CodeModelStatements.h> *************** *** 23,30 **** void ! CodeRewriter::rewrite( Element &element, TextDocument &document ) { ! // element.rewrite( *this ); } --- 27,209 ---- void ! CodeRewriter::rewrite( Statement &statement, TextDocument &document ) { ! statement.accept( *this ); ! ! transforms_.apply( document ); ! } ! ! ! void ! CodeRewriter::visit( BreakStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( CaseStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( CompoundStatement &statement ) ! { ! for ( int index =0; index < statement.getStatementCount(); ++index ) ! statement.getStatementAt( index )->accept( *this ); ! } ! ! ! void ! CodeRewriter::visit( ConditionStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( ContinueStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( DefaultStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( DeclarationStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( DoStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( ExpressionStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( FlowControlStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( ForStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( GotoStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( IfStatement &statement ) ! { ! statement.getCondition()->accept( *this ); ! statement.getThenStatement()->accept( *this ); ! if ( statement.hasElseStatement() ) ! statement.getElseStatement()->accept( *this ); ! } ! ! ! void ! CodeRewriter::visit( IterationStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( LabelStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( NullStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( ReturnStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( SwitchLabelStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( SwitchStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( WhileStatement &statement ) ! { ! } ! ! ! void ! CodeRewriter::visit( AssignInitializerExpression &expression ) ! { ! } ! ! ! void ! CodeRewriter::visit( ConstructorInitializerExpression &expression ) ! { ! } ! ! ! void ! CodeRewriter::visit( DeclaratorExpression &expression ) ! { ! } ! ! ! void ! CodeRewriter::visit( DefaultConditionExpression &expression ) ! { ! } ! ! ! void ! CodeRewriter::visit( Expression &expression ) ! { ! } ! ! ! void ! CodeRewriter::visit( GenericExpression &expression ) ! { ! if ( expression.wasReplaced() ) ! { ! transforms_.add( *new ReplaceTextTransform( expression.getSourceRange(), ! expression.getValue() ) ); ! } ! } ! ! ! void ! CodeRewriter::visit( NullExpression &expression ) ! { } Index: CodeRewriter.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CodeRewriter.h 22 Dec 2002 15:47:01 -0000 1.1 --- CodeRewriter.h 25 Dec 2002 12:13:56 -0000 1.2 *************** *** 6,10 **** #define RFTA_CODEREWRITER_H ! #include <rfta/refactoring/CodeModelElement.h> namespace Refactoring { --- 6,11 ---- #define RFTA_CODEREWRITER_H ! #include <rfta/refactoring/CodeModelVisitor.h> ! #include "TransformList.h" namespace Refactoring { *************** *** 16,20 **** /// Rewrite source to match change made to the model. ! class CodeRewriter { public: --- 17,22 ---- /// Rewrite source to match change made to the model. ! class CodeRewriter : private StatementVisitor ! , private ExpressionVisitor { public: *************** *** 24,31 **** virtual ~CodeRewriter(); ! void rewrite( Element &element, TextDocument &document ); private: const std::string originalSource_; }; --- 26,66 ---- virtual ~CodeRewriter(); ! void rewrite( Statement &statement, TextDocument &document ); private: + // overridden from StatementVisitor + void visit( BreakStatement &statement ); + void visit( CaseStatement &statement ); + void visit( CompoundStatement &statement ); + void visit( ConditionStatement &statement ); + void visit( ContinueStatement &statement ); + void visit( DefaultStatement &statement ); + void visit( DeclarationStatement &statement ); + void visit( DoStatement &statement ); + void visit( ExpressionStatement &statement ); + void visit( FlowControlStatement &statement ); + void visit( ForStatement &statement ); + void visit( GotoStatement &statement ); + void visit( IfStatement &statement ); + void visit( IterationStatement &statement ); + void visit( LabelStatement &statement ); + void visit( NullStatement &statement ); + void visit( ReturnStatement &statement ); + void visit( SwitchLabelStatement &statement ); + void visit( SwitchStatement &statement ); + void visit( WhileStatement &statement ); + + // overridden from ExpressionVisitor + void visit( AssignInitializerExpression &expression ); + void visit( ConstructorInitializerExpression &expression ); + void visit( DeclaratorExpression &expression ); + void visit( DefaultConditionExpression &expression ); + void visit( Expression &expression ); + void visit( GenericExpression &expression ); + void visit( NullExpression &expression ); + + private: + TransformList transforms_; const std::string originalSource_; }; Index: CodeWriterTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CodeWriterTest.cpp 22 Dec 2002 15:47:01 -0000 1.1 --- CodeWriterTest.cpp 25 Dec 2002 12:13:56 -0000 1.2 *************** *** 61,65 **** { source_ = "{" ! " doStuff();" "}"; --- 61,66 ---- { source_ = "{" ! " if (true)" ! " return;" "}"; *************** *** 68,73 **** RFTA_ASSERT_EQUAL( 1, compound_->getStatementCount() ); ! CodeModel::StatementPtr statement( new CodeModel::NullStatement() ); ! compound_->setStatementAt( 0, statement ); CodeModel::CodeRewriter writer( source_ ); --- 69,78 ---- RFTA_ASSERT_EQUAL( 1, compound_->getStatementCount() ); ! CodeModel::IfStatement &ifStatement = ! static_cast<CodeModel::IfStatement &>( *compound_->getStatementAt(0) ); ! CodeModel::GenericExpression &condition = ! static_cast<CodeModel::GenericExpression &>( ! *ifStatement.getCondition() ); ! condition.setValue( "false" ); CodeModel::CodeRewriter writer( source_ ); *************** *** 75,81 **** std::string expectedSource = "{" ! " ;" "}"; ! // RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); } --- 80,87 ---- std::string expectedSource = "{" ! " if (false)" ! " return;" "}"; ! RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); } |