Skip to content

Commit 89124e6

Browse files
authored
Merge pull request #540 from sourcegraph/olafurpg/marklogic
Gradle: improve dependency detection
2 parents 792a9c1 + 974a9c7 commit 89124e6

File tree

2 files changed

+76
-34
lines changed

2 files changed

+76
-34
lines changed

scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/GradleBuildTool.scala

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -216,40 +216,7 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
216216
| }
217217
| }
218218
| }
219-
| task $scipJavaDependencies {
220-
| def depsOut = java.nio.file.Paths.get(
221-
| java.net.URI.create('${dependenciesPath.toUri}'))
222-
| doLast {
223-
| java.nio.file.Files.createDirectories(depsOut.getParent())
224-
| tasks.withType(JavaCompile) {
225-
| try {
226-
| configurations.each { config ->
227-
| def artifactType = org.gradle.api.attributes.Attribute.of("artifactType", String.class)
228-
| def attributeType = "jar"
229-
| if (config.canBeResolved) {
230-
| def artifacts = config.incoming.artifactView { view ->
231-
| view.lenient = true
232-
| view.attributes { container ->
233-
| container.attribute(artifactType, attributeType)
234-
| }
235-
| }.artifacts
236-
| def lines = artifacts.collect {
237-
| def id = it.id.componentIdentifier
238-
| return "$$id.group\t$$id.module\t$$id.version\t$$it.file"
239-
| }
240-
| java.nio.file.Files.write(
241-
| depsOut,
242-
| lines.unique(false),
243-
| java.nio.file.StandardOpenOption.APPEND,
244-
| java.nio.file.StandardOpenOption.CREATE)
245-
| }
246-
| }
247-
| } catch (Exception e) {
248-
| // Ignore errors.
249-
| }
250-
| }
251-
| }
252-
| }
219+
| task $scipJavaDependencies(type: WriteDependencies)
253220
|}
254221
|def scipJavaSemanticdbScalacVersions(scalaVersion) {
255222
| ${semanticdbScalacGroovySyntax()}[scalaVersion]
@@ -273,6 +240,35 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
273240
| }
274241
| return null
275242
|}
243+
|
244+
|class WriteDependencies extends DefaultTask {
245+
| @TaskAction
246+
| void printResolvedDependencies() {
247+
| def depsOut = java.nio.file.Paths.get(
248+
| java.net.URI.create('${dependenciesPath.toUri}'))
249+
| java.nio.file.Files.createDirectories(depsOut.getParent())
250+
| def configurations = project.configurations
251+
| configurations.each { configuration ->
252+
| if (!configuration.canBeResolved || java.lang.reflect.Modifier.isAbstract(configuration.getClass().getModifiers())) {
253+
| return
254+
| }
255+
| try {
256+
| def resolvedConfiguration = configuration.resolvedConfiguration
257+
| def lines = resolvedConfiguration.resolvedArtifacts.collect { artifact ->
258+
| return "$$artifact.moduleVersion.id.group\t$$artifact.moduleVersion.id.name\t$$artifact.moduleVersion.id.version\t$$artifact.file.absolutePath"
259+
| }
260+
| java.nio.file.Files.write(
261+
| depsOut,
262+
| lines.unique(false),
263+
| java.nio.file.StandardOpenOption.APPEND,
264+
| java.nio.file.StandardOpenOption.CREATE)
265+
| } catch (Exception e) {
266+
| println "Skipping configuration '$$configuration.name' due to resolution failure: $$e.message"
267+
| return
268+
| }
269+
| }
270+
| }
271+
|}
276272
|""".stripMargin
277273
Files.write(
278274
tmp.resolve("init-script.gradle"),

tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,52 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
297297
initCommand = gradleVersion()
298298
)
299299

300+
checkBuild(
301+
"implementation-deps",
302+
"""|/settings.gradle
303+
|rootProject.name = 'marklogic-examples'
304+
|include('app')
305+
|/app/build.gradle
306+
|plugins {
307+
| id 'java-library'
308+
|}
309+
|repositories {
310+
| mavenCentral()
311+
|}
312+
|dependencies {
313+
| implementation 'com.marklogic:marklogic-client-api:6.1.0'
314+
|}
315+
|/app/src/main/java/foo/Methods.java
316+
|package foo;
317+
|import com.marklogic.client.admin.MethodType;
318+
|public class Methods {
319+
| MethodType foo;
320+
|}
321+
|""".stripMargin,
322+
expectedSemanticdbFiles = 1,
323+
expectedPackages =
324+
"""|maven:com.fasterxml.jackson.core:jackson-annotations:2.14.1
325+
|maven:com.fasterxml.jackson.core:jackson-core:2.14.1
326+
|maven:com.fasterxml.jackson.core:jackson-databind:2.14.1
327+
|maven:com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.14.1
328+
|maven:com.marklogic:marklogic-client-api:6.1.0
329+
|maven:com.squareup.okhttp3:logging-interceptor:4.10.0
330+
|maven:com.squareup.okhttp3:okhttp:4.10.0
331+
|maven:com.squareup.okio:okio-jvm:3.0.0
332+
|maven:com.sun.mail:javax.mail:1.6.2
333+
|maven:io.github.rburgst:okhttp-digest:2.7
334+
|maven:javax.activation:activation:1.1
335+
|maven:javax.ws.rs:javax.ws.rs-api:2.1.1
336+
|maven:org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20
337+
|maven:org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10
338+
|maven:org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10
339+
|maven:org.jetbrains.kotlin:kotlin-stdlib:1.6.20
340+
|maven:org.jetbrains:annotations:13.0
341+
|maven:org.slf4j:slf4j-api:1.7.36
342+
|""".stripMargin,
343+
initCommand = gradleVersion()
344+
)
345+
300346
List("8", "11").foreach { version =>
301347
checkBuild(
302348
s"kotlin-jvm-toolchains-jdk-$version",

0 commit comments

Comments
 (0)