From: <bl...@us...> - 2003-03-15 20:57:42
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv26926/src/rfta Modified Files: CodeRewriter.cpp CodeWriterTest.cpp CodeWriterTest.h IndentLevelManager.cpp IndentLevelManager.h Log Message: * added support for inserting null, while and compound statements. Index: CodeRewriter.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** CodeRewriter.cpp 8 Mar 2003 13:11:42 -0000 1.7 --- CodeRewriter.cpp 15 Mar 2003 20:57:38 -0000 1.8 *************** *** 110,119 **** { IndentLevelManager::IndentRestorer restorer( indentManager_ ); - ModeModifier mode( mode_, updating ); ! if ( statement.getText().hasOriginalSourceRange() ) { nextStatementInsertionPos_ = statement.getText().getOriginalSourceRange().getStartIndex() + 1; ! indentManager_.enterExistingStatement( nextStatementInsertionPos_ - 1 ); } --- 110,123 ---- { IndentLevelManager::IndentRestorer restorer( indentManager_ ); ! if ( isInserting() ) ! { ! insertText( "\n" + indentManager_.getIndentSpacer() + "{" ); ! indentManager_.enterNewCompoundStatement(); ! } ! else if ( statement.getText().hasOriginalSourceRange() ) { nextStatementInsertionPos_ = statement.getText().getOriginalSourceRange().getStartIndex() + 1; ! indentManager_.enterExistingCompoundStatement( nextStatementInsertionPos_ - 1 ); } *************** *** 137,140 **** --- 141,150 ---- change.statement_->accept( *this ); } + + if ( isInserting() ) + { + restorer.restoreIndentLevel(); + insertText( "\n" + indentManager_.getIndentSpacer() + "}" ); + } } *************** *** 219,222 **** --- 229,234 ---- CodeRewriter::visit( NullStatement &statement ) { + if ( isInserting() ) + insertText( "\n" + indentManager_.getIndentSpacer() + ";" ); } *************** *** 270,273 **** --- 282,289 ---- CodeRewriter::visit( WhileStatement &statement ) { + insertText( "\n" + indentManager_.getIndentSpacer() + "while ( " ); + statement.getCondition()->accept( *this ); + insertText( " )" ); + statement.getIteratedStatement()->accept( *this ); } Index: CodeWriterTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** CodeWriterTest.cpp 15 Mar 2003 16:57:39 -0000 1.9 --- CodeWriterTest.cpp 15 Mar 2003 20:57:38 -0000 1.10 *************** *** 198,202 **** std::string expectedSource = "{\n" " \n" ! " return 3;\n" // todo: there should be only one space between return and 3. "}"; RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); --- 198,253 ---- std::string expectedSource = "{\n" " \n" ! " return 3;\n" ! "}"; ! RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); ! } ! ! ! void ! CodeWriterTest::testInsertNullStatement() ! { ! source_ = "{\n" ! "}"; ! ! generateCompound(); ! ! RFTA_ASSERT_EQUAL( 0, compound_->getStatementCount() ); ! ! CodeModel::StatementPtr nullStatement( new CodeModel::NullStatement() ); ! compound_->appendStatement( nullStatement ); ! ! rewriteSource(); ! ! std::string expectedSource = "{\n" ! " ;\n" ! "}"; ! RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); ! } ! ! ! void ! CodeWriterTest::testInsertWhileStatement() ! { ! source_ = "{\n" ! "}"; ! ! generateCompound(); ! ! RFTA_ASSERT_EQUAL( 0, compound_->getStatementCount() ); ! ! CodeModel::StatementPtr nullStatement( new CodeModel::NullStatement() ); ! CodeModel::CompoundStatementPtr compoundStatement( new CodeModel::CompoundStatement() ); ! compoundStatement->appendStatement( nullStatement ); ! CodeModel::WhileStatementPtr whileStatement( ! new CodeModel::WhileStatement( makeTrueExpression(), compoundStatement ) ); ! compound_->appendStatement( whileStatement ); ! ! rewriteSource(); ! ! std::string expectedSource = "{\n" ! " while ( true )\n" ! " {\n" ! " ;\n" ! " }\n" "}"; RFTA_ASSERT_EQUAL( expectedSource, document_->getAllText() ); Index: CodeWriterTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CodeWriterTest.h 8 Mar 2003 13:11:42 -0000 1.6 --- CodeWriterTest.h 15 Mar 2003 20:57:38 -0000 1.7 *************** *** 26,29 **** --- 26,31 ---- CPPUNIT_TEST( testRemoveStatement ); CPPUNIT_TEST( testMoveSubExpression ); + CPPUNIT_TEST( testInsertNullStatement ); + CPPUNIT_TEST( testInsertWhileStatement ); CPPUNIT_TEST_SUITE_END(); *************** *** 44,47 **** --- 46,51 ---- void testRemoveStatement(); void testMoveSubExpression(); + void testInsertNullStatement(); + void testInsertWhileStatement(); private: Index: IndentLevelManager.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** IndentLevelManager.cpp 7 Mar 2003 07:58:31 -0000 1.2 --- IndentLevelManager.cpp 15 Mar 2003 20:57:38 -0000 1.3 *************** *** 26,32 **** void ! IndentLevelManager::enterExistingStatement( int startingPos ) { pushIndent( findIndentLevelOf( startingPos ) + indentWidth_ ); } --- 26,39 ---- void ! IndentLevelManager::enterExistingCompoundStatement( int startingPos ) { pushIndent( findIndentLevelOf( startingPos ) + indentWidth_ ); + } + + + void + IndentLevelManager::enterNewCompoundStatement() + { + pushIndent( getIndentLevel() + indentWidth_ ); } Index: IndentLevelManager.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** IndentLevelManager.h 7 Mar 2003 09:41:11 -0000 1.3 --- IndentLevelManager.h 15 Mar 2003 20:57:38 -0000 1.4 *************** *** 23,26 **** --- 23,27 ---- : manager_( manager ) , count_( manager.indents_.size() ) + , shouldRestore_( true ) { } *************** *** 28,36 **** --- 29,47 ---- ~IndentRestorer() { + restoreIndentLevel(); + } + + void restoreIndentLevel() + { + if ( !shouldRestore_ ) + return; + manager_.indents_.resize( count_ ); + shouldRestore_ = false; } IndentLevelManager &manager_; int count_; + bool shouldRestore_; }; *************** *** 45,49 **** virtual ~IndentLevelManager(); ! void enterExistingStatement( int startingPos ); int getIndentLevel() const; --- 56,62 ---- virtual ~IndentLevelManager(); ! void enterExistingCompoundStatement( int startingPos ); ! ! void enterNewCompoundStatement(); int getIndentLevel() const; |