diff --git a/gazelle/kotlin/BUILD.bazel b/gazelle/kotlin/BUILD.bazel index bff56173e..de0e456eb 100644 --- a/gazelle/kotlin/BUILD.bazel +++ b/gazelle/kotlin/BUILD.bazel @@ -1,5 +1,5 @@ load("@bazel_gazelle//:def.bzl", "gazelle_binary") -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") load("//gazelle:gazelle.bzl", "gazelle_generation_test") # Disable the kotlin extension @@ -31,9 +31,13 @@ go_library( "@bazel_gazelle//resolve:go_default_library", "@bazel_gazelle//rule:go_default_library", "@com_github_bazel_contrib_rules_jvm//java/gazelle/javaconfig", + "@com_github_bazel_contrib_rules_jvm//java/gazelle/private/java", + "@com_github_bazel_contrib_rules_jvm//java/gazelle/private/maven", + "@com_github_bazel_contrib_rules_jvm//java/gazelle/private/types", "@com_github_emirpasic_gods//maps/treemap", "@com_github_emirpasic_gods//sets/treeset", "@com_github_emirpasic_gods//utils", + "@com_github_rs_zerolog//:zerolog", ], ) @@ -53,3 +57,9 @@ gazelle_binary( ) for test_workspace in glob(["tests/**/WORKSPACE"]) ] + +go_test( + name = "kotlin_test", + srcs = ["kotlin_test.go"], + embed = [":kotlin"], +) diff --git a/gazelle/kotlin/configure.go b/gazelle/kotlin/configure.go index 3dc998354..ca6879ddc 100644 --- a/gazelle/kotlin/configure.go +++ b/gazelle/kotlin/configure.go @@ -5,15 +5,19 @@ import ( . "aspect.build/cli/gazelle/common/log" "aspect.build/cli/gazelle/kotlin/kotlinconfig" - "github.com/bazel-contrib/rules_jvm/java/gazelle/javaconfig" + jvm_javaconfig "github.com/bazel-contrib/rules_jvm/java/gazelle/javaconfig" + jvm_maven "github.com/bazel-contrib/rules_jvm/java/gazelle/private/maven" "github.com/bazelbuild/bazel-gazelle/config" "github.com/bazelbuild/bazel-gazelle/rule" + "github.com/rs/zerolog" ) type Configurer struct { config.Configurer lang *kotlinLang + + mavenInstallFile string } func NewConfigurer(lang *kotlinLang) *Configurer { @@ -24,7 +28,7 @@ func NewConfigurer(lang *kotlinLang) *Configurer { func (kt *Configurer) KnownDirectives() []string { return []string{ - javaconfig.JavaMavenInstallFile, + jvm_javaconfig.JavaMavenInstallFile, } } @@ -56,15 +60,35 @@ func (kt *Configurer) Configure(c *config.Config, rel string, f *rule.File) { for _, d := range f.Directives { switch d.Key { - // TODO: invoke java gazelle.Configure()? - case javaconfig.JavaMavenInstallFile: + // TODO: invoke java gazelle.Configure() to support all jvm directives? + // TODO: JavaMavenRepositoryName: https://github.com/bazel-contrib/rules_jvm/commit/e46bb11bedb2ead45309eae04619caca684f6243 + + case jvm_javaconfig.JavaMavenInstallFile: cfg.SetMavenInstallFile(d.Value) } } } + + if kt.lang.mavenResolver == nil { + BazelLog.Tracef("Creating Maven resolver: %s", cfg.MavenInstallFile()) + + // TODO: better zerolog configuration + logger := zerolog.New(BazelLog.Out).Level(zerolog.TraceLevel) + + resolver, err := jvm_maven.NewResolver( + cfg.MavenInstallFile(), + cfg.ExcludedArtifacts(), + logger, + ) + if err != nil { + BazelLog.Fatalln("error creating Maven resolver: %s", err.Error()) + } + kt.lang.mavenResolver = &resolver + } } func (kc *Configurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { + // TODO: support rules_jvm flags such as 'java-maven-install-file'? (see rules_jvm java/gazelle/configure.go) } func (kc *Configurer) CheckFlags(fs *flag.FlagSet, c *config.Config) error { diff --git a/gazelle/kotlin/kotlin.go b/gazelle/kotlin/kotlin.go index dd43e3de7..017b7771f 100644 --- a/gazelle/kotlin/kotlin.go +++ b/gazelle/kotlin/kotlin.go @@ -7,8 +7,24 @@ import ( import "github.com/emirpasic/gods/sets/treeset" +import ( + jvm_java "github.com/bazel-contrib/rules_jvm/java/gazelle/private/java" + jvm_types "github.com/bazel-contrib/rules_jvm/java/gazelle/private/types" +) + func IsNativeImport(impt string) bool { - return strings.HasPrefix(impt, "kotlin.") || strings.HasPrefix(impt, "kotlinx.") || strings.HasPrefix(impt, "java.") || strings.HasPrefix(impt, "javax.") + if strings.HasPrefix(impt, "kotlin.") || strings.HasPrefix(impt, "kotlinx.") { + return true + } + + jvm_import := jvm_types.NewPackageName(impt) + + // Java native/standard libraries + if jvm_java.IsStdlib(jvm_import) { + return true + } + + return false } type KotlinTarget struct { diff --git a/gazelle/kotlin/kotlin_test.go b/gazelle/kotlin/kotlin_test.go new file mode 100644 index 000000000..43f54a7de --- /dev/null +++ b/gazelle/kotlin/kotlin_test.go @@ -0,0 +1,27 @@ +package gazelle + +import ( + "testing" +) + +func assertTrue(t *testing.T, b bool, msg string) { + if !b { + t.Error(msg) + } +} + +func TestKotlinNative(t *testing.T) { + t.Run("kotlin native libraries", func(t *testing.T) { + assertTrue(t, IsNativeImport("kotlin.io"), "kotlin.io should be native") + assertTrue(t, IsNativeImport("kotlinx.foo"), "kotlinx.* should be native") + }) + + t.Run("java native libraries", func(t *testing.T) { + assertTrue(t, IsNativeImport("java.foo"), "java.* should be native") + assertTrue(t, IsNativeImport("javax.accessibility"), "javax should be native") + assertTrue(t, IsNativeImport("javax.net"), "javax should be native") + assertTrue(t, IsNativeImport("javax.sql"), "javax should be native") + assertTrue(t, IsNativeImport("javax.xml"), "javax should be native") + assertTrue(t, IsNativeImport("org.xml.sax"), "org.xml.sax should be native") + }) +} diff --git a/gazelle/kotlin/language.go b/gazelle/kotlin/language.go index fcec59345..4703b48b4 100644 --- a/gazelle/kotlin/language.go +++ b/gazelle/kotlin/language.go @@ -2,6 +2,7 @@ package gazelle import ( "aspect.build/cli/gazelle/common/git" + jvm_maven "github.com/bazel-contrib/rules_jvm/java/gazelle/private/maven" "github.com/bazelbuild/bazel-gazelle/config" "github.com/bazelbuild/bazel-gazelle/label" "github.com/bazelbuild/bazel-gazelle/language" @@ -33,6 +34,9 @@ type kotlinLang struct { // Ignore configurations for the workspace. gitignore *git.GitIgnore + + // TODO: extend rules_jvm extension instead of duplicating? + mavenResolver *jvm_maven.Resolver } // NewLanguage initializes a new TypeScript that satisfies the language.Language diff --git a/gazelle/kotlin/parser/parser.go b/gazelle/kotlin/parser/parser.go index 99fed7850..74a537ff2 100644 --- a/gazelle/kotlin/parser/parser.go +++ b/gazelle/kotlin/parser/parser.go @@ -151,7 +151,7 @@ func readIdentifier(node *sitter.Node, sourceCode []byte, ignoreLast bool) strin } s.WriteString(nodeC.Content(sourceCode)) } else if nodeC.Type() != "comment" { - fmt.Printf("Unexpected node type: %v - %s", nodeC.Type(), nodeC.Content(sourceCode)) + fmt.Printf("Unexpected node type '%v' within: %s", nodeC.Type(), node.Content(sourceCode)) os.Exit(1) } } diff --git a/gazelle/kotlin/resolver.go b/gazelle/kotlin/resolver.go index da077f8c3..f484000b0 100644 --- a/gazelle/kotlin/resolver.go +++ b/gazelle/kotlin/resolver.go @@ -15,6 +15,8 @@ import ( "github.com/bazelbuild/bazel-gazelle/resolve" "github.com/bazelbuild/bazel-gazelle/rule" "github.com/emirpasic/gods/sets/treeset" + + jvm_types "github.com/bazel-contrib/rules_jvm/java/gazelle/private/types" ) type Resolver struct { @@ -146,7 +148,7 @@ func (kt *Resolver) resolveImport( ix *resolve.RuleIndex, impt ImportStatement, from label.Label, -) (ResolutionType, *label.Label, error) { +) (resType ResolutionType, resLabel *label.Label, err error) { imptSpec := impt.ImportSpec // Gazelle overrides @@ -188,9 +190,20 @@ func (kt *Resolver) resolveImport( return Resolution_NativeKotlin, nil, nil } - // TODO: maven imports + jvm_import := jvm_types.NewPackageName(impt.Imp) + + // Maven imports + if mavenResolver := kt.lang.mavenResolver; mavenResolver != nil { + if l, err := (*mavenResolver).Resolve(jvm_import); err == nil { + return Resolution_Label, &l, nil + } + } + + if err != nil { + BazelLog.Warn("Kotlin resolution error: ", err) + } - return Resolution_NotFound, nil, nil + return Resolution_NotFound, nil, err } // targetListFromResults returns a string with the human-readable list of diff --git a/gazelle/kotlin/tests/native_deps/lib.kt b/gazelle/kotlin/tests/native_deps/lib.kt index feefcece5..744598543 100644 --- a/gazelle/kotlin/tests/native_deps/lib.kt +++ b/gazelle/kotlin/tests/native_deps/lib.kt @@ -10,6 +10,18 @@ import kotlin.text.* // as import kotlinx.serialization.json.Json as Jason +// Java, see rules_jvm java/gazelle/private/java/java.go +import java.util.* +import java.lang.String +import javax.net.* +import javax.xml.* +import jdk.* +import netscape.javascript.* +import org.ietf.jgss.* +import org.jcp.xml.dsig.internal.* +import org.w3c.dom.* +import org.xml.sax.* + @Serializable data class Data(val a: Int, val b: String) diff --git a/gazelle/kotlin/tests/rules_jvm-maven/BUILD.in b/gazelle/kotlin/tests/rules_jvm-maven/BUILD.in new file mode 100644 index 000000000..dcaf62d10 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/BUILD.in @@ -0,0 +1 @@ +# TODO(gazelle:)java_maven_repository_name vendor_java diff --git a/gazelle/kotlin/tests/rules_jvm-maven/BUILD.out b/gazelle/kotlin/tests/rules_jvm-maven/BUILD.out new file mode 100644 index 000000000..dcaf62d10 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/BUILD.out @@ -0,0 +1 @@ +# TODO(gazelle:)java_maven_repository_name vendor_java diff --git a/gazelle/kotlin/tests/rules_jvm-maven/README.md b/gazelle/kotlin/tests/rules_jvm-maven/README.md new file mode 100644 index 000000000..a54dfb0a6 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/README.md @@ -0,0 +1,8 @@ +Copied from +[rules_jvm "maven" test](https://github.com/bazel-contrib/rules_jvm/tree/v0.17.0/java/gazelle/testdata/maven). + +Created by ~ following steps: + +1. Copy the rules_jvm "maven" test +2. Rename .java to .kt +3. Modify .kt files to Kotlin syntax with a minimal diff diff --git a/gazelle/kotlin/tests/rules_jvm-maven/WORKSPACE b/gazelle/kotlin/tests/rules_jvm-maven/WORKSPACE new file mode 100644 index 000000000..dbfdcb83f --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/WORKSPACE @@ -0,0 +1,27 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_jvm_external", + sha256 = "23fe83890a77ac1a3ee143e2306ec12da4a845285b14ea13cb0df1b1e23658fe", + strip_prefix = "rules_jvm_external-4.3", + urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.3.tar.gz"], +) + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + artifacts = [ + "junit:junit:4.13.1", + "com.google.guava:guava:30.0-jre", + ], + fetch_sources = True, + maven_install_json = "//:maven_install.json", + repositories = [ + "http://uk.maven.org/maven2", + "https://jcenter.bintray.com/", + ], +) + +load("@maven//:defs.bzl", "pinned_maven_install") + +pinned_maven_install() diff --git a/gazelle/kotlin/tests/rules_jvm-maven/maven_install.json b/gazelle/kotlin/tests/rules_jvm-maven/maven_install.json new file mode 100644 index 000000000..ccd38ae99 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/maven_install.json @@ -0,0 +1,363 @@ +{ + "dependency_tree": { + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -98192304, + "__RESOLVED_ARTIFACTS_HASH": 1256918319, + "conflict_resolution": {}, + "dependencies": [ + { + "coord": "com.google.code.findbugs:jsr305:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + ], + "packages": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "sha256": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + }, + { + "coord": "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + ], + "packages": [], + "sha256": "1c9e85e272d0708c6a591dc74828c71603053b48cc75ae83cce56912a2aa063b", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + ], + "packages": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + ], + "packages": [], + "sha256": "0b1011d1e2ea2eab35a545cffd1cff3877f131134c8020885e8eaf60a7d72f91", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + }, + { + "coord": "com.google.guava:failureaccess:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + ], + "packages": ["com.google.common.util.concurrent.internal"], + "sha256": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + }, + { + "coord": "com.google.guava:failureaccess:jar:sources:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + ], + "packages": [], + "sha256": "092346eebbb1657b51aa7485a246bf602bb464cc0b0e2e1c7e7201fadce1e98f", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + }, + { + "coord": "com.google.guava:guava:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + ], + "packages": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "sha256": "56b292df9ec29d102820c1fd7dd581cd749d5c416c7b3aeac008dbda3b984cc2", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + }, + { + "coord": "com.google.guava:guava:jar:sources:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + ], + "packages": [], + "sha256": "daa8a245663f9027ae4b84239147d3439221839155a4d93cbab280c3e657a73d", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + }, + { + "coord": "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + ], + "packages": [], + "sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99", + "url": "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + }, + { + "coord": "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": null + }, + { + "coord": "com.google.j2objc:j2objc-annotations:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + ], + "packages": ["com.google.j2objc.annotations"], + "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + }, + { + "coord": "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + ], + "packages": [], + "sha256": "ba4df669fec153fa4cd0ef8d02c6d3ef0702b7ac4cabe080facf3b6e490bb972", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + }, + { + "coord": "junit:junit:4.13.1", + "dependencies": ["org.hamcrest:hamcrest-core:1.3"], + "directDependencies": ["org.hamcrest:hamcrest-core:1.3"], + "file": "v1/https/jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/junit/junit/4.13.1/junit-4.13.1.jar", + "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar" + ], + "packages": [ + "junit.extensions", + "junit.framework", + "junit.runner", + "junit.textui", + "org.junit", + "org.junit.experimental", + "org.junit.experimental.categories", + "org.junit.experimental.max", + "org.junit.experimental.results", + "org.junit.experimental.runners", + "org.junit.experimental.theories", + "org.junit.experimental.theories.internal", + "org.junit.experimental.theories.suppliers", + "org.junit.function", + "org.junit.internal", + "org.junit.internal.builders", + "org.junit.internal.management", + "org.junit.internal.matchers", + "org.junit.internal.requests", + "org.junit.internal.runners", + "org.junit.internal.runners.model", + "org.junit.internal.runners.rules", + "org.junit.internal.runners.statements", + "org.junit.matchers", + "org.junit.rules", + "org.junit.runner", + "org.junit.runner.manipulation", + "org.junit.runner.notification", + "org.junit.runners", + "org.junit.runners.model", + "org.junit.runners.parameterized", + "org.junit.validator" + ], + "sha256": "c30719db974d6452793fe191b3638a5777005485bae145924044530ffa5f6122", + "url": "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar" + }, + { + "coord": "junit:junit:jar:sources:4.13.1", + "dependencies": ["org.hamcrest:hamcrest-core:jar:sources:1.3"], + "directDependencies": ["org.hamcrest:hamcrest-core:jar:sources:1.3"], + "file": "v1/https/jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/junit/junit/4.13.1/junit-4.13.1-sources.jar", + "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar" + ], + "packages": [], + "sha256": "624c08005c95c47287c9d921479cff0b71dd50a101b0810cd5e207242eb8fe0e", + "url": "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar" + }, + { + "coord": "org.checkerframework:checker-qual:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + ], + "packages": [ + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.nullness", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual", + "org.checkerframework.framework.util" + ], + "sha256": "729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + }, + { + "coord": "org.checkerframework:checker-qual:jar:sources:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + ], + "packages": [], + "sha256": "0724b40995c1b05516caa2dd9a3b2f5378f948cf20f3404f4db316af25239368", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + ], + "packages": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "sha256": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + ], + "packages": [], + "sha256": "e223d2d8fbafd66057a8848cc94222d63c3cedd652cc48eddc0ab5c39c0f84df", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + } + ], + "version": "0.1.0" + } +} diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/BUILD.in b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/BUILD.in new file mode 100644 index 000000000..e69de29bb diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/BUILD.out b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/BUILD.out new file mode 100644 index 000000000..fb82e4805 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/BUILD.out @@ -0,0 +1,8 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_binary") + +kt_jvm_binary( + name = "compare_bin", + srcs = ["Compare.kt"], + main_class = "com.example.compare.Compare", + deps = ["@maven//:com_google_guava_guava"], +) diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/Compare.kt b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/Compare.kt new file mode 100644 index 000000000..7a3b3cf33 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/compare/Compare.kt @@ -0,0 +1,17 @@ +package com.example.compare + +import com.google.common.primitives.* + +/** This application compares two numbers, using the Ints.compare method from Guava. */ +class Compare() { + companion object { + fun compare(a : int, b: int) { + return Ints.compare(a, b) + } + } +} + +fun main(vararg args: string) { + var app = new Compare(); + System.out.println("Success: " + app.compare(2, 1)); +} \ No newline at end of file diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/App.kt b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/App.kt new file mode 100644 index 000000000..c359cea3e --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/App.kt @@ -0,0 +1,17 @@ +package com.example.myproject + +import com.google.common.primitives.Ints + +/** This application compares two numbers, using the Ints.compare method from Guava. */ +class App() { + companion object { + fun compare(a : int, b: int) { + return Ints.compare(a, b) + } + } +} + +fun main(vararg args: string) { + var app = new Compare(); + System.out.println("Success: " + app.compare(2, 1)); +} \ No newline at end of file diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/BUILD.in b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/BUILD.in new file mode 100644 index 000000000..e69de29bb diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/BUILD.out b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/BUILD.out new file mode 100644 index 000000000..88fe59995 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/main/java/com/example/myproject/BUILD.out @@ -0,0 +1,8 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_binary") + +kt_jvm_binary( + name = "app_bin", + srcs = ["App.kt"], + main_class = "com.example.myproject.App", + deps = ["@maven//:com_google_guava_guava"], +) diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/AppTest.kt b/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/AppTest.kt new file mode 100644 index 000000000..d0bfa7631 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/AppTest.kt @@ -0,0 +1,14 @@ +package com.example.myproject + +import org.junit.* + +import org.junit.Test + +/** Tests for correct dependency retrieval with maven rules. */ +class AppTest() { + + fun testCompare() { + var app = new App(); + Assert.assertEquals("should return 0 when both numbers are equal", 0, app.compare(1, 1)); + } +} diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/BUILD.in b/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/BUILD.in new file mode 100644 index 000000000..e69de29bb diff --git a/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/BUILD.out b/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/BUILD.out new file mode 100644 index 000000000..c49045424 --- /dev/null +++ b/gazelle/kotlin/tests/rules_jvm-maven/src/test/java/com/example/myproject/BUILD.out @@ -0,0 +1,7 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "myproject", + srcs = ["AppTest.kt"], + deps = ["@maven//:junit_junit"], +)