Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv26062/src/rfta
Modified Files:
CodeModelElement.cpp CodeModelExpressions.cpp
CodeModelStatements.cpp CodeRewriter.cpp CodeRewriter.h
CodeWriterTest.cpp CodeWriterTest.h
Log Message:
* introduced ElementVisitor
* added tests for IfStatement and fixed a bug
* prepared some rewriter refactoring
Index: CodeModelElement.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelElement.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** CodeModelElement.cpp 16 Mar 2003 13:51:08 -0000 1.8
--- CodeModelElement.cpp 16 Mar 2003 16:18:40 -0000 1.9
***************
*** 62,65 ****
--- 62,71 ----
+ void
+ Element::accept( ElementVisitor &visitor )
+ {
+ }
+
+
} // namespace CodeModel
} // namespace Refactoring
Index: CodeModelExpressions.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelExpressions.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** CodeModelExpressions.cpp 16 Mar 2003 13:51:09 -0000 1.8
--- CodeModelExpressions.cpp 16 Mar 2003 16:18:40 -0000 1.9
***************
*** 16,19 ****
--- 16,27 ----
+ void
+ Expression::accept( ElementVisitor &visitor )
+ {
+ accept( static_cast<ExpressionVisitor &>( visitor ) );
+ }
+
+
+
GenericExpression::GenericExpression( const std::string &value )
: value_( value )
Index: CodeModelStatements.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelStatements.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** CodeModelStatements.cpp 16 Mar 2003 15:33:10 -0000 1.11
--- CodeModelStatements.cpp 16 Mar 2003 16:18:40 -0000 1.12
***************
*** 19,22 ****
--- 19,29 ----
+ void
+ Statement::accept( ElementVisitor &visitor )
+ {
+ accept( static_cast<StatementVisitor &>( visitor ) );
+ }
+
+
void
***************
*** 140,143 ****
--- 147,157 ----
{
conditionTracker_.setElement( condition );
+ }
+
+
+ Change
+ ConditionStatement::getConditionChange() const
+ {
+ return conditionTracker_.getChange();
}
Index: CodeRewriter.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** CodeRewriter.cpp 16 Mar 2003 15:43:09 -0000 1.23
--- CodeRewriter.cpp 16 Mar 2003 16:18:41 -0000 1.24
***************
*** 132,135 ****
--- 132,164 ----
void
+ CodeRewriter::setCurrentInsertionPos( int index )
+ {
+ currentInsertionPos_ = index;
+ }
+
+
+ void
+ CodeRewriter::makeRequiredChangeAndVisitElement( const CodeModel::Change &change,
+ CodeModel::Element &element )
+ {
+ // Element may only be unmodified or replaced... (should use a different enum type ?)
+
+ if ( isUpdating() && change.wasReplaced() )
+ {
+ deleteText( change.oldRange_ );
+ setCurrentInsertionPos( change.oldRange_.getEndIndex() );
+ }
+
+ ModeRestorer restorer( mode_ );
+ if ( isUpdating() && change.isUnmodified() )
+ mode_ = updating;
+ else
+ mode_ = inserting;
+
+ element.accept( *this );
+ }
+
+
+ void
CodeRewriter::visit( BreakStatement &statement )
{
***************
*** 289,293 ****
insertText( "if ( " );
}
! statement.getCondition()->accept( *this );
IndentLevelManager::IndentRestorer restorer( indentManager_ );
--- 318,326 ----
insertText( "if ( " );
}
! {
! makeRequiredChangeAndVisitElement( statement.getConditionChange(),
! *statement.getCondition() );
! // statement.getCondition()->accept( *this );
! }
IndentLevelManager::IndentRestorer restorer( indentManager_ );
Index: CodeRewriter.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** CodeRewriter.h 16 Mar 2003 10:23:07 -0000 1.9
--- CodeRewriter.h 16 Mar 2003 16:18:41 -0000 1.10
***************
*** 21,26 ****
/// Rewrite source to match change made to the model.
! class CodeRewriter : private StatementVisitor
! , private ExpressionVisitor
{
public:
--- 21,25 ----
/// Rewrite source to match change made to the model.
! class CodeRewriter : private ElementVisitor
{
public:
***************
*** 73,97 ****
};
! class ModeModifier
{
public:
! ModeModifier( Mode &mode,
! Mode newMode )
! : oldMode_( mode )
! , mode_( mode )
{
- mode_ = newMode;
}
! ~ModeModifier()
{
mode_ = oldMode_;
}
! private:
Mode &mode_;
Mode oldMode_;
};
SourceRange getCurrentInsertionRange() const;
--- 72,107 ----
};
! class ModeRestorer
{
public:
! ModeRestorer( Mode &mode )
! : oldMode_( mode )
! , mode_( mode )
{
}
! ~ModeRestorer()
{
mode_ = oldMode_;
}
! protected:
Mode &mode_;
+
+ private:
Mode oldMode_;
};
+ class ModeModifier : public ModeRestorer
+ {
+ public:
+ ModeModifier( Mode &mode,
+ Mode newMode )
+ : ModeRestorer( mode )
+ {
+ mode_ = newMode;
+ }
+ };
+
SourceRange getCurrentInsertionRange() const;
***************
*** 118,121 ****
--- 128,136 ----
bool isNewLine( char c ) const;
+
+ void makeRequiredChangeAndVisitElement( const CodeModel::Change &change,
+ CodeModel::Element &element );
+
+ void setCurrentInsertionPos( int index );
private:
Index: CodeWriterTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** CodeWriterTest.cpp 16 Mar 2003 15:43:09 -0000 1.25
--- CodeWriterTest.cpp 16 Mar 2003 16:18:41 -0000 1.26
***************
*** 234,237 ****
--- 234,258 ----
void
+ CodeWriterTest::testModifyIfCondition()
+ {
+ source_ = "{\n"
+ " if ( true )\n"
+ " return 5;\n"
+ " return 2;\n"
+ "}";
+ generateCompound();
+
+ CodeModel::IfStatement &ifStatement =
+ dynamic_cast<CodeModel::IfStatement &>( *compound_->getStatementAt(0) );
+ ifStatement.setCondition( makeExpression( "x < y" ) );
+ generateAndCheckSource( "{\n"
+ " if ( x < y )\n"
+ " return 5;\n"
+ " return 2;\n"
+ "}" );
+ }
+
+
+ void
CodeWriterTest::testModifyReturnValue()
{
Index: CodeWriterTest.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** CodeWriterTest.h 16 Mar 2003 15:43:09 -0000 1.21
--- CodeWriterTest.h 16 Mar 2003 16:18:41 -0000 1.22
***************
*** 25,28 ****
--- 25,29 ----
CPPUNIT_TEST( testRemoveElseFromIfThenStatement );
CPPUNIT_TEST( testModifyElseFromIfThenStatement );
+ CPPUNIT_TEST( testModifyIfCondition );
CPPUNIT_TEST( testModifyReturnValue );
CPPUNIT_TEST( testRemoveReturnValue );
***************
*** 50,53 ****
--- 51,55 ----
void testRemoveElseFromIfThenStatement();
void testModifyElseFromIfThenStatement();
+ void testModifyIfCondition();
void testModifyReturnValue();
|