// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . java . ift . lesson . refactor ings Ċ Ċ import Ġcom . intellij . Common Bundle Ċ import Ġcom . intellij . code Insight . template . impl . Template ManagerImpl Ċ import Ġcom . intellij . java . ift . Java Less ons Bundle Ċ import Ġcom . intellij . java . refactor ing . Java Ref actor ing Bundle Ċ import Ġcom . intellij . refactor ing . rename . Rename Processor Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġtraining . dsl .* Ċ import Ġtraining . dsl . Lesson Util . check Expected State Of Editor Ċ import Ġtraining . learn . Less ons Bundle Ċ import Ġtraining . learn . course . K Lesson Ċ import Ġjavax . swing . J Dialog Ċ Ċ class ĠJava Rename Lesson ĊĠ Ġ: ĠK Lesson (" Ref actor ings . Rename ", ĠLess ons Bundle . message (" rename . lesson . name ")) Ġ{ ĊĠ Ġprivate Ġval Ġinitial Name Ġ= Ġ" stylus " ĊĊĠ Ġprivate Ġval Ġtemplate Ġ= Ġ""" ĊĠĠĠ Ġimport Ġjava . lang . String ; ĊĠĠĠĠĊĠĠĠ Ġclass ĠRename Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate ĠString Ġ< caret Ġid = 2 />< name >; ĊĠĠĠĠĠĠĠ Ġprivate ĠString Ġdevice Name ; ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġtouch Device ( int Ġx , Ġint Ġy , Ġfloat Ġstrength , ĠDevice Ġdevice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . touch By St yl us (< caret >< name >, Ġx , Ġy , Ġstrength ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġboolean Ġcheck IP ad () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Name . equals (" i Pad ")) Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġpublic ĠString Ġget < name 2 >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ< name >; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġinterface ĠDevice Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġtouch By St yl us ( String Ġst yl us , Ġint Ġx , Ġint Ġy , Ġfloat Ġstrength ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġclass ĠDerived Ġextends ĠRename Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠ Ġpublic ĠString Ġget < name 2 >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" Derived Ġmethod Ġapplied "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . get < name 2 >(); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ""" . trim Indent () Ġ+ Ġ'\ n ' ĊĊĠ Ġprivate Ġval Ġsample Ġ= Ġparse Lesson Sample ( replace Template ( initial Name )) ĊĊĠ Ġprivate Ġfun Ġreplace Template ( name : ĠString ) Ġ= ĊĠĠĠ Ġtemplate . replace ("< name >", Ġname ) ĊĠĠĠĠĠ Ġ. replace ("< name 2 >", Ġname . capitalize ()) ĊĊĠ Ġoverride Ġval Ġlesson Content : ĠLess on Context . () Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠ Ġval ĠnewName Example Ġ= Ġ" pencil " ĊĊĠĠĠ Ġprepare Sample ( sample ) ĊĠĠĠ Ġshow Warning If In place Ref actor ings Disabled () ĊĊĠĠĠ Ġlateinit Ġvar Ġstart Id : ĠTask Context . TaskId ĊĠĠĠ Ġtask (" Rename Element ") Ġ{ ĊĠĠĠĠĠ Ġstart Id Ġ= ĠtaskId ĊĠĠĠĠĠ Ġtext ( Java Less ons Bundle . message (" java . rename . press . rename ", Ġaction ( it ), Ġcode ( initial Name ))) ĊĠĠĠĠĠ Ġtriggers ( it ) ĊĠĠĠĠĠ Ġpropose Restore Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Expected State Of Editor ( sample , Ġfalse ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠ Ġactions ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġstate Check Ġ{ ĠTemplate ManagerImpl . getInstance ( project ). getActive Template ( editor ) Ġ!= Ġnull Ġ} ĊĠĠĠĠĠ Ġrestore By Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask (" Next Template Variable ") Ġ{ ĊĠĠĠĠĠ Ġtriggers ( it ) ĊĠĠĠĠĠ Ġtext ( Java Less ons Bundle . message (" java . rename . type . new . name ", Ġcode ( new Name Example ), ĠLess on Util . raw Enter ())) ĊĠĠĠĠĠ Ġrestore After State Be come False ( restore Id Ġ= Ġstart Id ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTemplate ManagerImpl . get Template State ( editor ) Ġ== Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtest ( wait Editor ToBe Ready Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype ( new Name Example ) ĊĠĠĠĠĠĠĠ Ġactions ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġ// Ġwait Ġuntil Ġdialog Ġwill Ġbe Ġshowed ĊĠĠĠĠĠ Ġ// ĠIt Ġis Ġnot Ġnecessary Ġstep : Ġjust Ġdon 't Ġgo Ġfurther Ġuntil Ġcorrect Ġname Ġis Ġchosen Ġ( name Ġcorrect ness Ġis Ġchecking Ġby Ġrename Ġhandler ) ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġfocus Owner ?. let Ġ{ Ġfo Ġ-> ĠUI Util . getParent OfType ( J Dialog :: class . java , Ġfo ) Ġ} ?. title Ġ== ĊĠĠĠĠĠĠĠĠĠ ĠJava Ref actor ing Bundle . message (" rename . access ors . title ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġval Ġok ButtonText Ġ= ĠCommon Bundle . get Ok ButtonText () ĊĠĠĠĠĠ Ġtext ( Java Less ons Bundle . message (" java . rename . confirm . access ors . rename ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLess on Util . raw Enter (), Ġstrong ( ok ButtonText ))) ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġget FieldName () ĊĠĠĠĠĠĠĠ Ġval ĠshouldBe Ġ= ĠfieldName ?. let Ġ{ Ġreplace Template ( it ). replace ("< caret >", Ġ""). replace ("< caret Ġid = 2 /> ", Ġ"") Ġ} ĊĠĠĠĠĠĠĠ ĠfieldName Ġ!= Ġinitial Name Ġ&& Ġeditor . document . text Ġ== ĠshouldBe ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġrestore After State Be come False ( restore Id Ġ= Ġstart Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ! Thread . currentThread (). stack Trace . any Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . className . contains ( Rename Processor :: class . simple Name !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtest ( wait Editor ToBe Ready Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġide Frame Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbutton ( ok ButtonText ). click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠTask Runtime Context . getField Name (): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġchars Sequence Ġ= Ġeditor . document . chars Sequence ĊĠĠĠ Ġ// Ġget Ġposition Ġof Ġdeclaration Ġbecause Ġit Ġshould Ġnot Ġshift Ġafter Ġrename ĊĠĠĠ Ġval Ġstart Ġ= Ġsample . getPosition ( 2 ). start Offset ĊĠĠĠ Ġval Ġend Ġ= Ġchars Sequence . indexOf (' ;', Ġstart ). take If Ġ{ Ġit Ġ> Ġ 0 Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval ĠnewName Ġ= Ġchars Sequence . sub Sequence ( start , Ġend ) ĊĠĠĠ Ġif Ġ( new Name . isEmpty ()) Ġreturn Ġnull ĊĠĠĠ Ġif Ġ(! Character . is Java Identifier Start ( new Name [ 0 ]) Ġ|| ĠnewName . any Ġ{ Ġ! Character . is Java Identifier Part ( it ) Ġ}) Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠnewName . toString () ĊĠ Ġ} Ċ } Ċ