@@ -18,26 +18,38 @@ def _kotlin_compile_impl(ctx):
1818 args += ["-P" ]
1919 args += ["plugin:%s=\" %s\" " % (k , v )]
2020
21- # Make classpath if needed. Include those from this rule and from
22- # dependent rules.
23- jars = [] + ctx .attr .jars
21+ # Make classpath if needed. Include those from this and dependent rules.
22+ jars = []
23+
24+ # Populate from (transitive) java dependencies
25+ for dep in ctx .attr .java_deps :
26+ # Add-in all source and generated jar files
27+ for file in dep .files :
28+ jars .append (file )
29+ # Add-in transitive dependencies
30+ for file in dep .java .transitive_deps :
31+ jars .append (file )
32+
33+ # Populate from (transitive) kotlin dependencies
2434 for dep in ctx .attr .deps :
25- jars += [jar .files for jar in dep .kt .transitive_jars ]
35+ jars += [file for file in dep .kt .transitive_jars ]
36+
37+ # Populate from jar dependencies
38+ for fileset in ctx .attr .jars :
39+ # The fileset object is either a ConfiguredTarget OR a depset.
40+ files = getattr (fileset , 'files' , None )
41+ if files :
42+ for file in files :
43+ jars += [file ]
44+ else :
45+ for file in fileset :
46+ jars += [file ]
47+
2648 if jars :
27- jarfiles = []
28- for fileset in jars :
29- # The fileset object is either a ConfiguredTarget OR a depset.
30- files = getattr (fileset , 'files' , None )
31- if files :
32- for file in files :
33- jarfiles += [file .path ]
34- inputs += [file ]
35- else :
36- for file in fileset :
37- jarfiles += [file .path ]
38- inputs += [file ]
39- classpath = ":" .join (jarfiles )
40- args += ["-cp" , classpath ]
49+ # De-duplicate
50+ jarsetlist = list (set (jars ))
51+ args += ["-cp" , ":" .join ([file .path for file in jarsetlist ])]
52+ inputs += jarsetlist
4153
4254 # Need to traverse back up to execroot, then down again
4355 kotlin_home = ctx .executable ._kotlinc .dirname \
@@ -66,7 +78,7 @@ def _kotlin_compile_impl(ctx):
6678 kt = struct (
6779 srcs = ctx .attr .srcs ,
6880 jar = kt_jar ,
69- transitive_jars = jars ,
81+ transitive_jars = [ kt_jar ] + jars ,
7082 home = kotlin_home ,
7183 ),
7284 )
@@ -91,13 +103,18 @@ _kotlin_compile_attrs = {
91103 providers = ["kt" ],
92104 ),
93105
106+ # Dependent java rules.
107+ "java_deps" : attr .label_list (
108+ providers = ["java" ],
109+ ),
110+
94111 # Not really implemented yet.
95112 "data" : attr .label_list (
96113 allow_files = True ,
97114 cfg = 'data' ,
98115 ),
99116
100- # Jars to put on the kotlinc classpath
117+ # Additional jar files to put on the kotlinc classpath
101118 "jars" : attr .label_list (
102119 allow_files = jar_filetype ,
103120 ),
@@ -135,24 +152,12 @@ kotlin_compile = rule(
135152)
136153
137154
138- def _make_jars_list_from_java_deps (deps = []):
139- jars = []
140- for dep in deps :
141- path = ""
142- basename = dep
143- if dep .find (":" ) >= 0 :
144- parts = dep .split (':' )
145- path = parts [0 ] if len (parts ) > 0 else ""
146- basename = parts [1 ]
147- jars .append ("%s:lib%s.jar" % (path , basename ))
148- return jars
149-
150-
151155def kotlin_library (name , jars = [], java_deps = [], ** kwargs ):
152156
153157 kotlin_compile (
154158 name = name ,
155- jars = jars + _make_jars_list_from_java_deps (java_deps ),
159+ jars = jars ,
160+ java_deps = java_deps ,
156161 ** kwargs
157162 )
158163
@@ -175,11 +180,10 @@ def kotlin_binary(name,
175180 java_deps = [],
176181 ** kwargs ):
177182
178- java_library_jars = _make_jars_list_from_java_deps (java_deps )
179-
180183 kotlin_compile (
181184 name = name + "_kt" ,
182- jars = jars + java_library_jars ,
185+ jars = jars ,
186+ java_deps = java_deps ,
183187 srcs = srcs ,
184188 deps = deps ,
185189 x_opts = x_opts ,
0 commit comments