/* Ċ Ġ* ĠCopyright ĠL WJ GL . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicense Ġterms : Ġhttps :// www . lwjgl . org / license Ċ Ġ*/ Ċ package Ġorg . lwjgl . generator Ċ Ċ import Ġjava . io .* Ċ import Ġjava . nio . file .* Ċ Ċ const Ġval ĠHEADER Ġ= Ġ""" /* Ċ Ġ* ĠCopyright ĠL WJ GL . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicense Ġterms : Ġhttps :// www . lwjgl . org / license Ċ Ġ* ĠM ACH INE ĠGENERATED ĠFILE , ĠDO ĠNOT ĠEDIT Ċ Ġ*/ Ċ """ Ċ Ċ // ĠCharacter Ġsequence Ġused Ġfor Ġalignment Ċ const Ġval Ġt Ġ= Ġ" ĠĠĠ Ġ" Ġ// Ġ 4 Ġspaces Ċ Ċ class ĠP reamble Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠNative Define ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Includes : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY _ IMPORT S Ġ= ĠArrayList < String >( 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY _ DIRECT IV ES Ġ= ĠArrayList < Native Define >( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġjava Imports : ĠMutable List < String > Ġ= ĠEMPTY _ IMPORT S ĊĊĠĠĠ Ġprivate Ġvar Ġnative Imports : ĠMutable List < String > Ġ= ĠEMPTY _ IMPORT S ĊĠĠĠ Ġprivate Ġvar Ġnative Directives : ĠMutable List < Native Define > Ġ= ĠEMPTY _ DIRECT IV ES ĊĊĠĠĠ Ġinternal Ġval Ġhas Native Directives Ġget () Ġ= Ġnative Imports . isNotEmpty () Ġ|| Ġnative Directives . isNotEmpty () ĊĊĠĠĠ Ġfun Ġjava Import ( var arg Ġclasses : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( java Imports Ġ=== ĠEMPTY _ IMPORT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Imports Ġ= ĠArrayList ( classes . size ) ĊĊĠĠĠĠĠĠĠ Ġclasses . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Imports . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnative Import ( var arg Ġfiles : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( native Imports Ġ=== ĠEMPTY _ IMPORT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Imports Ġ= ĠArrayList ( files . size ) ĊĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Imports . add ( if Ġ( it . startsWith ('< ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" $ it \" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnative Directive ( expression : ĠString , Ġbefore Includes : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( native Directives Ġ=== ĠEMPTY _ DIRECT IV ES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Directives Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġnative Directives . add ( Native Define ( expression , Ġbefore Includes )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint Java ( writer : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( java Imports . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfun ĠList < String >. print () Ġ= Ġthis . forEach Ġ{ Ġwriter . println (" import Ġ$ it ; ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstatic Ġ= Ġjava Imports . filter Ġ{ Ġit . startsWith (" static Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! static . isEmpty () Ġ&& Ġstatic . size Ġ< Ġjava Imports . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSepar ate Ġplain Ġfrom Ġstatic Ġimports ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Imports . filter Ġ{ Ġ! it . startsWith (" static Ġ") Ġ}. print () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatic . print () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Imports . print () ĊĊĠĠĠĠĠĠĠ Ġwriter . println () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġprint Native ( writer : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnative Directives . filter Ġ{ Ġit . before Includes Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ( it . expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . println ("# include Ġ\" common _ tools . h \" ") ĊĠĠĠĠĠĠĠ Ġnative Imports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("# include Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnative Directives . filter Ġ{ Ġ! it . before Includes Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ( it . expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġval ĠJNI _ UNDER SCORE _ ESCAPE _ PATTERN Ġ= Ġ"_ ". to Regex () Ċ Ċ internal Ġval ĠString . as JN IN ame ĊĠĠĠ Ġget () Ġ= Ġif Ġ( this . indexOf ('_ ') Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġthis . replace ( JNI _ UNDER SCORE _ ESCAPE _ PATTERN , Ġ"_ 1 ") Ċ Ċ enum Ġclass ĠAccess ( val Ġmodifier : ĠString ) Ġ{ ĊĠĠĠ ĠPUBLIC (" public Ġ"), ĊĠĠĠ ĠINTERNAL (""), ĊĠĠĠ ĠPRIVATE (" private Ġ") Ċ } Ċ Ċ @ Dsl Marker Ċ annotation Ġclass ĠGenerator Dsl Marker Ċ Ċ @ Generator Dsl Marker Ċ abstract Ġclass ĠGenerator Target ( ĊĠĠĠ Ġval Ġmodule : ĠModule , ĊĠĠĠ Ġval ĠclassName : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLIN KS Ġ= ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ p { java Java Identifier Start }\ p { java Java Identifier Part } *( ?:\ .\ p { java Java Identifier Start }\ p { java Java Identifier Part } *) * """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ p { java Java Identifier Part } + """ Ġ// ĠMust Ġmatch Ġtokens Ġlike ĠGL _ 3 _ BYTES Ġ( the Ġlink Ġis Ġ# 3 _ BYTES ) ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ Ġ( JAVA , ĠN ATIVE ) Ġ-> Ġ""" ($ JAVA )? (? <! &) ([ @ \\ ]? #{ 1 , 2 }) ($ NATIVE +( ?:\ (( ?: (?: , Ġ) ?$ JAVA )* \ )) ?) """. to Regex () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Source FileName (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠN asty Ġhack Ġto Ġretrieve Ġthe Ġsource Ġfile Ġthat Ġdefines Ġthis Ġtemplate , Ġwithout Ġhaving Ġto Ġspecify Ġit Ġexp lict ly . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġenables Ġincremental Ġbuilds Ġto Ġwork Ġeven Ġwith Ġarbitrary Ġfile Ġnames Ġor Ġwhen Ġmultiple Ġtemplates Ġare Ġbundled ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġsame Ġfile Ġ( e . g . ĠExtension Flags ). ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġt . stack Trace . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . className . startsWith (" org . lwjgl . generator .") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . fileName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . endsWith (". kt ") Ġ&& Ġ!( this Ġis ĠNative Class Ġ&& Ġit . endsWith (" Binding . kt ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġsource File Ġ= Ġget Source FileName () ĊĠĠĠ Ġinternal Ġopen Ġfun ĠgetLast Modified ( root : ĠString ): ĠLong Ġ= ĠPaths . get ( root , Ġsource File ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Files . is Regular File ( it )) Ġit Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġsource Ġfile Ġfor Ġtemplate Ġ${ module . package Kotlin }. $ className Ġdoes Ġnot Ġexist Ġ($ it ). ") ĊĠĠĠ Ġ}. lastModified ĊĊĠĠĠ Ġval ĠpackageName Ġget () Ġ= Ġmodule . packageName ĊĊĠĠĠ Ġvar Ġaccess Ġ= ĠAccess . PUBLIC ĊĠĠĠĠĠĠĠ Ġset ( access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( access Ġ=== ĠAccess . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The Ġprivate Ġaccess Ġmodifier Ġis Ġillegal Ġon Ġtop - level Ġclasses .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġaccess ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdocumentation : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsee : ĠArray < String >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsince : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġinternal Ġval Ġp reamble Ġ= ĠP reamble () ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠGenerator Target > ĠT . java Import ( var arg Ġclasses : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġp reamble . java Import (* classes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠGenerator Target > ĠT . native Directive ( expression : ĠString , Ġbefore Includes : ĠBoolean Ġ= Ġfalse ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġp reamble . native Directive ( expression , Ġbefore Includes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġlinks From Regex ( pattern : ĠString ) Ġ= Ġpattern . to Regex (). let Ġ{ Ġregex Ġ-> ĊĠĠĠĠĠĠĠ ĠGenerator . tokens [ module ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġif Ġ( regex . matches ( it . key )) Ġit . key Ġelse Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ# ", Ġprefix Ġ= Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . length Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġmatch Ġany Ġtokens Ġwith Ġregex : Ġ$ pattern ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun ĠInt . x ( other : ĠInt ) Ġ= Ġthis Ġ* Ġother ĊĊĠĠĠ Ġprotected Ġfun ĠPrintWriter . generate Java P reamble () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( HEADER ) ĊĠĠĠĠĠĠĠ Ġprintln (" package Ġ$ packageName ;\ n ") ĊĊĠĠĠĠĠĠĠ Ġp reamble . print Java ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdocumentation Ġ= Ġthis @ Generator Target . documentation ĊĠĠĠĠĠĠĠ Ġif Ġ( documentation Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( process Documentation ( documentation ). to Java Doc ( indentation Ġ= Ġ"", Ġsee Ġ= Ġsee , Ġsince Ġ= Ġsince )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠPrintWriter . generate Java () ĊĊĠĠĠ Ġopen Ġfun Ġprocess Documentation ( documentation : ĠString , Ġforce Package : ĠBoolean Ġ= Ġfalse ): ĠString Ġ= Ġprocess Documentation ( documentation , Ġ"", Ġ"", Ġforce Package ) ĊĊĠĠĠ Ġopen Ġfun Ġget Field Link ( field : ĠString ): ĠString ? Ġ= Ġnull ĊĠĠĠ Ġopen Ġfun Ġget Method Link ( method : ĠString ): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġfun Ġprocess Documentation ( documentation : ĠString , Ġprefix Constant : ĠString , Ġprefix Method : ĠString , Ġforce Package : ĠBoolean Ġ= Ġfalse ) Ġ= Ġdocumentation . replace ( LIN KS ) Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġ# Ġ- Ġnormal Ġlink , Ġapply Ġprefix ĊĠĠĠĠĠĠĠ Ġ## Ġ- Ġcustom Ġlink , Ġdo Ġnot Ġtransform ĊĠĠĠĠĠĠĠ Ġ@ # Ġor Ġ@ ## Ġ- Ġlike Ġabove , Ġbut Ġadd Ġ" see Ġ" Ġin Ġfront ĊĠĠĠĠĠĠĠ Ġ\# Ġ- Ġescape , Ġreplace Ġwith Ġ# ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġlink Method Ġ= Ġmatch . group Values [ 2 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( link Method [ 0 ] Ġ== Ġ'\\ ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . value . replace ("\\ # ", Ġ"# ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠclassName Ġ= Ġmatch . group Values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclass Element Ġ= Ġmatch . group Values [ 3 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( class Element Ġ== Ġ" NULL ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġ"{ @ code ĠNULL }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Type Ġ= Ġif Ġ( class Element . endsWith (' ) ')) ĠLink Type . METHOD Ġelse ĠLink Type . FIELD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprefix Ġ= Ġif Ġ( link Type Ġ=== ĠLink Type . FIELD ) Ġprefix Constant Ġelse Ġprefix Method ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Method . count Ġ{ Ġit Ġ== Ġ'#' Ġ}. let Ġ{ Ġhashes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hashes Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( className . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualified Link Ġ= Ġif Ġ( link Type Ġ=== ĠLink Type . FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Field Link ( class Element ) Ġ?: ĠGenerator . tokens [ module ] ! ![ class Element ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Element . substring ( 0 , Ġclass Element . lastIndexOf (' (' )). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Method Link ( it ) Ġ?: ĠGenerator . functions [ module ] ! ![ it ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qualified Link Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Index Ġ= Ġqualified Link . indexOf ('# ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġqualified Link . substring ( 0 , Ġhash Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( force Package ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġ"$ packageName .$ className " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġqualified Link . substring ( hash Index Ġ+ Ġ 1 , Ġqualified Link . length Ġ- Ġif Ġ( link Type Ġ=== ĠLink Type . FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Element . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Element . lastIndexOf (' (' ) Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( module Ġ!== ĠModule . VULKAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġresolve Ġlink : Ġ${ match . value } Ġin Ġ${ this . className }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( class Element . startsWith ( prefix )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Element Ġ= Ġclass Element . substring ( prefix . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Type . create ( this . className , Ġprefix , ĠclassName , Ġclass Element , Ġif Ġ( this Ġis ĠNative Class ) Ġthis . postfix Ġelse Ġ"", Ġcustom Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( hashes Ġ== Ġ 2 Ġ&& ĠclassName . isEmpty () Ġ&& Ġlink Type Ġ=== ĠLink Type . FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ @ link Ġ$ class Element }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unsupported Ġlink Ġsyntax : Ġ${ match . value } Ġin Ġ${ this . className }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Method [ 0 ] Ġ== Ġ'@ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" see Ġ$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠLink Type Ġ{ ĊĠĠĠĠĠĠĠ ĠFIELD Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( source Name : ĠString , Ġsource Prefix : ĠString , ĠclassName : ĠString ?, Ġclass Element : ĠString , Ġpostfix : ĠString , Ġcustom : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġif Ġ( className Ġ== Ġnull Ġ|| ĠclassName Ġ== Ġsource Name ) Ġ"" Ġelse ĠclassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġif Ġ( custom ) Ġ"" Ġelse Ġsource Prefix ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"{ @ link Ġ$ source #$ prefix $ class Element ${ if Ġ( custom Ġ|| Ġprefix . isEmpty ()) Ġ"" Ġelse Ġ" Ġ$ class Element " }}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠMETHOD Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( source Name : ĠString , Ġsource Prefix : ĠString , ĠclassName : ĠString ?, Ġclass Element : ĠString , Ġpostfix : ĠString , Ġcustom : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġif Ġ( className Ġ== Ġnull Ġ|| ĠclassName Ġ== Ġsource Name ) Ġ"" Ġelse ĠclassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġif Ġ( custom ) Ġ"" Ġelse Ġsource Prefix ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparentheses Ġ= Ġclass Element . indexOf (' (' ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent heses Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Invalid Ġmethod Ġlink : Ġ$ this #$ prefix $ class Element ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġclass Element . substring ( 0 , Ġparentheses ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Params Ġ= Ġparentheses Ġ< Ġclass Element . length Ġ- Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"{ @ link Ġ$ source #$ prefix $ name ${ if Ġ( has Params ) Ġclass Element . substring ( parent heses ) Ġelse Ġ"" }${ when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Params Ġ|| Ġcustom Ġ|| Ġprefix . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Ġ$ name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} }}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}; ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġcreate ( source Name : ĠString , Ġsource Prefix : ĠString , ĠclassName : ĠString ?, Ġclass Element : ĠString , Ġpostfix : ĠString , Ġcustom : ĠBoolean ): ĠString ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ abstract Ġclass ĠGenerator Target Native ( ĊĠĠĠ Ġmodule : ĠModule , ĊĠĠĠ ĠclassName : ĠString , ĊĠĠĠ Ġval Ġnative Sub Path : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠGenerator Target ( module , ĠclassName ) Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġnative FileName ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ this . packageName . replace ('.', Ġ'_ ') }_${ this . className }" ĊĊĠĠĠ Ġinternal Ġval Ġnative FileName JNI Ġ= ĠpackageName ĊĠĠĠĠĠĠĠ Ġ. split To Sequence ('.') ĊĠĠĠĠĠĠĠ Ġ. plus ( className ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . as JN IN ame Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString ("_ ") ĊĊĠĠĠ Ġopen Ġval Ġskip Native Ġ= Ġfalse ĊĠĠĠ Ġvar Ġcpp Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠGenerator Target Native > ĠT . native Import ( var arg Ġfiles : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġp reamble . native Import (* files ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠPrintWriter . generate Native P reamble () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( HEADER ) ĊĠĠĠĠĠĠĠ Ġp reamble . print Native ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠPrintWriter . generate Native () Ċ Ċ } Ċ Ċ // Ġ-------------------------------- ---- Ċ Ċ fun Ġpackage Info ( ĊĠĠĠ Ġmodule : ĠModule , ĊĠĠĠ Ġdocumentation : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġval Ġpi Ġ= Ġobject Ġ: ĠGenerator Target ( module , Ġ" package - info ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠPrintWriter . generate Java () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( HEADER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( process Documentation ( documentation , Ġforce Package Ġ= Ġtrue ). to Java Doc ( indentation Ġ= Ġ"", Ġsee Ġ= Ġsee , Ġsince Ġ= Ġsince )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (""" @ org . lwjgl . system . Nonnull Default Ċ package Ġ$ packageName ; Ċ """) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠGenerator . register ( pi ) Ċ }