// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . utils Ċ Ċ import Ġcom . google . common . collect . Bi Map Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . extensions . Extension Point Ċ import Ġcom . intellij . openapi . extensions . Extension Point Name Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . test Framework . Platform TestCase Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġsoftware . aws . tool k its . core . utils . try OrNull Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠA Ġset Ġof Ġfunctions Ġthat Ġattempt Ġto Ġabstract ĠAPI Ġdifferences Ġthat Ġare Ġincompatible Ġbetween ĠIDEA Ġversions . Ċ Ġ* Ċ Ġ* ĠThis Ġcan Ġact Ġas Ġa Ġcentral Ġplace Ġwhere Ġsaid Ġlogic Ġcan Ġbe Ġremoved Ġas Ġmin - version Ġincreases Ċ Ġ*/ Ċ object ĠCompatibility Utils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġremoved Ġwhen Ġmin - version Ġis Ġ 1 9 . 3 ĠFIX _ WHEN _ MIN _ IS _ 1 9 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test Only ĊĠĠĠ Ġfun Ġ< T > Ġregister Extension ( name : ĠExtension Point Name < T >, Ġextension : ĠT , Ġdis posable : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension TestUtil Ġ= Ġtry OrNull Ġ{ ĠClass . forName (" com . intellij . test Framework . Extension TestUtil ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( extension TestUtil Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension TestUtil . getMethod (" mask Extensions ", ĠExtension Point Name :: class . java , ĠList :: class . java , ĠDis posable :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke ( null , Ġname , ĠlistOf ( extension ), Ġdis posable ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Register Ġ= ĠExtension Point :: class . java . getMethod (" register Extension ", ĠObject :: class . java , ĠDis posable :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġep Ġ= Ġname . get Point ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Register . invoke ( ep , Ġextension , Ġdis posable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġremoved Ġwhen Ġmin - version Ġis Ġ 1 9 . 3 ĠFIX _ WHEN _ MIN _ IS _ 1 9 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test Only ĊĠĠĠ Ġfun Ġcreate Project ( path : ĠPath ): ĠProject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheavy TestCase Class Ġ= Ġtry OrNull Ġ{ ĠClass . forName (" com . intellij . test Framework . He avy Platform TestCase ") Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( heavy TestCase Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNew Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġheavy TestCase Class . getMethod (" create Project ", ĠPath :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( null , Ġpath ) Ġas ĠProject ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlegacy Create Ġ= ĠPlatform TestCase :: class . java . getMethod (" create Project ", ĠFile :: class . java , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlegacy Create . invoke ( null , Ġpath . to File (), Ġ" Fake ") Ġas ĠProject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġremoved Ġwhen Ġmin - version Ġis Ġ 1 9 . 3 ĠFIX _ WHEN _ MIN _ IS _ 1 9 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġreplaced Ġwith ĠRemote Debugging File Finder ( mappings , ĠLocal FileSystem File Finder ( false )) Ġat Ġthe Ġcall - site ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠRemote Ġ: ĠAny > Ġcreate Remote Debugging File Finder ( ĊĠĠĠĠĠĠĠ Ġmappings : ĠBi Map < String , ĠVirtual File >, ĊĠĠĠĠĠĠĠ Ġlocal File Finder : ĠAny ĊĠĠĠ Ġ): ĠRemote Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Class Ġ= Ġlocal File Finder :: class . java . super class . take If Ġ{ Ġit Ġ!= ĠAny :: class . java Ġ} Ġ?: Ġlocal File Finder :: class . java . interfaces . first () ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= ĠRemote :: class . java . get Constructor ( Bi Map :: class . java , Ġparent Class ) ĊĠĠĠĠĠĠĠ Ġreturn Ġconstructor . newInstance ( mappings , Ġlocal File Finder ) ĊĠĠĠ Ġ} Ċ } Ċ