/* Ċ Ġ* ĠCopyright Ġ 2 0 1 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 Ġtest Ċ Ċ import Ġjava . net . URL Ċ import Ġjava . util . jar . Attributes Ċ import Ġjava . util . jar . Manifest Ċ Ċ val ĠLIB R ARIES Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" kotlin - stdlib ", ĊĠĠĠĠĠĠĠ Ġ" kotlin - stdlib - common ", ĊĠĠĠĠĠĠĠ Ġ" kotlin - stdlib - jdk 7 ", ĊĠĠĠĠĠĠĠ Ġ" kotlin - stdlib - jdk 8 ", ĊĠĠĠĠĠĠĠ Ġ" kotlin - reflect ", ĊĠĠĠĠĠĠĠ Ġ" kotlin - script - runtime " Ċ ) Ċ Ċ const Ġval ĠK OT LIN _ VERSION Ġ= Ġ" Kotlin - Version " Ċ const Ġval ĠK OT LIN _ RUNTIME _ COMPONENT Ġ= Ġ" Kotlin - Runtime - Component " Ċ const Ġval ĠK OT LIN _ RUNTIME _ COMPONENT _ VALUE Ġ= Ġ" Main " Ċ val ĠK OT LIN _ VERSION _ VALUE Ġ= Ġwith ( Kotlin Version . CURRENT ) Ġ{ Ġ"$ major .$ minor " Ġ} Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġimplementation Titles Ġ= Ġarray ListOf < String >() ĊĊĠĠĠ Ġval Ġversion Values Ġ= Ġhash Map Of < URL , ĠString ?> () ĊĠĠĠ Ġval Ġruntime Component Values Ġ= Ġhash Map Of < URL , ĠString ?> () ĊĊĠĠĠ Ġfor Ġ( resource Ġin Ġobject Ġ{} . java Class . class Loader . getResources (" META - INF / MAN IFEST . MF ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanifest Ġ= Ġresource . open Stream (). use (:: Manifest ). main Attributes ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġmanifest . getValue ( Attributes . Name . IMPLEMENT ATION _ TITLE ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠ Ġif Ġ(" kotlin " Ġ! in Ġtitle . toLowerCase ()) Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġimplementation Titles . add ( title ) ĊĠĠĠĠĠĠĠ Ġversion Values [ resource ] Ġ= Ġmanifest . getValue ( K OT LIN _ VERSION ) ĊĠĠĠĠĠĠĠ Ġruntime Component Values [ resource ] Ġ= Ġmanifest . getValue ( K OT LIN _ RUNTIME _ COMPONENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġerrors Ġ= ĠStringBuilder () ĊĊĠĠĠ Ġval Ġunchecked Libraries Ġ= ĠLIB R ARIES Ġ- Ġimplementation Titles ĊĠĠĠ Ġif Ġ( unchecked Libraries . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġerrors . append ln (" These Ġlibraries Ġare Ġnot Ġfound Ġin Ġthe Ġdependencies Ġof Ġthis Ġtest Ġproject , Ġthus Ġtheir Ġmanifest s Ġcannot Ġbe Ġchecked . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Please Ġensure Ġthey Ġare Ġlisted Ġin Ġthe Ġ< dependencies > Ġsection Ġin Ġthe Ġcorresponding Ġpom . xml :\ n $ unchecked Libraries ") ĊĠĠĠĠĠĠĠ Ġerrors . append ln ("( all Ġfound Ġlibraries : Ġ$ implementation Titles )") ĊĠĠĠĠĠĠĠ Ġerrors . append ln () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender Entry ( entry : ĠMap . Entry < URL , ĠString ?> ) Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( url , Ġvalue ) Ġ= Ġentry ĊĠĠĠĠĠĠĠ Ġappend ( url ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġappend (" Ġ( actual Ġvalue : Ġ$ value )") ĊĠĠĠĠĠĠĠ Ġelse Ġappend (" Ġ( attribute Ġis Ġnot Ġfound )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġincorrect Version Values Ġ= Ġversion Values . filter Values Ġ{ Ġit Ġ!= ĠK OT LIN _ VERSION _ VALUE Ġ} ĊĠĠĠ Ġif Ġ( incorrect Version Values . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġerrors . append ln (" Manifest s Ġat Ġthese Ġlocations Ġdo Ġnot Ġhave Ġthe Ġcorrect Ġvalue Ġof Ġthe Ġ$ K OT LIN _ VERSION Ġattribute Ġ($ K OT LIN _ VERSION _ VALUE ). Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Please Ġensure Ġthat Ġkotlin _ language _ version Ġin Ġlibraries / build . gradle Ġcorresponds Ġto Ġthe Ġvalue Ġin Ġkotlin . Kotlin Version :") ĊĠĠĠĠĠĠĠ Ġincorrect Version Values . entries . join To ( errors , Ġ"\ n ", Ġtransform Ġ= Ġ:: render Entry ) ĊĠĠĠĠĠĠĠ Ġerrors . append ln () ĊĠĠĠĠĠĠĠ Ġerrors . append ln () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġincorrect Runtime Component Values Ġ= Ġruntime Component Values . filter Values Ġ{ Ġit Ġ!= ĠK OT LIN _ RUNTIME _ COMPONENT _ VALUE Ġ} ĊĠĠĠ Ġif Ġ( incorrect Runtime Component Values . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġerrors . append ln (" Manifest s Ġat Ġthese Ġlocations Ġdo Ġnot Ġhave Ġthe Ġcorrect Ġvalue Ġof Ġthe Ġ$ K OT LIN _ RUNTIME _ COMPONENT Ġattribute Ġ($ K OT LIN _ RUNTIME _ COMPONENT _ VALUE ): ") ĊĠĠĠĠĠĠĠ Ġincorrect Runtime Component Values . entries . join To ( errors , Ġ"\ n ", Ġtransform Ġ= Ġ:: render Entry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( errors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠM uted : Ġ# KT - 3 5 7 7 6 ĊĠĠĠĠĠĠĠ Ġ// Ġthrow ĠAssertionError ( errors ) ĊĠĠĠ Ġ} Ċ } Ċ