Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv13500/src/rfta
Modified Files:
CodeRewriter.cpp CodeWriterTest.cpp CodeWriterTest.h
IndentLevelManager.cpp IndentLevelManager.h
Log Message:
* added support for replacing do/while condition and iterated statement
Index: CodeRewriter.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** CodeRewriter.cpp 16 Mar 2003 20:32:42 -0000 1.27
--- CodeRewriter.cpp 16 Mar 2003 20:57:21 -0000 1.28
***************
*** 349,360 ****
CodeRewriter::visit( DoStatement &statement )
{
! beginInsertNewStatement();
! insertText( "do" );
! statement.getIteratedStatement()->accept( *this );
! beginInsertNewStatement();
! insertText( "while ( " );
! statement.getCondition()->accept( *this );
! insertText( " )" );
! endInsertNewStatement();
}
--- 349,385 ----
CodeRewriter::visit( DoStatement &statement )
{
! IndentLevelManager::IndentRestorer restorer( indentManager_ );
! StatementPtr iteratedStatement = statement.getIteratedStatement();
! if ( isInserting() )
! {
! beginInsertNewStatement();
! insertText( "do" );
! indentManager_.enterNewDoStatement( iteratedStatement );
! }
! else
! indentManager_.enterExistingDoStatement( iteratedStatement,
! statement.getSourceRange().getStartIndex() );
!
! handleMandatoryChange( statement.getIteratedStatementChange(),
! *iteratedStatement,
! statementDelete );
!
! restorer.restoreIndentLevel();
!
! if ( isInserting() )
! {
! beginInsertNewStatement();
! insertText( "while (" );
! }
!
! handleMandatoryChange( statement.getConditionChange(),
! *statement.getCondition(),
! bracedExpressionDelete );
!
! if ( isInserting() )
! {
! insertText( ")" );
! endInsertNewStatement();
! }
}
***************
*** 554,558 ****
handleMandatoryChange( statement.getIteratedStatementChange(),
! *statement.getIteratedStatement(),
statementDelete );
}
--- 579,583 ----
handleMandatoryChange( statement.getIteratedStatementChange(),
! *iteratedStatement,
statementDelete );
}
Index: CodeWriterTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** CodeWriterTest.cpp 16 Mar 2003 20:32:43 -0000 1.28
--- CodeWriterTest.cpp 16 Mar 2003 20:57:22 -0000 1.29
***************
*** 325,329 ****
void
! CodeWriterTest::testModifyWhileIterationStatement()
{
source_ = "{\n"
--- 325,329 ----
void
! CodeWriterTest::testModifyWhileIteratedStatement()
{
source_ = "{\n"
***************
*** 339,342 ****
--- 339,384 ----
" while ( true )\n"
" break;\n"
+ "}" );
+ }
+
+
+ void
+ CodeWriterTest::testModifyDoCondition()
+ {
+ source_ = "{\n"
+ " do\n"
+ " ;\n"
+ " while ( true );\n"
+ "}";
+ generateCompound();
+
+ CodeModel::DoStatement &doStatement =
+ dynamic_cast<CodeModel::DoStatement &>( *compound_->getStatementAt(0) );
+ doStatement.setCondition( makeExpression( "false" ) );
+ generateAndCheckSource( "{\n"
+ " do\n"
+ " ;\n"
+ " while ( false );\n"
+ "}" );
+ }
+
+
+ void
+ CodeWriterTest::testModifyDoIteratedStatement()
+ {
+ source_ = "{\n"
+ " do\n"
+ " ;\n"
+ " while ( true );\n"
+ "}";
+ generateCompound();
+
+ CodeModel::DoStatement &doStatement =
+ dynamic_cast<CodeModel::DoStatement &>( *compound_->getStatementAt(0) );
+ doStatement.setIteratedStatement( makeBreakStatement() );
+ generateAndCheckSource( "{\n"
+ " do\n"
+ " break;\n"
+ " while ( true );\n"
"}" );
}
Index: CodeWriterTest.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** CodeWriterTest.h 16 Mar 2003 20:32:43 -0000 1.23
--- CodeWriterTest.h 16 Mar 2003 20:57:22 -0000 1.24
***************
*** 30,34 ****
CPPUNIT_TEST( testAddReturnValue );
CPPUNIT_TEST( testModifyWhileCondition );
! CPPUNIT_TEST( testModifyWhileIterationStatement );
CPPUNIT_TEST_SUITE_END();
--- 30,36 ----
CPPUNIT_TEST( testAddReturnValue );
CPPUNIT_TEST( testModifyWhileCondition );
! CPPUNIT_TEST( testModifyWhileIteratedStatement );
! CPPUNIT_TEST( testModifyDoCondition );
! CPPUNIT_TEST( testModifyDoIteratedStatement );
CPPUNIT_TEST_SUITE_END();
***************
*** 60,64 ****
void testModifyWhileCondition();
! void testModifyWhileIterationStatement();
private:
--- 62,69 ----
void testModifyWhileCondition();
! void testModifyWhileIteratedStatement();
!
! void testModifyDoCondition();
! void testModifyDoIteratedStatement();
private:
Index: IndentLevelManager.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** IndentLevelManager.cpp 16 Mar 2003 20:32:43 -0000 1.7
--- IndentLevelManager.cpp 16 Mar 2003 20:57:23 -0000 1.8
***************
*** 78,81 ****
--- 78,98 ----
+ void
+ IndentLevelManager::enterExistingDoStatement( const CodeModel::StatementPtr &subStatement,
+ int startingPos )
+ {
+ if ( !isCompoundStatement( subStatement ) )
+ pushIndent( findIndentLevelOf( startingPos ) + indentWidth_ );
+ }
+
+
+ void
+ IndentLevelManager::enterNewDoStatement( const CodeModel::StatementPtr &subStatement )
+ {
+ if ( !isCompoundStatement( subStatement ) )
+ pushIndent( getIndentLevel() + indentWidth_ );
+ }
+
+
bool
IndentLevelManager::isCompoundStatement( const CodeModel::StatementPtr &subStatement ) const
Index: IndentLevelManager.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** IndentLevelManager.h 16 Mar 2003 20:32:43 -0000 1.8
--- IndentLevelManager.h 16 Mar 2003 20:57:24 -0000 1.9
***************
*** 71,74 ****
--- 71,79 ----
void enterNewWhileStatement( const CodeModel::StatementPtr &subStatement );
+ void enterExistingDoStatement( const CodeModel::StatementPtr &subStatement,
+ int startingPos );
+
+ void enterNewDoStatement( const CodeModel::StatementPtr &subStatement );
+
int getIndentLevel() const;
|