gui/PPExtractProdcutionRefactoring.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 03 Oct 2014 02:33:08 +0100
changeset 377 6112a403a52d
parent 364 96239b58228c
permissions -rw-r--r--
Updated to latest version from Moose repository. Name: PetitParser-JanKurs.250 Author: JanKurs Time: 01-10-2014, 04:44:04 AM UUID: c46eea20-51a0-4deb-8fd5-8cb99810a8b4 Repository: http://smalltalkhub.com/mc/Moose/PetitParser/main Name: PetitTests-JanKurs.60 Author: JanKurs Time: 29-09-2014, 11:48:10 AM UUID: 28fd2e65-c287-4f73-b71e-5b6bb25bebaa Repository: http://smalltalkhub.com/mc/Moose/PetitParser/main

"{ 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 $'
! !