/** Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . blo id onia . intellij . link om atic Ċ Ċ import Ġcom . intellij . ide . actions . Copy Reference Action . Virtual File QualifiedName Provider Ċ import Ġcom . intellij . ide . scratch . Root Type Ċ import Ġcom . intellij . ide . scratch . Scratch File Service Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . ide . Copy Paste Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Module Root Manager Ċ import Ġcom . intellij . openapi . roots . Project File Index Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . openapi . vfs . V fs Util Core Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġjava . awt . datat rans fer . String Selection Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠA Ġlot Ġof Ġthis Ġwas Ġtaken Ġfrom : Ċ Ġ* Ċ Ġ* Ġhttps :// github . com / Jet Brains / intellij - community / blob / master / platform / lang - impl / src / com / intellij / ide / actions / Copy Reference Action . java Ċ Ġ* Ċ Ġ*/ Ċ class ĠCopy Action Ġ: ĠAn Action () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( event : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġevent . getData ( Common Data Keys . EDITOR ) ĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= Ġevent . getData ( Common Data Keys . VIRTUAL _ FILE ) ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġevent . getData ( Common Data Keys . PROJECT ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( editor Ġ!= Ġnull Ġ&& Ġproject Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġselecting Ġin Ġan Ġeditor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġeditor . document ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPsi Document Manager . getInstance ( project ). get Cached Psi File ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCopy Paste Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Contents ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Selection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost : 6 3 3 4 2 / api / file /${ getFile F qn ( file )} :${ editor . caret Model . logical Position . line Ġ+ Ġ 1 }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( virtual File Ġ!= Ġnull Ġ&& Ġproject Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCopy Paste Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Contents ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Selection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost : 6 3 3 4 2 / api / file /${ get Virtual File F qn ( virtual File , Ġproject )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetFile F qn ( file : ĠPsi File ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= Ġfile . virtual File ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( virtual File Ġ== Ġnull ) Ġfile . name Ġelse Ġget Virtual File F qn ( virtual File , Ġfile . project ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Virtual File F qn ( virtual File : ĠVirtual File , Ġproject : ĠProject ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( provider Ġin ĠVirtual File QualifiedName Provider . EP _ NAME . extension List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualified Name Ġ= Ġprovider . get QualifiedName ( project , Ġvirtual File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qualified Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġqualified Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= ĠProject File Index . getInstance ( project ). getModule For File ( virtual File , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( root Ġin ĠModule Root Manager . getInstance ( module ). content Roots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= ĠV fs Util Core . get RelativePath ( virtual File , Ġroot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( relative Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrelative Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= ĠV fs Util Core . get RelativePath ( virtual File , Ġproject . getBase Dir ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( relative Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrelative Path ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Type Ġ= ĠRoot Type . for File ( virtual File ) ĊĠĠĠĠĠĠĠ Ġif Ġ( root Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscratch Root Virtual File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV fs Util . find File By Io File ( File ( Scratch File Service . getInstance (). getRoot Path ( root Type )), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scratch Root Virtual File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscratch RelativePath Ġ= ĠV fs Util Core . get RelativePath ( virtual File , Ġscratch Root Virtual File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scratch RelativePath Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġscratch RelativePath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvirtual File . path ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( event : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġ} Ċ Ċ }