/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġ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 . intellij . psi . impl Ċ Ċ import Ġcom . intellij . code Insight . Java Module System Ex Ċ import Ġcom . intellij . code Insight . Java Module System Ex . Error With Fixes Ċ import Ġcom . intellij . code Insight . daemon . Java Error Messages Ċ import Ġcom . intellij . code Insight . daemon . impl . analysis . Java Module Graph Util Ċ import Ġcom . intellij . code Insight . daemon . impl . quick fix . Add Required Module Fix Ċ import Ġcom . intellij . openapi . roots . Project File Index Ċ import Ġcom . intellij . openapi . vfs . j rt . J rt FileSystem Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . light . Light Java Module Ċ import Ġcom . intellij . psi . util . Psi Util Ċ Ċ class ĠJava Platform Module System Ġ: ĠJava Module System Ex Ġ{ ĊĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" Java ĠPlatform ĠModule ĠSystem " ĊĊĠ Ġoverride Ġfun Ġis Accessible ( target : ĠPsi Package , Ġplace : ĠPsi Element ) Ġ= Ġcheck Access ( target , Ġplace , Ġtrue ) Ġ== Ġnull ĊĠ Ġoverride Ġfun Ġis Accessible ( target : ĠPsi Class , Ġplace : ĠPsi Element ) Ġ= Ġcheck Access ( target , Ġplace , Ġtrue ) Ġ== Ġnull ĊĊĠ Ġoverride Ġfun Ġcheck Access ( target : ĠPsi Package , Ġplace : ĠPsi Element ) Ġ= Ġcheck Access ( target , Ġplace , Ġfalse ) ĊĠ Ġoverride Ġfun Ġcheck Access ( target : ĠPsi Class , Ġplace : ĠPsi Element ) Ġ= Ġcheck Access ( target , Ġplace , Ġfalse ) ĊĊĠ Ġprivate Ġfun Ġcheck Access ( target : ĠPsi Class , Ġplace : ĠPsi Element , Ġquick : ĠBoolean ): ĠError With Fixes ? Ġ{ ĊĠĠĠ Ġval Ġuse File Ġ= Ġplace . containing File ?. original File ĊĠĠĠ Ġif Ġ( use File Ġ!= Ġnull Ġ&& ĠPsi Util . is Language Level 9 Or High er ( use File )) Ġ{ ĊĠĠĠĠĠ Ġval Ġtarget File Ġ= Ġtarget . containing File ĊĠĠĠĠĠ Ġif Ġ( target File Ġis ĠPsi Class Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Access ( target File , Ġuse File , Ġtarget File . packageName , Ġquick ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck Access ( target : ĠPsi Package , Ġplace : ĠPsi Element , Ġquick : ĠBoolean ): ĠError With Fixes ? Ġ{ ĊĠĠĠ Ġval Ġuse File Ġ= Ġplace . containing File ?. original File ĊĠĠĠ Ġif Ġ( use File Ġ!= Ġnull Ġ&& ĠPsi Util . is Language Level 9 Or High er ( use File )) Ġ{ ĊĠĠĠĠĠ Ġval Ġuse V File Ġ= Ġuse File . virtual File ĊĠĠĠĠĠ Ġif Ġ( use V File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠProject File Index . getInstance ( use File . project ) ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġindex . getModule For File ( use V File ) ĊĠĠĠĠĠĠĠ Ġif Ġ( module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġtest Ġ= Ġindex . isIn Test Source Content ( use V File ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdirs Ġ= Ġtarget . get Directories ( module . getModule With Dependencies And Libraries Scope ( test )) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( dirs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( quick ) ĠERR Ġelse ĠError With Fixes ( Java Error Messages . message (" package . not . found ", Ġtarget . qualified Name )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġcheck Access ( dirs [ 0 ], Ġuse File , Ġtarget . qualified Name , Ġquick ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( error Ġ== Ġnull Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirs . size Ġ> Ġ 1 Ġ&& Ġdirs . as Sequence (). drop ( 1 ). any Ġ{ Ġcheck Access ( it , Ġuse File , Ġtarget . qualified Name , Ġtrue ) Ġ== Ġnull Ġ}) Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġval ĠERR Ġ= ĠError With Fixes ("- ") ĊĊĠ Ġprivate Ġfun Ġcheck Access ( target : ĠPsi FileSystem Item , Ġplace : ĠPsi FileSystem Item , ĠpackageName : ĠString , Ġquick : ĠBoolean ): ĠError With Fixes ? Ġ{ ĊĠĠĠ Ġval Ġtarget Module Ġ= ĠJava Module Graph Util . find Descriptor By Element ( target ) ĊĠĠĠ Ġval Ġuse Module Ġ= ĠJava Module Graph Util . find Descriptor By Element ( place ) ĊĊĠĠĠ Ġif Ġ( target Module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( target Module . original Element Ġ== Ġuse Module ?. original Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( use Module Ġ== Ġnull Ġ&& Ġtarget Module . containing File ?. virtual File ?. file System Ġ! is ĠJ rt FileSystem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ Ġ// Ġa Ġtarget Ġis Ġnot Ġon Ġthe Ġmandatory Ġmodule Ġpath ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(!( target Module Ġis ĠLight Java Module Ġ|| ĠJava Module Graph Util . exports ( target Module , ĠpackageName , Ġuse Module ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( quick ) ĠERR ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( use Module Ġ== Ġnull ) ĠError With Fixes ( Java Error Messages . message (" module . access . from . unnamed ", ĠpackageName , Ġtarget Module . name )) ĊĠĠĠĠĠĠĠĠĠ Ġelse ĠError With Fixes ( Java Error Messages . message (" module . access . from . named ", ĠpackageName , Ġtarget Module . name , Ġuse Module . name )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( use Module Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(!( use Module . name Ġ== ĠPsi Java Module . JAVA _ BASE Ġ|| ĠJava Module Graph Util . reads ( use Module , Ġtarget Module ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( quick ) ĠERR Ġelse ĠError With Fixes ( ĊĠĠĠĠĠĠĠĠĠ ĠJava Error Messages . message (" module . access . does . not . read ", ĠpackageName , Ġtarget Module . name , Ġuse Module . name ), ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( Add Required Module Fix ( use Module , Ġtarget Module . name ))) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( use Module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġif Ġ( quick ) ĠERR Ġelse ĠError With Fixes ( Java Error Messages . message (" module . access . to . unnamed ", ĠpackageName , Ġuse Module . name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} Ċ }