|
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;
|