/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . config Ċ Ċ import Ġcom . intellij . util . Path Util Ċ import Ġcom . intellij . util . xml b . Serialization Filter Ċ import Ġcom . intellij . util . xml b . Skip Defaults Serialization Filter Ċ import Ġcom . intellij . util . xml b . Xml Serializer Ċ import Ġorg . j dom . Data Conversion Exception Ċ import Ġorg . j dom . Element Ċ import Ġorg . j dom . Text Ċ import Ġorg . jetbrains . kotlin . arguments . COMPILER _ ARGUMENT S _ ELEMENT _ NAME Ċ import Ġorg . jetbrains . kotlin . arguments . Compiler Arguments Deserializer V 5 Ċ import Ġorg . jetbrains . kotlin . arguments . Compiler Arguments Serializer V 5 Ċ import Ġorg . jetbrains . kotlin . cli . common . arguments .* Ċ import Ġorg . jetbrains . kotlin . load . java . Jvm Ab i Ċ import Ġorg . jetbrains . kotlin . platform .* Ċ import Ġorg . jetbrains . kotlin . platform . impl . Fake K 2 Native Compiler Arguments Ċ import Ġorg . jetbrains . kotlin . platform . impl . Jvm Ide Platform Kind Ċ import Ġorg . jetbrains . kotlin . platform . js . is Js Ċ import Ġorg . jetbrains . kotlin . platform . jvm . J dk Platform Ċ import Ġorg . jetbrains . kotlin . platform . jvm . is Jvm Ċ import Ġorg . jetbrains . kotlin . platform . kon an .* Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . super classes Ċ Ċ fun ĠElement . getOption ( name : ĠString ) Ġ= Ġget Children (" option "). first OrNull Ġ{ Ġname Ġ== Ġit ?. getAttribute (" name ") ?. value Ġ} Ċ Ċ private Ġfun ĠElement . getOption Value ( name : ĠString ) Ġ= Ġget Option ( name )?. getAttribute (" value ") ?. value Ċ Ċ private Ġfun ĠElement . getOption Body ( name : ĠString ) Ġ= Ġget Option ( name )?. children ?. first OrNull () Ċ Ċ fun ĠTarget Platform . create Arguments ( init : Ġ( Common Compiler Arguments ). () Ġ-> ĠUnit Ġ= Ġ{} ): ĠCommon Compiler Arguments Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġis Common () Ġ-> ĠK 2 Metadata Compiler Arguments (). apply Ġ{ Ġinit () Ġ} ĊĠĠĠĠĠĠĠ Ġis Jvm () Ġ-> ĠK 2 JVM Compiler Arguments (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ( ds av vin ov ): Ġreview Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Target Ġ= Ġ( single () Ġas ? ĠJ dk Platform )?. target Version ?. description Ġ?: ĠJ vm Target . DEFAULT . description ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Js () Ġ-> ĠK 2 JS Compiler Arguments (). apply Ġ{ Ġinit () Ġ} ĊĠĠĠĠĠĠĠ Ġis Native () Ġ-> ĠFake K 2 Native Compiler Arguments (). apply Ġ{ Ġinit () Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unknown Ġplatform Ġ$ this ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġread V 1 Config ( element : ĠElement ): ĠKotlin Facet Settings Ġ{ ĊĠĠĠ Ġreturn ĠKotlin Facet Settings (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Project Settings Ġ= Ġelement . getOption Value (" use Project Settings ") ?. to Boolean () ĊĊĠĠĠĠĠĠĠ Ġval Ġversion Info Element Ġ= Ġelement . getOption Body (" version Info ") ĊĠĠĠĠĠĠĠ Ġval Ġtarget Platform Name Ġ= Ġversion Info Element ?. getOption Value (" target Platform Name ") ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Level Ġ= Ġversion Info Element ?. getOption Value (" language Level ") ĊĠĠĠĠĠĠĠ Ġval Ġapi Level Ġ= Ġversion Info Element ?. getOption Value (" api Level ") ĊĠĠĠĠĠĠĠ Ġval Ġtarget Platform Ġ= ĠCommon Platforms . all Simple Platforms . union ( set Of ( Common Platforms . default Common Platform )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . old F ashion ed Description Ġ== Ġtarget Platform Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠJ vm Ide Platform Kind . default Platform Ġ// ĠFIXME ( ds av vin ov ): Ġchoose Ġproper Ġdefault ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiler Info Element Ġ= Ġelement . getOption Body (" compiler Info ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiler Settings Ġ= ĠCompiler Settings (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Info Element ?. getOption Body (" compiler Settings ") ?. let Ġ{ Ġcompiler Settings Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠXml Serializer . deserialize Into ( this , Ġcompiler Settings Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommon Arguments Element Ġ= Ġcompiler Info Element ?. getOption Body ("_ common Compiler Arguments ") ĊĠĠĠĠĠĠĠ Ġval Ġj vm Arguments Element Ġ= Ġcompiler Info Element ?. getOption Body (" k 2 jvm Compiler Arguments ") ĊĠĠĠĠĠĠĠ Ġval Ġjs Arguments Element Ġ= Ġcompiler Info Element ?. getOption Body (" k 2 js Compiler Arguments ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiler Arguments Ġ= Ġtarget Platform . create Arguments Ġ{ Ġfree Args Ġ= Ġarray ListOf () Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommon Arguments Element ?. let Ġ{ ĠXml Serializer . deserialize Into ( compiler Arguments , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( compiler Arguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK 2 JVM Compiler Arguments Ġ-> Ġj vm Arguments Element ?. let Ġ{ ĠXml Serializer . deserialize Into ( compiler Arguments , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK 2 JS Compiler Arguments Ġ-> Ġjs Arguments Element ?. let Ġ{ ĠXml Serializer . deserialize Into ( compiler Arguments , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( language Level Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Arguments . language Version Ġ= Ġlanguage Level ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( api Level Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Arguments . apiVersion Ġ= Ġapi Level ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompiler Arguments . detect Version Auto Advance () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use Project Settings Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . use Project Settings Ġ= Ġuse Project Settings ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMigration Ġproblem Ġworkaround Ġfor Ġpre - 1 . 1 - beta Ġreleases Ġ( main ly Ġ 1 . 0 . 6 ) Ġ-> Ġ 1 . 1 - rc + ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProblem atic Ġcases : Ġ 1 . 1 - beta / 1 . 1 - beta 2 Ġ-> Ġ 1 . 1 - rc + Ġ( use Project Settings Ġgets Ġreset Ġto Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġhe uristic Ġdetect s Ġold Ġenough Ġconfigurations : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jvm Arguments Element Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . use Project Settings Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . compiler Settings Ġ= Ġcompiler Settings ĊĠĠĠĠĠĠĠ Ġthis . compiler Arguments Ġ= Ġcompiler Arguments ĊĠĠĠĠĠĠĠ Ġthis . target Platform Ġ= ĠIde Platform Kind . platform By Compiler Arguments ( compiler Arguments ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠTODO : ĠIntro duce Ġnew Ġversion Ġof Ġfacet Ġserialization . ĠSee Ġhttps :// yout rack . jetbrains . com / issue / KT - 3 8 2 3 5 Ċ // Ġ ĠThis Ġis Ġnecessary Ġto Ġavoid Ġhaving Ġtoo Ġmuch Ġcustom Ġlogic Ġfor Ġplatform Ġserialization . Ċ fun ĠElement . get Facet Platform By Configuration Element (): ĠTarget Platform Ġ{ ĊĠĠĠ Ġget AttributeValue (" all Platforms "). deserialize Target Platform By Component Platforms ()?. let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠ Ġ// Ġfailed Ġto Ġread Ġlist Ġof Ġall Ġplatforms . ĠF allback Ġto Ġlegacy Ġalgorithm ĊĠĠĠ Ġval Ġplatform Name Ġ= Ġget AttributeValue (" platform ") Ġ?: Ġreturn ĠDefault Ide Target Platform Kind Provider . default Platform ĊĊĠĠĠ Ġreturn ĠCommon Platforms . all Simple Platforms . first OrNull Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfirst , Ġlook Ġfor Ġexact Ġmatch Ġthrough Ġall Ġsimple Ġplatforms ĊĠĠĠĠĠĠĠ Ġit . old F ashion ed Description Ġ== Ġplatform Name ĊĠĠĠ Ġ} Ġ?: ĠCommon Platforms . default Common Platform . take If Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthen , Ġcheck Ġexact Ġmatch Ġfor Ġthe Ġdefault Ġcommon Ġplatform ĊĠĠĠĠĠĠĠ Ġit . old F ashion ed Description Ġ== Ġplatform Name ĊĠĠĠ Ġ} Ġ?: ĠNative Platforms . un specified Native Platform . take If Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġnone Ġof Ġthe Ġabove Ġsucceeded , Ġcheck Ġif Ġit 's Ġan Ġold - style Ġrecord Ġabout Ġnative Ġplatform Ġ( without Ġsuffix Ġwith Ġtarget Ġname ) ĊĠĠĠĠĠĠĠ Ġit . old F ashion ed Description . startsWith ( platform Name ) ĊĠĠĠ Ġ}. or Default () Ġ// Ġfinally , Ġfallback Ġto Ġthe Ġdefault Ġplatform Ċ } Ċ Ċ private Ġfun Ġread V 2 And Later Config ( ĊĠĠĠ Ġelement : ĠElement , ĊĠĠĠ Ġargument Reader : Ġ( Element , ĠCommon Tool Arguments ) Ġ-> ĠUnit Ġ= Ġ{ Ġel , Ġarg Ġ-> ĠXml Serializer . deserialize Into ( arg , Ġel ) Ġ} Ċ ): ĠKotlin Facet Settings Ġ{ ĊĠĠĠ Ġreturn ĠKotlin Facet Settings (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . getAttribute Value (" use Project Settings ") ?. let Ġ{ Ġuse Project Settings Ġ= Ġit . to Boolean () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtarget Platform Ġ= Ġelement . get Facet Platform By Configuration Element () ĊĠĠĠĠĠĠĠ Ġthis . target Platform Ġ= Ġtarget Platform ĊĠĠĠĠĠĠĠ Ġread Elements List ( element , Ġ" implements ", Ġ" implement ") ?. let Ġ{ Ġimplemented Module Names Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġread Elements List ( element , Ġ" depends On Module Names ", Ġ" depends On ") ?. let Ġ{ Ġdepends On Module Names Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġelement . getChild (" external System Test Tasks ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Run Tasks Ġ= Ġit . getChildren (" external System Test Task ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġ( it . content . first OrNull () Ġas ? ĠText )?. text Trim Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĠExternal System Test Run Task . fromString Representation ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Main Run Tasks Ġ= Ġit . getChildren (" external System Native Main Run Task ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġ( it . content . first OrNull () Ġas ? ĠText )?. text Trim Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĠExternal System Native Main Run Task . fromString Representation ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexternal System Run Tasks Ġ= Ġtest Run Tasks Ġ+ Ġnative Main Run Tasks ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelement . getChild (" source Sets ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġit . getChildren (" source Set ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set Names Ġ= Ġitems . map NotNull Ġ{ Ġ( it . content . first OrNull () Ġas ? ĠText )?. text Trim Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkind Ġ= Ġelement . getChild (" new M pp Model J ps Module Kind ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind Name Ġ= Ġ( it . content . first OrNull () Ġas ? ĠText )?. text Trim ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Module Kind . valueOf ( kind Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠKotlin Module Kind . DEFAULT ĊĠĠĠĠĠĠĠ Ġis Test Module Ġ= Ġelement . getAttribute Value (" is Test Module ") ?. to Boolean () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġexternal ProjectId Ġ= Ġelement . getAttribute Value (" external ProjectId ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġis H mpp Enabled Ġ= Ġelement . getAttribute (" is H mpp Project ") ?. boolean Value Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġpure Kotlin Source Folders Ġ= Ġelement . getAttribute Value (" pure Kotlin Source Folders ") ?. split ("; ") ?. toList () Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġelement . getChild (" compiler Settings ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Settings Ġ= ĠCompiler Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Serializer . deserialize Into ( compiler Settings !! , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelement . getChild ( COMPILER _ ARGUMENT S _ ELEMENT _ NAME )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Arguments Ġ= Ġtarget Platform . create Arguments Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree Args Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Arguments Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Reader ( it , Ġcompiler Arguments !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Arguments !!. detect Version Auto Advance () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproduction Output Path Ġ= Ġelement . getChild (" production Output Path ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Util . to System Dependent Name (( it . content . first OrNull () Ġas ? ĠText )?. text Trim ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ( compiler Arguments Ġas ? ĠK 2 JS Compiler Arguments )?. outputFile ĊĠĠĠĠĠĠĠ Ġtest Output Path Ġ= Ġelement . getChild (" test Output Path ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Util . to System Dependent Name (( it . content . first OrNull () Ġas ? ĠText )?. text Trim ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ( compiler Arguments Ġas ? ĠK 2 JS Compiler Arguments )?. outputFile ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġread Elements List ( element : ĠElement , Ġroot ElementName : ĠString , Ġelement Name : ĠString ): ĠList < String >? Ġ{ ĊĠĠĠ Ġelement . getChild ( root ElementName )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġit . getChildren ( element Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . map NotNull Ġ{ Ġ( it . content . first OrNull () Ġas ? ĠText )?. text Trim Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf NotNull (( it . content . first OrNull () Ġas ? ĠText )?. text Trim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun Ġread V 2 Config ( element : ĠElement ): ĠKotlin Facet Settings Ġ{ ĊĠĠĠ Ġreturn Ġread V 2 And Later Config ( element ) Ċ } Ċ Ċ private Ġfun Ġread Latest Config ( element : ĠElement ): ĠKotlin Facet Settings Ġ{ ĊĠĠĠ Ġreturn Ġread V 2 And Later Config ( element ) Ġ{ Ġel , Ġbean Ġ-> ĠCompiler Arguments Deserializer V 5 ( bean ). deserialize From ( el ) Ġ} Ċ } Ċ Ċ fun Ġdeserialize Facet Settings ( element : ĠElement ): ĠKotlin Facet Settings Ġ{ ĊĠĠĠ Ġval Ġversion Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . getAttribute (" version ") ?. intValue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠData Conversion Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ġ?: ĠKotlin Facet Settings . DEFAULT _ VERSION ĊĠĠĠ Ġreturn Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġread V 1 Config ( element ) ĊĠĠĠĠĠĠĠĠ 2 , Ġ 3 , Ġ 4 Ġ-> Ġread V 2 Config ( element ) ĊĠĠĠĠĠĠĠ ĠKotlin Facet Settings . CURRENT _ VERSION Ġ-> Ġread Latest Config ( element ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠKotlin Facet Settings () Ġ// ĠReset Ġfacet Ġconfiguration Ġif Ġversions Ġdon 't Ġmatch ĊĠĠĠ Ġ}. apply Ġ{ Ġthis . version Ġ= Ġversion Ġ} Ċ } Ċ Ċ fun ĠCommon Compiler Arguments . convert Paths To System In dependent () Ġ{ ĊĠĠĠ Ġplugin Class paths ?. forEach Indexed Ġ{ Ġindex , Ġs Ġ-> Ġplugin Class paths ! ![ index ] Ġ= ĠPath Util . to System In dependent Name ( s ) Ġ} ĊĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠK 2 JVM Compiler Arguments Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= ĠPath Util . to System In dependent Name ( destination ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath Ġ= ĠPath Util . to System In dependent Name ( classpath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Home Ġ= ĠPath Util . to System In dependent Name ( jdk Home ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Home Ġ= ĠPath Util . to System In dependent Name ( kotlin Home ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfriend Paths ?. forEach Indexed Ġ{ Ġindex , Ġs Ġ-> Ġfriend Paths ! ![ index ] Ġ= ĠPath Util . to System In dependent Name ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeclarations Output Path Ġ= ĠPath Util . to System In dependent Name ( declarations Output Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠK 2 JS Compiler Arguments Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile Ġ= ĠPath Util . to System In dependent Name ( outputFile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries Ġ= ĠPath Util . to System In dependent Name ( libraries ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠK 2 Metadata Compiler Arguments Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= ĠPath Util . to System In dependent Name ( destination ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath Ġ= ĠPath Util . to System In dependent Name ( classpath ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCompiler Settings . convert Paths To System In dependent () Ġ{ ĊĠĠĠ Ġscript Templates Classpath Ġ= ĠPath Util . to System In dependent Name ( script Templates Classpath ) ĊĠĠĠ Ġoutput Directory For Js Library Files Ġ= ĠPath Util . to System In dependent Name ( output Directory For Js Library Files ) Ċ } Ċ Ċ private Ġfun ĠK Class <* >. super Class () Ġ= Ġsuper classes . first OrNull Ġ{ Ġ! it . java . is Interface Ġ} Ċ Ċ private Ġfun ĠClass <* >. compute Normal Property Ordering (): ĠMap < String , ĠInt > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠLinkedHashMap < String , ĠInt >() ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġgenerate Sequence ( this ) Ġ{ Ġit . super class Ġ}. forEach Ġ{ Ġclazz Ġ-> ĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġclazz . declared Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . modifiers Ġand ĠModifier . STATIC Ġ!= Ġ 0 ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠpropertyName Ġ= Ġfield . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( propertyName . endsWith ( Jvm Ab i . DE LEG ATED _ PROPERTY _ NAME _ SUFFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpropertyName Ġ= ĠpropertyName . drop Last ( Jvm Ab i . DE LEG ATED _ PROPERTY _ NAME _ SUFFIX . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ propertyName ] Ġ= Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ private Ġval Ġall Normal Order ings Ġ= ĠHashMap < Class <* >, ĠMap < String , ĠInt >>() Ċ Ċ private Ġval ĠClass <* >. normal Ordering ĊĠĠĠ Ġget () Ġ= Ġsynchronized ( all Normal Order ings ) Ġ{ Ġall Normal Order ings . get Or Put ( this ) Ġ{ Ġcompute Normal Property Ordering () Ġ} Ġ} Ċ Ċ // ĠRe pl acing Ġfields Ġwith Ġdeleg ated Ġproperties Ġleads Ġto Ġunexpected Ġre ordering Ġof Ġentries Ġin Ġfacet Ġconfiguration ĠXML Ċ // ĠIt Ġhappens Ġdue Ġto ĠXml Serializer Ġusing Ġdifferent Ġorder ings Ġfor Ġfield - Ġand Ġmethod - based Ġaccessors Ċ // ĠThis Ġcode Ġrest ores Ġthe Ġoriginal Ġordering Ċ internal Ġfun ĠElement . restore Normal Ordering ( bean : ĠAny ) Ġ{ ĊĠĠĠ Ġval Ġnormal Ordering Ġ= Ġbean . java Class . normal Ordering ĊĠĠĠ Ġval Ġelements To Re order Ġ= Ġthis . getContent < Element > Ġ{ Ġit Ġis ĠElement Ġ&& Ġit . getAttribute (" name ") ?. value Ġin Ġnormal Ordering Ġ} ĊĠĠĠ Ġelements To Re order . sorted By Ġ{ Ġnormal Ordering [ it . getAttribute (" name ") ?. value !! ] Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġindex , Ġelement Ġ-> Ġelements To Re order [ index ] Ġ= Ġelement . clone () Ġ} Ċ } Ċ Ċ private Ġfun Ġbuild Child Element ( element : ĠElement , Ġtag : ĠString , Ġbean : ĠAny , Ġfilter : ĠSerialization Filter ): ĠElement Ġ{ ĊĠĠĠ Ġreturn ĠElement ( tag ). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠXml Serializer . serialize Into ( bean , Ġthis , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġrestore Normal Ordering ( bean ) ĊĠĠĠĠĠĠĠ Ġelement . add Content ( this ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠKotlin Facet Settings . write Config ( element : ĠElement ) Ġ{ ĊĠĠĠ Ġval Ġfilter Ġ= ĠSkip Defaults Serialization Filter () ĊĊĠĠĠ Ġ// ĠTODO : ĠIntro duce Ġnew Ġversion Ġof Ġfacet Ġserialization . ĠSee Ġhttps :// yout rack . jetbrains . com / issue / KT - 3 8 2 3 5 ĊĠĠĠ Ġ// Ġ ĠThis Ġis Ġnecessary Ġto Ġavoid Ġhaving Ġtoo Ġmuch Ġcustom Ġlogic Ġfor Ġplatform Ġserialization . ĊĠĠĠ Ġtarget Platform ?. let Ġ{ Ġtarget Platform Ġ-> ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" platform ", Ġtarget Platform . old F ashion ed Description ) ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" all Platforms ", Ġtarget Platform . serialize Component Platforms ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! use Project Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" use Project Settings ", Ġuse Project Settings . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsave Elements List ( element , Ġimplemented Module Names , Ġ" implements ", Ġ" implement ") ĊĠĠĠ Ġsave Elements List ( element , Ġdepends On Module Names , Ġ" depends On Module Names ", Ġ" depends On ") ĊĊĠĠĠ Ġif Ġ( source Set Names . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . add Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement (" source Sets "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set Names . map Ġ{ Ġadd Content ( Element (" source Set "). apply Ġ{ Ġadd Content ( it ) Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( kind Ġ!= ĠKotlin Module Kind . DEFAULT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . add Content ( Element (" new M pp Model J ps Module Kind "). apply Ġ{ Ġadd Content ( kind . name ) Ġ}) ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" is Test Module ", Ġis Test Module . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( external ProjectId . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" external ProjectId ", Ġexternal ProjectId ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( mpp Version . is H mpp ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" is H mpp Project ", Ġmp p Version . is H mpp . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( external System Run Tasks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . add Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement (" external System Test Tasks "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal System Run Tasks . forEach Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExternal System Test Run Task Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement (" external System Test Task "). apply Ġ{ Ġadd Content ( task . toString Representation ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExternal System Native Main Run Task Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement (" external System Native Main Run Task "). apply Ġ{ Ġadd Content ( task . toString Representation ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( pure Kotlin Source Folders . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" pure Kotlin Source Folders ", Ġpure Kotlin Source Folders . join ToString ("; ")) ĊĠĠĠ Ġ} ĊĠĠĠ Ġproduction Output Path ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġ( compiler Arguments Ġas ? ĠK 2 JS Compiler Arguments )?. outputFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . add Content ( Element (" production Output Path "). apply Ġ{ Ġadd Content ( Path Util . to System In dependent Name ( it )) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtest Output Path ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġ( compiler Arguments Ġas ? ĠK 2 JS Compiler Arguments )?. outputFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . add Content ( Element (" test Output Path "). apply Ġ{ Ġadd Content ( Path Util . to System In dependent Name ( it )) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcompiler Settings ?. let Ġ{ Ġcopy Bean ( it ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġit . convert Paths To System In dependent () ĊĠĠĠĠĠĠĠ Ġbuild Child Element ( element , Ġ" compiler Settings ", Ġit , Ġfilter ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠKotlin Facet Settings . write V 2 to V 4 Config ( element : ĠElement ) Ġ= Ġwrite Config ( element ). apply Ġ{ ĊĠĠĠ Ġcompiler Arguments ?. let Ġ{ Ġcopy Bean ( it ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġit . convert Paths To System In dependent () ĊĠĠĠĠĠĠĠ Ġval Ġcompiler Arguments Xml Ġ= Ġbuild Child Element ( element , Ġ" compiler Arguments ", Ġit , ĠSkip Defaults Serialization Filter ()) ĊĠĠĠĠĠĠĠ Ġcompiler Arguments Xml . drop Versions If Ne cessary ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠKotlin Facet Settings . write Latest Config ( element : ĠElement ) Ġ= Ġwrite Config ( element ). apply Ġ{ ĊĠĠĠ Ġcompiler Arguments ?. let Ġ{ Ġcopy Bean ( it ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġit . convert Paths To System In dependent () ĊĠĠĠĠĠĠĠ Ġval Ġcompiler Arguments Xml Ġ= ĠCompiler Arguments Serializer V 5 ( it ). serialize To ( element ) ĊĠĠĠĠĠĠĠ Ġcompiler Arguments Xml . drop Versions If Ne cessary ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġsave Elements List ( element : ĠElement , Ġelements List : ĠList < String >, Ġroot ElementName : ĠString , Ġelement Name : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( elements List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . add Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement ( root ElementName ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingle Module Ġ= Ġelements List . single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( single Module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Content ( single Module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements List . map Ġ{ Ġadd Content ( Element ( element Name ). apply Ġ{ Ġadd Content ( it ) Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCommon Compiler Arguments . detect Version Auto Advance () Ġ{ ĊĠĠĠ Ġauto Advance Language Version Ġ= Ġlanguage Version Ġ== Ġnull ĊĠĠĠ Ġauto Advance ApiVersion Ġ= ĠapiVersion Ġ== Ġnull Ċ } Ċ Ċ fun ĠElement . drop Versions If Ne cessary ( settings : ĠCommon Compiler Arguments ) Ġ{ ĊĠĠĠ Ġ// ĠDo Ġnot Ġserialize Ġlanguage / api Ġversion Ġif Ġthey Ġcorrespond Ġto Ġthe Ġdefault Ġlanguage Ġversion ĊĠĠĠ Ġif Ġ( settings . auto Advance Language Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Option (" language Version ") ?. detach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( settings . auto Advance ApiVersion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Option (" apiVersion ") ?. detach () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠKotlin Facet Settings . serialize Facet Settings ( element : ĠElement ) Ġ= Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠ 2 , Ġ 3 , Ġ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" version ", Ġversion . toString ()) ĊĠĠĠĠĠĠĠ Ġwrite V 2 to V 4 Config ( element ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . setAttribute (" version ", ĠKotlin Facet Settings . CURRENT _ VERSION . toString ()) ĊĠĠĠĠĠĠĠ Ġwrite Latest Config ( element ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġfun ĠTarget Platform . serialize Component Platforms (): ĠString Ġ{ ĊĠĠĠ Ġval Ġcomponent Platforms Ġ= Ġcomponent Platforms ĊĠĠĠ Ġval Ġcomponent Platform Names Ġ= Ġcomponent Platforms . map To ( ArrayList ()) Ġ{ Ġit . serialize ToString () Ġ} ĊĊĠĠĠ Ġ// Ġworkaround Ġfor Ġold ĠKotlin ĠIDE Ġplugins , ĠK T - 3 8 6 3 4 ĊĠĠĠ Ġif Ġ( component Platforms . any Ġ{ Ġit Ġis ĠNative Platform Ġ}) ĊĠĠĠĠĠĠĠ Ġcomponent Platform Names . add ( Native Platform Unspecified Target . legacy Serialize ToString ()) ĊĊĠĠĠ Ġreturn Ġcomponent Platform Names . sorted (). join ToString ("/") Ċ } Ċ Ċ private Ġfun ĠString ?. deserialize Target Platform By Component Platforms (): ĠTarget Platform ? Ġ{ ĊĠĠĠ Ġval Ġcomponent Platform Names Ġ= Ġthis ?. split ('/') ?. toSet ()?. take If Ġ{ Ġit . isNotEmpty () Ġ} Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġknown Component Platforms Ġ= ĠHashMap < String , ĠSimple Platform >() Ġ// Ġ" serialization Ġpresentation " Ġto Ġ" simple Ġplatform Ġname " ĊĊĠĠĠ Ġ// Ġfirst , Ġcollect Ġserialization Ġpresent ations Ġfor Ġevery Ġknown Ġsimple Ġplatform ĊĠĠĠ ĠCommon Platforms . all Simple Platforms ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . component Platforms Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġknown Component Platforms [ it . serialize ToString ()] Ġ= Ġit Ġ} ĊĊĠĠĠ Ġ// Ġnext , Ġadd Ġlegacy Ġaliases Ġfor Ġsome Ġof Ġthe Ġsimple Ġplatforms ; Ġex : Ġunspecified Native Platform ĊĠĠĠ ĠNative Platform Unspecified Target . let Ġ{ Ġknown Component Platforms [ it . legacy Serialize ToString ()] Ġ= Ġit Ġ} ĊĊĠĠĠ Ġval Ġcomponent Platforms Ġ= Ġcomponent Platform Names . map NotNull ( known Component Platforms :: get ). toSet () ĊĠĠĠ Ġreturn Ġwhen Ġ( component Platforms . size ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġempty Ġset Ġof Ġcomponent Ġplatforms Ġis Ġnot Ġallowed , Ġin Ġsuch Ġcase Ġfallback Ġto Ġlegacy Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ 1 Ġ-> ĠTarget Platform ( component Platforms ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġworkaround Ġfor Ġold ĠKotlin ĠIDE Ġplugins , ĠK T - 3 8 6 3 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Platforms . any Ġ{ Ġit Ġis ĠNative Platform Unspecified Target Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcomponent Platforms . any Ġ{ Ġit Ġis ĠNative Platform With Target Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Platform ( component Platforms Ġ- ĠNative Platform Unspecified Target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Platform ( component Platforms ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ