// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 Ġ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 . jetbrains . python . ift . lesson . ess ens ial Ċ Ċ import Ġcom . intellij . execution . Execution Bundle Ċ import Ġcom . intellij . execution . Run Manager Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ide . plugins . PluginManager Core Ċ import Ġcom . intellij . idea . Actions Bundle Ċ import Ġcom . intellij . openapi . action System . Action Manager Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton Ċ import Ġcom . intellij . openapi . action System . impl . Action MenuItem Ċ import Ġcom . intellij . openapi . action System . impl . Action Toolbar Impl Ċ import Ġcom . intellij . openapi . application . Application Names Info Ċ import Ġcom . intellij . openapi . application . invoke Later Ċ import Ġcom . intellij . openapi . application . run Write Action Ċ import Ġcom . intellij . openapi . editor . Logical Position Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Project Root Manager Ċ import Ġcom . intellij . openapi . ui . popup . Bal loon Ċ import Ġcom . intellij . openapi . wm . Tool WindowManager Ċ import Ġcom . intellij . openapi . wm . impl . Square Stripe Button Ċ import Ġcom . intellij . openapi . wm . impl . Stripe Button Ċ import Ġcom . intellij . ui . components . fields . Extend able TextField Ċ import Ġcom . intellij . ui . components . panels . Non Opaque Panel Ċ import Ġcom . intellij . util . Alarm Ċ import Ġcom . jetbrains . python . Py Bundle Ċ import Ġcom . jetbrains . python . Py Psi Bundle Ċ import Ġcom . jetbrains . python . Python Language Ċ import Ġtraining . commands . kotlin . Task Runtime Context Ċ import Ġtraining . learn . Less ons Bundle Ċ import Ġtraining . learn . interfaces . Module Ċ import Ġtraining . learn . lesson . general . run . toggle Breakpoint Task Ċ import Ġtraining . learn . lesson . k impl .* Ċ import Ġtraining . ui . Learning Ui Highlighting Manager Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . event . KeyEvent Ċ import Ġjavax . swing . J Tree Ċ import Ġjavax . swing . tree . Tree Path Ċ Ċ @ Suppress (" Hard Coded StringLiteral ") Ċ class ĠPython On boarding Tour ( module : ĠModule ) Ġ: ĊĠ ĠK Lesson (" python . on boarding ", Ġ" On boarding Ġtour ", Ġmodule , ĠPython Language . INSTANCE . id ) Ġ{ ĊĊĠ Ġprivate Ġval Ġdemo Configuration Name : ĠString Ġ= Ġ" welcome " ĊĠ Ġprivate Ġval Ġdemo FileName : ĠString Ġ= Ġ"$ demo Configuration Name . py " ĊĊĠ Ġoverride Ġval Ġproperties Ġ= ĠLess on Properties ( ĊĠĠĠ Ġcan Start In D umb Mode Ġ= Ġtrue , ĊĠĠĠ Ġshow Learn Tool window At Start Ġ= Ġfalse , ĊĠĠĠ Ġopen File At Start Ġ= Ġfalse ĊĠ Ġ) ĊĊĠ Ġval Ġsample : ĠLess on Sample Ġ= Ġparse Lesson Sample (""" ĊĠĠĠ Ġdef Ġfind _ average ( values : Ġlist ): ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġv Ġin Ġvalues : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġv ĊĠĠĠĠĠĠĠ Ġ< caret > return Ġresult < caret Ġid = 2 /> ĊĊĊĠĠĠ Ġprint (" A VER AGE ", Ġfind _ average ([ 5 , 6 , Ġ 7 , Ġ 8 ])) ĊĠ Ġ""" . trim Indent ()) ĊĊĠ Ġoverride Ġfun Ġclean Up ( project : ĠProject ) Ġ{ ĊĠĠĠ Ġval Ġroot Ġ= ĠProject Root Manager . getInstance ( project ). content Roots [ 0 ] ĊĠĠĠ Ġroot . find Child ( demo FileName )?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠ Ġinvoke Later Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfile . delete ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġoverride Ġval Ġlesson Content : ĠLess on Context . () Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ Ġconfigurations (). forEach Ġ{ Ġrun Manager (). remove Configuration ( it ) Ġ} ĊĊĠĠĠĠĠ Ġval Ġroot Ġ= ĠProject Root Manager . getInstance ( project ). content Roots [ 0 ] ĊĠĠĠĠĠ Ġif Ġ( root . find Child ( demo FileName ) Ġ== Ġnull ) Ġinvoke Later Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġroot . create Child Data ( this , Ġdemo FileName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight Ġ{ Ġprogress : ĠNon Opaque Panel Ġ-> ĊĠĠĠĠĠĠĠ Ġprogress . java Class . name . contains (" Inline Progress Panel ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġgot It Task ( Bal loon . Position . above , ĠDimension ( 5 0 0 , Ġ 2 0 0 )) Ġ{ ĊĠĠĠĠĠ Ġ" When Ġyou Ġopen Ġa Ġproject Ġfirst Ġtime Ġ< ide /> Ġneeds Ġsome Ġtime Ġto Ġ< strong > index </ strong > ĠPython ĠSDK Ġand Ġthe Ġproject Ġitself : Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" IDE Ġis Ġscanning Ġthe Ġproject Ġand Ġlibraries Ġto Ġensure Ġprompt Ġ( quick ?) Ġperformance Ġof Ġcode Ġcompletion , Ġfinding Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" us ages , Ġnavigation Ġand Ġso Ġon . ĠNote Ġthat Ġmany ĠIDE Ġoperations Ġand Ġcapabilities Ġare Ġrestricted Ġor Ġunavailable Ġduring Ġ" Ġ+ ĊĠĠĠĠĠ Ġ"< strong > indexing </ strong > Ġprocess ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġproject Tasks () ĊĊĠĠĠ Ġprepare Sample ( sample ) ĊĊĠĠĠ Ġopen Learn Tool window () ĊĊĠĠĠ Ġrun Tasks () ĊĊĠĠĠ Ġdebug T aks () ĊĊĠĠĠ Ġcompletion Steps () ĊĊĠĠĠ Ġcontext Actions () ĊĊĠĠĠ Ġsearch Every where Tasks () ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġval Ġvery FullName Ġ= Ġ"${ PluginManager Core . VENDOR _ J ET BR AIN S } Ġ${ Application Names Info . getInstance (). full ProductName With Edition }" ĊĠĠĠĠĠ Ġtext (" Here Ġwe Ġwill Ġfinish Ġour Ġon boarding Ġtour . ĠIn Ġthis Ġtool Ġwindow Ġyou Ġcan Ġfind Ġother Ġinteractive Ġguides Ġabout Ġdifferent Ġfeatures Ġin Ġ< ide />. Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Most Ġof Ġthem Ġare Ġmuch Ġshorter Ġ:) ĠThank Ġyou Ġfor Ġchoosing Ġ${ strong ( very FullName )}. ") ĊĊĠĠĠĠĠ Ġtext ("< strong > Note ,</ strong > Ġthat Ġcurrently Ġopened Ġproject Ġis Ġthe Ġ< strong > demo Ġlearning Ġproject </ strong > Ġused Ġby Ġthis Ġtool . ĠAny Ġmodifications Ġhere Ġare Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" likely Ġto Ġbe Ġre written Ġautomatically Ġat Ġsome Ġpoint Ġof Ġtime . ĠSo Ġwe Ġrecommend Ġyou Ġto Ġclose Ġthis Ġproject Ġwhen Ġyou Ġfinish Ġwith ĠIDE Ġlearning Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" open / create Ġyour Ġown Ġproject Ġto Ġdo Ġyour Ġwork / experiments Ġwith ĠPython .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Last Ġtask ") ĊĠĠĠĠĠ Ġstate Check Ġ{ Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . debug T aks () Ġ{ ĊĠĠĠ Ġvar Ġlogical Position Ġ= ĠLogical Position ( 0 , Ġ 0 ) ĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ Ġlogical Position Ġ= Ġeditor . offset To Logical Position ( sample . start Offset ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcaret ( sample . start Offset ) ĊĊĠĠĠ Ġtoggle Breakpoint Task ( sample , Ġ{ Ġlogical Position Ġ}, Ġcheck Line Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġ" You Ġmay Ġnotice Ġthat Ġmethod Ġ${ code (" find _ average ")} Ġreturns Ġwrong Ġanswer . ĠLet 's Ġdebug Ġit Ġand Ġstop Ġat Ġthe " Ġ+ ĊĠĠĠĠĠ Ġ"${ code (" return ")} Ġstatement . ĠFirst Ġof Ġall , Ġset Ġbreakpoint : Ġjust Ġclick Ġat Ġthe Ġg utter Ġin Ġthe Ġhighlighted Ġarea ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġhighlight Button ById (" Debug ") ĊĊĠĠĠ Ġaction Task (" Debug ") Ġ{ ĊĠĠĠĠĠ Ġ" Let 's Ġstart Ġdebug . ĠClick Ġat Ġ${ icon ( All Icons . Actions . Start Debugger )} Ġicon ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġval Ġneed First Action Ġ= ĠAction Manager . getInstance (). getAction (" Show Execution Point ") ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight ( highlight Inside Ġ= Ġfalse ) Ġ{ Ġui : ĠAction Toolbar Impl Ġ-> ĊĠĠĠĠĠĠĠ Ġui . size . let Ġ{ Ġit . width Ġ> Ġ 0 Ġ&& Ġit . height Ġ> Ġ 0 Ġ} Ġ&& Ġui . place Ġ== Ġ" Debugger Toolbar " Ġ&& Ġcheck First Button ( ui , Ġneed First Action ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġhighlight All Found Ui ( clear Previous Highlight s Ġ= Ġfalse , Ġhighlight Inside Ġ= Ġfalse ) Ġ{ Ġui : ĠAction Toolbar Impl Ġ-> ĊĠĠĠĠĠ Ġui . size . let Ġ{ Ġit . width Ġ> Ġ 0 Ġ&& Ġit . height Ġ> Ġ 0 Ġ} Ġ&& Ġui . place Ġ== Ġ" Debugger Toolbar " Ġ&& ĊĠĠĠĠĠ Ġcheck First Button ( ui , ĠAction Manager . getInstance (). getAction (" R er un ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġgot It Task ( Bal loon . Position . above , ĠDimension ( 5 0 0 , Ġ 1 5 0 )) Ġ{ ĊĠĠĠĠĠ Ġ" In Ġthe Ġdebug Ġtool Ġwindow Ġyou Ġmay Ġfind Ġthe Ġmost Ġof Ġthe Ġactions Ġyou Ġcan Ġdo Ġduring Ġdebug Ġlike Ġstep Ġin , Ġstep Ġover , Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" run Ġto Ġcursor Ġand Ġso Ġon . Ġ${ strong ( Less ons Bundle . message (" debug . workflow . lesson . name ")) } Ġlesson Ġcan Ġgive Ġyou Ġoverview Ġof Ġthem . Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" We Ġsuggest Ġto Ġpass Ġit Ġlater !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġhighlight Button ById (" Stop ") ĊĠĠĠ Ġaction Task (" Stop ") Ġ{ ĊĠĠĠĠĠ Ġ" Let 's Ġstop Ġdebugging . ĠClick Ġat Ġ${ icon ( All Icons . Actions . Suspend )} Ġicon ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ ĠLearning Ui Highlighting Manager . clear Highlight s () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck First Button ( ui : ĠAction Toolbar Impl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed First Action : ĠAn Action ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġui . components . let Ġ{ ĊĠĠĠĠĠ Ġit . isNotEmpty < Component ?> () Ġ&& Ġ( it [ 0 ] Ġas ? ĠAction Button )?. let Ġ{ Ġfirst Ġ-> ĊĠĠĠĠĠĠĠ Ġfirst . action Ġ== Ġneed First Action ĊĠĠĠĠĠ Ġ} Ġ== Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . run Tasks () Ġ{ ĊĠĠĠ Ġval Ġrun Item Ġ= ĠExecution Bundle . message (" default . runner . start . action . text "). drop Mnemonic () Ġ+ Ġ" Ġ'$ demo Configuration Name '" ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Let 's Ġrun Ġthis Ġsample . ĠRight Ġclick Ġat Ġthe Ġfree Ġspace Ġsomewhere Ġin Ġthe Ġeditor Ġto Ġinvoke Ġthe Ġcontext Ġmenu .") ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight ( highlight Inside Ġ= Ġfalse ) Ġ{ Ġui : ĠAction MenuItem Ġ-> ĊĠĠĠĠĠĠĠ Ġui . text ?. contains ( run Item ) Ġ?: Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" And Ġchoose Ġ${ strong ( run Item )}. ĠYou Ġmay Ġsee Ġit Ġhas Ġ${ action (" Run Class ")} Ġshortcut . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcan Ġuse Ġit Ġinstead Ġof Ġthis Ġmenu .") ĊĠĠĠĠĠ Ġtool Window Show ed (" Run ") ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigurations (). isNotEmpty () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight ( highlight Inside Ġ= Ġfalse ) Ġ{ Ġui : ĠAction Toolbar Impl Ġ-> ĊĠĠĠĠĠĠĠ Ġui . place Ġ== Ġ" NavBar Toolbar " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġgot It Task ( Bal loon . Position . below , ĠDimension ( 5 0 0 , Ġ 1 7 0 )) Ġ{ ĊĠĠĠĠĠ Ġ" You Ġmay Ġnotice Ġthat Ġ< ide /> Ġhas Ġbeen Ġcreated Ġthe Ġtemporary Ġrun Ġconfiguration . ĠWith Ġthis Ġtoolbar Ġyou Ġmay Ġchoose Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" run Ġconfiguration , Ġmodify Ġit Ġ( drop - down Ġmenu ), Ġrer un Ġit , Ġdebug , Ġcollect Ġcode Ġcoverage , Ġprofile Ġand Ġso Ġon . Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" Later Ġyou Ġcan Ġopen Ġ${ strong ( Less ons Bundle . message (" run . configuration . lesson . name ")) } Ġlesson Ġto Ġfind Ġmore Ġinformation ." ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . open Learn Tool window () Ġ{ ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight Ġ{ Ġstripe : ĠStripe Button Ġ-> ĊĠĠĠĠĠĠĠ Ġ( stripe Ġ! is ĠSquare Stripe Button ) Ġ&& Ġstripe . window Info . id Ġ== Ġ" Learn " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Let 's Ġswitch Ġto Ġthe ĠLearn Ġtool Ġwindow Ġand Ġcontinue Ġthis Ġlesson .", ĊĠĠĠĠĠĠĠĠĠĠ ĠLearning Bal loon Config ( Bal loon . Position . at Right , Ġdimension Ġ= ĠDimension ( 3 0 0 , Ġ 1 0 0 ))) ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ ĠTool WindowManager . getInstance ( project ). get Tool Window (" Learn ") ?. isVisible Ġ== Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ ĠLearning Ui Highlighting Manager . clear Highlight s () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . project Tasks () Ġ{ ĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ ĠLess on Util . hide Standard Tool windows ( project ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtrigger By Ui Component And Highlight Ġ{ Ġstripe : ĠStripe Button Ġ-> ĊĠĠĠĠĠĠĠ Ġ( stripe Ġ! is ĠSquare Stripe Button ) Ġ&& Ġstripe . window Info . id Ġ== Ġ" Project " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġvar Ġcollapsed Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġtext (" One Ġof Ġthe Ġmain Ġtool Ġwindows Ġis ĠProject ĠView Ġtool window . ĠLet 's Ġclick Ġat Ġits Ġ< strong > stripe Ġbutton </ strong > Ġto Ġopen Ġit Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġlook Ġat Ġour Ġsimple Ġdemo Ġproject ! ĠOr Ġyou Ġcan Ġopen Ġit Ġby Ġ${ action (" Activate Project Tool Window ")} Ġshortcut .", ĊĠĠĠĠĠĠĠĠĠĠ ĠLearning Bal loon Config ( Bal loon . Position . at Right , ĠDimension ( 5 0 0 , Ġ 1 2 0 ))) ĊĠĠĠĠĠ Ġtrigger By Found Path And Highlight Ġ{ Ġtree : ĠJ Tree , Ġpath : ĠTree Path Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpath . path Count Ġ>= Ġ 1 Ġ&& Ġpath . getPath Component ( 0 ). toString (). contains (" Py Char m Learning Project ") ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! collapsed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm (). add Request ({ Ġtree . collapse Path ( path ) Ġ}, Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġcollapsed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWhy Ġit Ġbreaks Ġ` previous ` Ġwork ĊĠĠĠ Ġwait Before Continue ( 5 0 0 ) ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Here Ġyou Ġcan Ġsee Ġseveral Ġtop - level Ġitems : Ġthe Ġproject Ġdirectory Ġitself , Ġexternal Ġlibrary Ġ( from Ġthe Ġconfigured ĠSDK Ġand Ġso Ġon ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġsome Ġother Ġauxiliary Ġstaff . ĠNow Ġlet 's Ġexpand Ġthe Ġproject Ġdirectory Ġitem .", ĊĠĠĠĠĠĠĠĠĠĠ ĠLearning Bal loon Config ( Bal loon . Position . at Right , ĠDimension ( 5 0 0 , Ġ 1 5 0 ))) ĊĠĠĠĠĠ Ġtrigger By Found Path And Highlight Ġ{ Ġ_: ĠJ Tree , Ġpath : ĠTree Path Ġ-> ĊĠĠĠĠĠĠĠ Ġpath . path Count Ġ>= Ġ 3 Ġ&& Ġpath . getPath Component ( 2 ). toString (). contains ( demo FileName ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Let 's Ġopen Ġfile Ġ${ code ( demo FileName )}. ", ĊĠĠĠĠĠĠĠĠĠĠ ĠLearning Bal loon Config ( Bal loon . Position . at Right , Ġdimension Ġ= ĠDimension ( 3 0 0 , Ġ 1 0 0 ))) ĊĠĠĠĠĠ Ġstate Check Ġl @{ ĊĠĠĠĠĠĠĠ Ġif Ġ( File Editor Manager . getInstance ( project ). selected Text Editor Ġ== Ġnull ) Ġreturn @ l Ġfalse ĊĠĠĠĠĠĠĠ Ġvirtual File . name Ġ== Ġdemo FileName ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . completion Steps () Ġ{ ĊĠĠĠ Ġval Ġcompletion Position Ġ= Ġsample . getPosition ( 2 ) ĊĠĠĠ Ġcaret ( completion Position ) ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" It Ġseems Ġwe Ġneed Ġto Ġdivide Ġthe Ġ${ code (" result ")} Ġsum Ġby Ġ${ code (" values ")} Ġlength . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Type Ġ${ code (" Ġ/ Ġle ") }") ĊĠĠĠĠĠ Ġtrigger By ListItem And Highlight ( highlight Border Ġ= Ġtrue , Ġhighlight Inside Ġ= Ġfalse ) Ġ{ Ġ// Ġno Ġhighlighting ĊĠĠĠĠĠĠĠ Ġit . toString (). contains (" string = len ; ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask (" Editor Choose Lookup Item ") Ġ{ ĊĠĠĠĠĠ Ġtext ("< ide /> Ġshows Ġcompletion Ġvariants Ġautomatically Ġas Ġyou Ġtype . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Select Ġ${ code (" len (__ obj )") } Ġ( by Ġkeyboard Ġarrows ) Ġitem Ġand Ġpress Ġ${ Lesson Util . raw Enter ()}. ") ĊĠĠĠĠĠ Ġtrigger ( it ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Editor Modification ( completion Position , Ġ"/ len () ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask (" Code Completion ") Ġ{ ĊĠĠĠĠĠ Ġtext (" The Ġcaret Ġis Ġinside Ġparent hesis Ġ${ code (" () ")} Ġnow . ĠLet 's Ġinvoke Ġcompletion Ġlist Ġexplicitly Ġby Ġ${ action ( it )} ") ĊĠĠĠĠĠ Ġtrigger ( it ) ĊĠĠĠĠĠ Ġtrigger By ListItem And Highlight ( highlight Border Ġ= Ġtrue , Ġhighlight Inside Ġ= Ġfalse ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġitem . toString (). contains (" values ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask (" Editor Choose Lookup Item ") Ġ{ ĊĠĠĠĠĠ Ġtext (" Apply Ġ${ strong (" values ")} Ġitem . ĠYou Ġcan Ġstart Ġto Ġtype Ġthe Ġvariable Ġto Ġreduce Ġcompletion Ġlist .") ĊĠĠĠĠĠ Ġtrigger ( it ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Editor Modification ( completion Position , Ġ"/ len ( values )") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠTask Runtime Context . check Editor Modification ( completion Position : ĠLess on Sample Position , Ġneed Change : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġstart Of Change Ġ= Ġcompletion Position . start Offset ĊĠĠĠ Ġval Ġsample Text Ġ= Ġsample . text ĊĠĠĠ Ġval Ġprefix Ġ= Ġsample Text . substring ( 0 , Ġstart Of Change ) ĊĠĠĠ Ġval Ġsuffix Ġ= Ġsample Text . substring ( start Of Change , Ġsample Text . length ) ĊĠĠĠ Ġval Ġcurrent Ġ= Ġeditor . document . text ĊĊĠĠĠ Ġif Ġ(! current . startsWith ( prefix )) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ(! current . endsWith ( suffix )) Ġreturn Ġfalse ĊĊĠĠĠ Ġval ĠindexOf Suffix Ġ= Ġcurrent . indexOf ( suffix ) ĊĠĠĠ Ġif Ġ( indexOf Suffix Ġ< Ġstart Of Change ) Ġreturn Ġfalse ĊĊĠĠĠ Ġval Ġchange Ġ= Ġcurrent . substring ( start Of Change , ĠindexOf Suffix ) ĊĊĠĠĠ Ġreturn Ġchange . replace (" Ġ", Ġ"") Ġ== Ġneed Change ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . context Actions () Ġ{ ĊĠĠĠ Ġval Ġre format Message Ġ= ĠPy Bundle . message (" Q FIX . re format . file ") ĊĠĠĠ Ġcaret (", 6 ") ĊĠĠĠ Ġtask (" Show Int ention Actions ") Ġ{ ĊĠĠĠĠĠ Ġtext (" We Ġmoved Ġthe Ġcaret Ġat Ġthe Ġwarning . ĠIn Ġmany Ġcases Ġ< ide /> Ġcan Ġguess Ġhow Ġto Ġfix Ġwarnings , Ġsyntax Ġerrors Ġor Ġguess Ġyour Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ"< strong > int ention </ strong >. ĠSo Ġlet 's Ġinvoke Ġone Ġof Ġthe Ġmost Ġuseful Ġactions , Ġ${ Lesson Util . action Name ( it )}. ĠPress Ġ${ action ( it )}. ") ĊĠĠĠĠĠ Ġtrigger By ListItem And Highlight ( highlight Border Ġ= Ġtrue , Ġhighlight Inside Ġ= Ġfalse ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġitem . toString (). contains ( re format Message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbefore Ġ= Ġ"" ĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ= Ġeditor . document . text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Let 's Ġapply Ġthe Ġfirst Ġitem , Ġquick Ġfix Ġfor Ġthis Ġproblem : Ġ${ strong ( re format Message )}. ") ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġnormal Ġcheck ĊĠĠĠĠĠĠĠ Ġbefore Ġ!= Ġeditor . document . text ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠreturnType Message Ġ= ĠPy Psi Bundle . message (" INT N . specify . return . type . in . annotation ") ĊĠĠĠ Ġcaret (" find _ average ") ĊĠĠĠ Ġtask (" Show Int ention Actions ") Ġ{ ĊĠĠĠĠĠ Ġtext ("< ide /> Ġknows Ġa Ġlot Ġof Ġintent ions . ĠDuring Ġyour Ġevery day Ġwork Ġtry Ġto Ġinvoke Ġ${ Lesson Util . action Name ( it )} Ġevery Ġtime Ġyou Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" think Ġthere Ġmight Ġbe Ġa Ġgood Ġsolution Ġor Ġintention . ĠYou Ġwill Ġsave Ġa Ġlot Ġof Ġtime Ġand Ġmake Ġcoding Ġprocess Ġto Ġbe Ġmuch Ġmore Ġfun ! Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Now Ġlet 's Ġlook Ġwhat Ġcan Ġbe Ġapplied Ġfor Ġ${ code (" find _ average ")} Ġmethod . ĠPress Ġ${ action ( it )} Ġagain .") ĊĠĠĠĠĠ Ġtrigger By ListItem And Highlight ( highlight Border Ġ= Ġtrue , Ġhighlight Inside Ġ= Ġfalse ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġitem . toString (). contains ( returnType Message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ= Ġeditor . document . text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Let 's Ġapply Ġ${ strong ( returnType Message )} Ġintention .") ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġnormal Ġcheck ĊĠĠĠĠĠĠĠ Ġbefore Ġ!= Ġeditor . document . text ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Note Ġthat Ġthe Ġcaret Ġhas Ġbeen Ġmoved Ġto Ġthe Ġplace Ġfor Ġreturn Ġtype . ĠType Ġ${ ĊĠĠĠĠĠĠĠ Ġcode (" float ") ĊĠĠĠĠĠ Ġ} Ġnow Ġand Ġthen Ġpress Ġ${ Lesson Util . raw Enter ()}. ") ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġnormal Ġcheck ĊĠĠĠĠĠĠĠ Ġeditor . document . text . contains (" float ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠLess on Context . search Every where Tasks () Ġ{ ĊĠĠĠ Ġcaret (" A VER AGE ", Ġselect Ġ= Ġtrue ) ĊĠĠĠ Ġtask (" Search Every where ") Ġ{ ĊĠĠĠĠĠ Ġtext (" You Ġmay Ġnotice Ġwe Ġselected Ġ${ code (" A VER AGE ") }. ĠLet 's Ġlook Ġat Ġanother Ġimportant Ġ< ide /> Ġfeature : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ"${ Lesson Util . action Name ( it )}. ĠPress Ġ${ Lesson Util . raw KeyStroke ( KeyEvent . VK _ SHIFT )} Ġtwo Ġtimes Ġin Ġa Ġrow .") ĊĠĠĠĠĠ Ġtrigger ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Here Ġyou Ġcan Ġfind Ġany Ġentity Ġin Ġyour Ġproject Ġor Ġany Ġfeature Ġin Ġ< ide /> Ġby Ġits Ġname ! ĠAs Ġyou Ġsee , Ġselected Ġtext Ġautomatically Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" copied Ġinto Ġinput Ġstring . ĠAnd Ġthe Ġonly Ġitem Ġwe Ġfound Ġby Ġnow Ġis Ġthe Ġ${ code (" find _ average ")} Ġfunction Ġfrom Ġcurrent Ġfile . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Later Ġyou Ġmay Ġpass Ġ${ strong ( Less ons Bundle . message (" search . every where . lesson . name ")) } Ġlesson Ġto Ġlearn Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" more Ġabout Ġcode Ġnavigation Ġand Ġlibrary Ġstaff Ġdiscover .") ĊĠĠĠĠĠ Ġtext (" Now Ġlet 's Ġclear Ġthe Ġ${ Lesson Util . action Name (" Search Every where ")} Ġinput Ġfield .") ĊĠĠĠĠĠ Ġstate Check Ġ{ Ġcheck Word In Search ("") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtoggle Case Ġ= ĠActions Bundle . message (" action . Editor Toggle Case . text ") ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" Sup pose Ġwe Ġwant Ġto Ġmake Ġ${ code (" A VER AGE ")} Ġstring Ġto Ġbe Ġlower Ġcase . ĠLet 's Ġlook Ġfor Ġthe Ġcorresponding Ġaction . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" Type Ġ${ strong (" case ")} Ġinto Ġthis Ġsearch Ġstring .") ĊĠĠĠĠĠ Ġtrigger By ListItem And Highlight Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġitem . toString (). contains ( toggle Case ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbefore Ġ= Ġ"" ĊĠĠĠ Ġprepare Runtime Task Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ= Ġeditor . document . text ĊĠĠĠ Ġ} ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" We Ġfound Ġ${ strong ( toggle Case )} Ġaction . ĠNote Ġthat Ġit Ġhas Ġits Ġown Ġshortcut Ġand Ġyou Ġcan Ġremember Ġand Ġuse Ġit Ġlater . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" But Ġit Ġmay Ġbe Ġneeded Ġrare ly Ġso Ġyou Ġcan Ġjust Ġfind Ġit Ġagain Ġwhen Ġyou Ġwill Ġneed Ġit . ĠNow Ġapply Ġthe Ġaction .") ĊĠĠĠĠĠ Ġstate Check Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġnormal Ġcheck ĊĠĠĠĠĠĠĠ Ġbefore Ġ!= Ġeditor . document . text ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext (" You Ġmay Ġwant Ġto Ġlook Ġfor Ġsome Ġ< ide /> Ġfeature Ġwithout Ġany Ġinter ference Ġwith Ġyou Ġown Ġor Ġlibrary Ġcode Ġentities . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcan Ġpass Ġ${ strong ( Less ons Bundle . message (" goto . action . lesson . name ")) } Ġlesson Ġto Ġlearn Ġhow Ġto Ġdo Ġit Ġand Ġmore .") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠTask Runtime Context . check Word In Search ( expected : ĠString ): ĠBoolean Ġ= ĊĠĠĠ Ġ( focus Owner Ġas ? ĠExtend able TextField )?. text . equals ( expected , Ġignore Case Ġ= Ġtrue ) ĊĊĠ Ġprivate Ġfun ĠTask Runtime Context . run Manager () Ġ= ĠRun Manager . getInstance ( project ) ĊĠ Ġprivate Ġfun ĠTask Runtime Context . configurations () Ġ= ĊĠĠĠ Ġrun Manager (). all Settings . filter Ġ{ Ġit . name . contains ( demo Configuration Name ) Ġ} Ċ } Ċ