// Ġ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 . intellij . ide . plugins Ċ Ċ import Ġcom . intellij . idea . Ide Starter Ċ import Ġcom . intellij . openapi . action System . Action Manager Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . util . Icon Loader Ċ import Ġcom . intellij . openapi . wm . impl . WindowManager Impl Ċ import Ġcom . intellij . util . lang . Class Path Ċ import Ġjava . lang . invoke . Method Handles Ċ import Ġjava . lang . invoke . MethodType Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . system . exit Process Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġused Ġin Ġbuild Ġscripts Ġfor Ġproviding Ġclasses Ġand Ġmodules Ġloading Ġorders . Ċ Ġ* Ċ Ġ* ĠPerformance Ġtests Ġshow Ġ 2 0 0 ms Ġstartup Ġperformance Ġimprovement Ġafter Ġadding Ġjar Ġfiles Ġorder Ċ Ġ* ĠPerformance Ġtests Ġ( most ly ĠWindows ) Ġshow Ġ 6 0 0 ms Ġstartup Ġperformance Ġimprovement Ġafter Ġre ordering Ġclasses Ġin Ġjar Ġfiles Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ internal Ġclass ĠJar Order Starter Ġ: ĠIde Starter () Ġ{ ĊĠ Ġoverride Ġfun Ġget CommandName () Ġ= Ġ" jar Order " ĊĊĠ Ġoverride Ġfun Ġis Head less () Ġ= Ġtrue ĊĊĠ Ġoverride Ġfun Ġmain ( args : ĠList < String >) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġsuper . main ( args ) ĊĠĠĠĠĠ ĠIcon Loader :: class . java ĊĠĠĠĠĠ ĠWindow ManagerImpl :: class . java ĊĠĠĠĠĠ ĠAction Manager . getInstance () ĊĠĠĠĠĠ Ġ// Ġensure Ġthat Ġall ĠE DT Ġactivities Ġwere Ġprocessed ĊĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġactivities Ġthat Ġwere Ġscheduled Ġas Ġpart Ġof Ġinvoke Ġtoo ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġgenerate Jar Access Log ( Paths . get ( args [ 1 ])) ĊĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġlogger < Jar Order Starter >(). error ( e ) ĊĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġgenerate Jar Access Log ( out File : ĠPath ) Ġ{ ĊĠĠĠ Ġval Ġclass Loader Ġ= ĠJar Order Starter :: class . java . class Loader ĊĠĠĠ Ġval Ġitems From Bootstrap Ġ= ĠMethod Handles . lookup () ĊĠĠĠĠĠ Ġ. find Static ( class Loader :: class . java , Ġ" get Loaded Classes ", ĠMethod Type . method Type ( Collection :: class . java )) ĊĠĠĠĠĠ Ġ. invoke Exact () Ġas ĠCollection < Map . Entry < String , ĠPath >> ĊĠĠĠ Ġval Ġitems From Core Ġ= ĠClass Path . get Loaded Classes () ĊĠĠĠ Ġval Ġitems Ġ= ĠLinked HashSet < Map . Entry < String , ĠPath >>( items From Bootstrap . size Ġ+ Ġitems From Core . size ) ĊĠĠĠ Ġitems . addAll ( items From Bootstrap ) ĊĠĠĠ Ġitems . addAll ( items From Core ) ĊĊĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠ Ġfor Ġ( item Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . append ( item . key ). append (': '). append ( item . value ) ĊĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠ Ġ} ĊĠĠĠ ĠFiles . writeString ( out File , Ġbuilder ) ĊĠ Ġ} Ċ } Ċ