/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand Ġother Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . jetbrains . plugin . structure . intellij . resources Ċ Ċ import Ġcom . jetbrains . plugin . structure . base . utils . exists Ċ import Ġcom . jetbrains . plugin . structure . base . utils . inputStream Ċ import Ġjava . net . URL Ċ import Ġjava . nio . file . Path Ċ Ċ class ĠComp iled Modules Resource Resolver ( private Ġval Ġmodule Roots : ĠList < Path >) Ġ: ĠResource Resolver Ġ{ ĊĠ Ġoverride Ġfun Ġresolve Resource ( relative Path : ĠString , ĠbasePath : ĠPath ): ĠResource Resolver . Result Ġ{ ĊĠĠĠ Ġval Ġdefault Resolve Ġ= ĠDefault Resource Resolver . resolve Resource ( relative Path , ĠbasePath ) ĊĠĠĠ Ġif Ġ( default Resolve Ġ! is ĠResource Resolver . Result . NotFound ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġdefault Resolve ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Try Ġto Ġresolve Ġpath Ġagainst Ġmodule Ġroots . Ġ[ base ] Ġis Ġignored . ĊĠĠĠ Ġval Ġmodule Root RelativePath Ġ= Ġif Ġ( relative Path . startsWith ("/ ")) Ġ{ ĊĠĠĠĠĠ Ġrelative Path . trim Start ('/') ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ" META - INF /" Ġ+ Ġif Ġ( relative Path . startsWith ("./ ")) Ġrelative Path . substring After ("./ ") Ġelse Ġrelative Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( module Root Ġin Ġmodule Roots ) Ġ{ ĊĠĠĠĠĠ Ġval Ġfile Ġ= Ġmodule Root . resolve ( module Root RelativePath ) ĊĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠResource Resolver . Result . Found ( file , Ġfile . inputStream ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠResource Resolver . Result . Failed ( file , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠResource Resolver . Result . NotFound ĊĠ Ġ} Ċ } Ċ