|
From: <bl...@us...> - 2003-03-16 11:50:00
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv26837/src/rfta
Modified Files:
CodeModelStatements.cpp CodeRewriter.cpp CodeWriterTest.cpp
CodeWriterTest.h
Log Message:
* added support for adding else clause to an if statement.
Index: CodeModelStatements.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelStatements.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** CodeModelStatements.cpp 16 Mar 2003 10:23:07 -0000 1.6
--- CodeModelStatements.cpp 16 Mar 2003 11:49:51 -0000 1.7
***************
*** 209,213 ****
--- 209,231 ----
IfStatement::setElseStatement( const StatementPtr &statement )
{
+ if ( hasElseStatement() && elseStatementChange_.type_ == Change::unmodified )
+ {
+ elseStatementChange_.type_ = Change::replaced;
+ elseStatementChange_.oldRange_ = elseStatement_->getText().getOriginalSourceRange();
+ }
+ else
+ elseStatementChange_.type_ = Change::added;
+
+ if ( !statement )
+ elseStatementChange_.type_ = Change::removed;
+
elseStatement_ = statement;
+ }
+
+
+ Change
+ IfStatement::getElseStatementChange() const
+ {
+ return elseStatementChange_;
}
Index: CodeRewriter.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** CodeRewriter.cpp 16 Mar 2003 10:23:07 -0000 1.17
--- CodeRewriter.cpp 16 Mar 2003 11:49:51 -0000 1.18
***************
*** 318,329 ****
statement.getThenStatement()->accept( *this );
}
if ( statement.hasElseStatement() )
{
restorer.restoreIndentLevel();
IndentLevelManager::IndentRestorer restorer2( indentManager_ );
! beginInsertNewStatement();
! insertText( "else" );
! if ( isInserting() )
indentManager_.enterNewElseStatement();
statement.getElseStatement()->accept( *this );
}
--- 318,367 ----
statement.getThenStatement()->accept( *this );
}
+
+ Change elseChange = statement.getElseStatementChange();
+ if ( isUpdating() && !elseChange.isUnmodified() )
+ {
+ if ( elseChange.wasRemoved() )
+ {
+ int startIndex;
+ if ( thenChange.wasReplaced() )
+ startIndex = thenChange.oldRange_.getEndIndex();
+ else
+ startIndex = statement.getThenStatement()->getText().getOriginalSourceRange().getEndIndex();
+ int endIndex = statement.getText().getOriginalSourceRange().getEndIndex();
+ deleteText( SourceRange( startIndex, endIndex - startIndex ) );
+ }
+ else if ( elseChange.wasReplaced() )
+ {
+ currentInsertionPos_ = elseChange.oldRange_.getEndIndex();
+ deleteStatement( elseChange.oldRange_ );
+ }
+ else // added
+ {
+ if ( thenChange.wasReplaced() )
+ currentInsertionPos_ = thenChange.oldRange_.getEndIndex();
+ else
+ currentInsertionPos_ = statement.getThenStatement()->getText().getOriginalSourceRange().getEndIndex();
+ }
+ }
+
if ( statement.hasElseStatement() )
{
restorer.restoreIndentLevel();
IndentLevelManager::IndentRestorer restorer2( indentManager_ );
! if ( isInserting() || ( isUpdating() && elseChange.wasAdded() ) )
! {
! beginInsertNewStatement();
! insertText( "else" );
indentManager_.enterNewElseStatement();
+ }
+
+ Mode elseMode;
+ if ( isInserting() || !elseChange.isUnmodified() )
+ elseMode = inserting;
+ else
+ elseMode = updating;
+
+ ModeModifier mode( mode_, elseMode );
statement.getElseStatement()->accept( *this );
}
Index: CodeWriterTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** CodeWriterTest.cpp 16 Mar 2003 10:23:07 -0000 1.20
--- CodeWriterTest.cpp 16 Mar 2003 11:49:51 -0000 1.21
***************
*** 168,170 ****
--- 168,191 ----
+ void
+ CodeWriterTest::testAddElseToIfThenStatement()
+ {
+ source_ = "{\n"
+ " if ( true )\n"
+ " return;\n"
+ "}";
+ generateCompound();
+
+ CodeModel::IfStatement &ifStatement =
+ dynamic_cast<CodeModel::IfStatement &>( *compound_->getStatementAt(0) );
+ ifStatement.setElseStatement( makeBreakStatement() );
+ generateAndCheckSource( "{\n"
+ " if ( true )\n"
+ " return;\n"
+ " else\n"
+ " break;\n"
+ "}" );
+ }
+
+
} // namespace Refactoring
Index: CodeWriterTest.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** CodeWriterTest.h 16 Mar 2003 10:23:07 -0000 1.17
--- CodeWriterTest.h 16 Mar 2003 11:49:51 -0000 1.18
***************
*** 22,25 ****
--- 22,26 ----
CPPUNIT_TEST( testMoveSubExpression );
CPPUNIT_TEST( testModifyIfThenStatement );
+ CPPUNIT_TEST( testAddElseToIfThenStatement );
CPPUNIT_TEST_SUITE_END();
***************
*** 40,43 ****
--- 41,45 ----
void testMoveSubExpression();
void testModifyIfThenStatement();
+ void testAddElseToIfThenStatement();
private:
|