|
From: <bl...@us...> - 2003-03-16 19:55:11
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv20936/src/rfta
Modified Files:
CodeRewriter.cpp CodeRewriter.h CodeWriterTest.cpp
Log Message:
* refactored some more
Index: CodeRewriter.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** CodeRewriter.cpp 16 Mar 2003 16:25:23 -0000 1.25
--- CodeRewriter.cpp 16 Mar 2003 19:55:05 -0000 1.26
***************
*** 117,120 ****
--- 117,144 ----
+ void
+ CodeRewriter::deleteTrailingExpression( const SourceRange &range )
+ {
+ int startIndex = range.getStartIndex();
+ while ( startIndex > 0 && isSpace( originalSource_.at( startIndex-1 ) ) )
+ --startIndex;
+
+ deleteText( SourceRange( startIndex, range.getEndIndex() - startIndex ) );
+ }
+
+
+ void
+ CodeRewriter::deleteRange( const SourceRange &range,
+ DeletionType deletionType )
+ {
+ if ( deletionType == statementDelete )
+ deleteStatement( range );
+ else if ( deletionType == trailingExpressionDelete )
+ deleteTrailingExpression( range );
+ else
+ deleteText( range );
+ }
+
+
bool
CodeRewriter::isSpace( char c ) const
***************
*** 139,154 ****
void
! CodeRewriter::makeRequiredChangeAndVisitElement( const CodeModel::Change &change,
! CodeModel::Element &element,
! DeletionType deletionType )
{
- // Element may only be unmodified or replaced... (should use a different enum type ?)
-
if ( isUpdating() && change.wasReplaced() )
{
! if ( deletionType == statementDelete )
! deleteStatement( change.oldRange_ );
! else
! deleteText( change.oldRange_ );
setCurrentInsertionPos( change.oldRange_.getEndIndex() );
}
--- 163,173 ----
void
! CodeRewriter::handleMandatoryChange( const CodeModel::Change &change,
! CodeModel::Element &element,
! DeletionType deletionType )
{
if ( isUpdating() && change.wasReplaced() )
{
! deleteRange( change.oldRange_, deletionType );
setCurrentInsertionPos( change.oldRange_.getEndIndex() );
}
***************
*** 165,168 ****
--- 184,221 ----
void
+ CodeRewriter::handleOptionalChange( const CodeModel::Change &change,
+ const CodeModel::ElementPtr &element,
+ const std::string &valueSeparator,
+ int addingIndex,
+ DeletionType deletionType )
+ {
+ if ( isUpdating() && ( change.wasRemoved() || change.wasReplaced() ) )
+ {
+ deleteRange( change.oldRange_, deletionType );
+ setCurrentInsertionPos( change.oldRange_.getEndIndex() );
+ }
+
+ if ( !element
+ || ( isUpdating() && change.wasRemoved() ) )
+ return;
+
+ if ( isUpdating() && change.wasAdded() )
+ setCurrentInsertionPos( addingIndex );
+
+ if ( isInserting()
+ || ( isUpdating() && (change.wasAdded() || change.wasReplaced() ) ) )
+ insertText( valueSeparator );
+
+ ModeRestorer restorer( mode_ );
+ if ( isUpdating() && change.isUnmodified() )
+ mode_ = updating;
+ else
+ mode_ = inserting;
+
+ element->accept( *this );
+ }
+
+
+ void
CodeRewriter::visit( BreakStatement &statement )
{
***************
*** 322,327 ****
insertText( "if ( " );
}
! makeRequiredChangeAndVisitElement( statement.getConditionChange(),
! *statement.getCondition() );
IndentLevelManager::IndentRestorer restorer( indentManager_ );
--- 375,380 ----
insertText( "if ( " );
}
! handleMandatoryChange( statement.getConditionChange(),
! *statement.getCondition() );
IndentLevelManager::IndentRestorer restorer( indentManager_ );
***************
*** 335,341 ****
Change thenChange = statement.getThenStatementChange();
! makeRequiredChangeAndVisitElement( thenChange,
! *statement.getThenStatement(),
! statementDelete );
Change elseChange = statement.getElseStatementChange();
--- 388,394 ----
Change thenChange = statement.getThenStatementChange();
! handleMandatoryChange( thenChange,
! *statement.getThenStatement(),
! statementDelete );
Change elseChange = statement.getElseStatementChange();
***************
*** 418,451 ****
CodeRewriter::visit( ReturnStatement &statement )
{
! if ( isUpdating() )
{
! Change change = statement.getValueChange();
! if ( change.type_ == Change::replaced || change.type_ == Change::removed )
! deleteText( change.oldRange_ );
!
! if ( change.type_ == Change::removed || !statement.hasValue() )
! return;
!
! ModeModifier mode( mode_, change.type_ == Change::unmodified ? updating : inserting );
! if ( mode_ == inserting )
! currentInsertionPos_ = statement.getSourceRange().getEndIndex() -1;
! if ( change.type_ == Change::added )
! insertText( " " );
! statement.getValue()->accept( *this );
! }
! else if ( isInserting() )
! {
! beginInsertNewStatement();
! insertText( "return" );
! if ( statement.hasValue() )
! {
! insertText( " " );
! statement.getValue()->accept( *this );
! }
endInsertNewStatement();
- }
}
--- 471,491 ----
CodeRewriter::visit( ReturnStatement &statement )
{
! const std::string keyWord( "return" );
! if ( isInserting() )
{
! beginInsertNewStatement();
! insertText( keyWord );
! }
! SourceRange range( );
! handleOptionalChange( statement.getValueChange(),
! statement.getValue(),
! " ",
! statement.getSourceRange().getStartIndex() + keyWord.length(),
! trailingExpressionDelete );
! if ( isInserting() )
endInsertNewStatement();
}
Index: CodeRewriter.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** CodeRewriter.h 16 Mar 2003 16:25:24 -0000 1.11
--- CodeRewriter.h 16 Mar 2003 19:55:06 -0000 1.12
***************
*** 75,79 ****
{
minimalDelete =0,
! statementDelete
};
--- 75,80 ----
{
minimalDelete =0,
! statementDelete,
! trailingExpressionDelete
};
***************
*** 131,141 ****
void deleteStatement( const SourceRange &range );
bool isSpace( char c ) const;
bool isNewLine( char c ) const;
! void makeRequiredChangeAndVisitElement( const CodeModel::Change &change,
! CodeModel::Element &element,
! DeletionType deletionType = minimalDelete );
void setCurrentInsertionPos( int index );
--- 132,161 ----
void deleteStatement( const SourceRange &range );
+ void deleteTrailingExpression( const SourceRange &range );
+
+ void deleteRange( const SourceRange &range,
+ DeletionType deletionType );
+
bool isSpace( char c ) const;
bool isNewLine( char c ) const;
! /*! Handles text change for a element that always exist.
! * Possible changes are restricted to replaced and unmodified.
! */
! void handleMandatoryChange( const CodeModel::Change &change,
! CodeModel::Element &element,
! DeletionType deletionType = minimalDelete );
!
! /*! Handles text change for a element that may not exist.
! * Possible changes are replaced, unmodified, added and removed.
! * \param valueSeparator Text inserted before the element if it exist
! * \param addingIndex Index the element text is inserted at if it is being added.
! */
! void handleOptionalChange( const CodeModel::Change &change,
! const CodeModel::ElementPtr &element,
! const std::string &valueSeparator,
! int addingIndex,
! DeletionType deletionType = minimalDelete );
void setCurrentInsertionPos( int index );
Index: CodeWriterTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** CodeWriterTest.cpp 16 Mar 2003 16:18:41 -0000 1.26
--- CodeWriterTest.cpp 16 Mar 2003 19:55:06 -0000 1.27
***************
*** 283,287 ****
returnStatement.setValue( CodeModel::ExpressionPtr() );
generateAndCheckSource( "{\n"
! " return ;\n"
"}" );
}
--- 283,287 ----
returnStatement.setValue( CodeModel::ExpressionPtr() );
generateAndCheckSource( "{\n"
! " return;\n"
"}" );
}
|