99import  fish .cichlidmc .pistonmetaparser .version .library .Classifier ;
1010import  fish .cichlidmc .pistonmetaparser .version .library .Library ;
1111import  fish .cichlidmc .pistonmetaparser .version .library .Natives ;
12+ import  org .jetbrains .annotations .Nullable ;
1213
1314import  java .io .IOException ;
1415import  java .nio .file .Path ;
1516import  java .util .ArrayList ;
1617import  java .util .List ;
1718import  java .util .Optional ;
19+ import  java .util .stream .Collectors ;
1820import  java .util .stream .Stream ;
1921
2022public  final  class  PomGenerator  {
@@ -26,10 +28,25 @@ public static void generate(FullVersion version, Distribution dist, Path output)
2628				new  XmlBuilder .XmlElement ("groupId" , "net.minecraft" ),
2729				new  XmlBuilder .XmlElement ("artifactId" , "minecraft-"  + dist .name ),
2830				new  XmlBuilder .XmlElement ("version" , VERSION_PLACEHOLDER ),
29- 				new  XmlBuilder .XmlElement ("dependencies" , version . libraries . stream (). flatMap ( PomGenerator :: makeDependencyElements ). toList ( ))
31+ 				new  XmlBuilder .XmlElement ("dependencies" , makeDependencyElements ( version ,  dist ))
3032		))).write (output );
3133	}
3234
35+ 	private  static  List <XmlBuilder .XmlElement > makeDependencyElements (FullVersion  version , Distribution  dist ) {
36+ 		List <XmlBuilder .XmlElement > elements  = version .libraries .stream ()
37+ 				.flatMap (PomGenerator ::makeDependencyElements )
38+ 				// explicitly collect to a mutable list 
39+ 				.collect (Collectors .toCollection (ArrayList ::new ));
40+ 
41+ 		// when merged, add a dependency on distmarker 
42+ 		if  (dist  == Distribution .MERGED ) {
43+ 			// I don't mind hardcoding this version here because it will hopefully never be updated again 
44+ 			elements .add (makeDependencyElement ("fish.cichlidmc" , "distribution-marker" , "1.0.1" , null ));
45+ 		}
46+ 
47+ 		return  elements ;
48+ 	}
49+ 
3350	private  static  Stream <XmlBuilder .XmlElement > makeDependencyElements (Library  library ) {
3451		// check rules first 
3552		if  (!Rule .test (library .rules , Features .EMPTY ))
@@ -38,13 +55,13 @@ private static Stream<XmlBuilder.XmlElement> makeDependencyElements(Library libr
3855		List <XmlBuilder .XmlElement > elements  = new  ArrayList <>();
3956		Optional <Artifact > artifact  = library .artifact ;
4057		if  (artifact .isPresent ()) {
41- 			elements .add (makeDependencyXml (library .name ));
58+ 			elements .add (makeDependencyElement (library .name ));
4259		}
4360
4461		Optional <Classifier > classifier  = library .natives .flatMap (Natives ::choose );
4562		if  (classifier .isPresent ()) {
4663			String  notation  = library .name  + ':'  + classifier .get ().name ;
47- 			elements .add (makeDependencyXml (notation ));
64+ 			elements .add (makeDependencyElement (notation ));
4865		}
4966
5067		if  (elements .isEmpty ()) {
@@ -54,17 +71,24 @@ private static Stream<XmlBuilder.XmlElement> makeDependencyElements(Library libr
5471		return  elements .stream ();
5572	}
5673
57- 	private  static  XmlBuilder .XmlElement  makeDependencyXml (String  notation ) {
74+ 	private  static  XmlBuilder .XmlElement  makeDependencyElement (String  notation ) {
5875		String [] split  = notation .split (":" );
59- 		XmlBuilder .XmlElement  element  = new  XmlBuilder .XmlElement ("dependency" , new  ArrayList <>(List .of (
60- 				new  XmlBuilder .XmlElement ("groupId" , split [0 ]),
61- 				new  XmlBuilder .XmlElement ("artifactId" , split [1 ]),
62- 				new  XmlBuilder .XmlElement ("version" , split [2 ]),
76+ 		String  classifier  = split .length  > 3  ? split [3 ] : null ;
77+ 		return  makeDependencyElement (split [0 ], split [1 ], split [2 ], classifier );
78+ 	}
79+ 
80+ 	private  static  XmlBuilder .XmlElement  makeDependencyElement (String  group , String  artifact , String  version , @ Nullable  String  classifier ) {
81+ 		List <XmlBuilder .XmlElement > children  = new  ArrayList <>(List .of (
82+ 				new  XmlBuilder .XmlElement ("groupId" , group ),
83+ 				new  XmlBuilder .XmlElement ("artifactId" , artifact ),
84+ 				new  XmlBuilder .XmlElement ("version" , version ),
6385				new  XmlBuilder .XmlElement ("scope" , "compile" )
64- 		)));
65- 		if  (split .length  > 3 ) {
66- 			element .children ().add (new  XmlBuilder .XmlElement ("classifier" , split [3 ]));
86+ 		));
87+ 
88+ 		if  (classifier  != null ) {
89+ 			children .add (new  XmlBuilder .XmlElement ("classifier" , classifier ));
6790		}
68- 		return  element ;
91+ 
92+ 		return  new  XmlBuilder .XmlElement ("dependency" , children );
6993	}
7094}
0 commit comments