gui/PPExtractProdcutionRefactoring.st
author Claus Gittinger <cg@exept.de>
Wed, 05 Mar 2014 00:34:06 +0100
changeset 364 96239b58228c
parent 337 e1480829e5db
permissions -rw-r--r--
class: PPExtractProdcutionRefactoring changed: #nameNewMethod:

"{ Package: 'stx:goodies/petitparser/gui' }"

ExtractMethodRefactoring subclass:#PPExtractProdcutionRefactoring
	instanceVariableNames:'targetProduction'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitGui-Refactoring'
!


!PPExtractProdcutionRefactoring class methodsFor:'instance creation'!

onClass: aClass production: aSelector interval: anInterval to: aTargetSelector
	^ (self extract: anInterval from: aSelector in: aClass)
		setTargetProduction: aTargetSelector;
		yourself
! !

!PPExtractProdcutionRefactoring methodsFor:'initialization'!

setTargetProduction: aSymbol
	targetProduction := aSymbol
! !

!PPExtractProdcutionRefactoring methodsFor:'preconditions'!

preconditions
	^ (self checkCompositeParser: class)
		& super preconditions		
		& (RBCondition definesSelector: targetProduction asSymbol in: class) not
		& (RBCondition definesInstanceVariable: targetProduction asString in: class) not
! !

!PPExtractProdcutionRefactoring methodsFor:'requests'!

shouldExtractAssignmentTo: aString
	^ false
! !

!PPExtractProdcutionRefactoring methodsFor:'transforming'!

existingSelector
	^ nil
!

getNewMethodName
	parameters isEmpty
		ifFalse: [ self refactoringError: 'Cannot extract production since it contains references.' ].
	targetProduction asSymbol isUnary
		ifFalse: [ self refactoringError: 'Invalid production name.' ].
	^ targetProduction asSymbol
!

nameNewMethod: aSymbol 
        class addInstanceVariable: aSymbol asString.
        extractedParseTree renameSelector: aSymbol andArguments: #().
        modifiedParseTree := ParseTreeRewriter 
                replace: self methodDelimiter
                with: aSymbol asString
                in: modifiedParseTree
! !

!PPExtractProdcutionRefactoring class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPExtractProdcutionRefactoring.st,v 1.2 2014-03-04 23:34:06 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPExtractProdcutionRefactoring.st,v 1.2 2014-03-04 23:34:06 cg Exp $'
! !