diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 808c2bef5..b94c20909 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,8 +31,8 @@ If you'd rather install tools manually, you'll need at least: These are the main components of the project. -- `semanticdb-javac/src/main/java`: the Java compiler plugin that creates - SemanticDB files. +- `semanticdb-javac/src/main/java`: the Java compiler plugin that emits + SCIP shard files. - `tests/minimized`: minimized Java source files that reproduce interesting test cases. - `tests/unit`: fast running unit tests that are helpful for local edit-and-test diff --git a/build.sbt b/build.sbt index 9430dd380..285154984 100644 --- a/build.sbt +++ b/build.sbt @@ -75,9 +75,7 @@ lazy val semanticdb = project .in(file("semanticdb-java")) .settings( moduleName := "semanticdb-java", - javaOnlySettings, - (Compile / PB.targets) := - Seq(PB.gens.java(V.protobuf) -> (Compile / sourceManaged).value) + javaOnlySettings ) lazy val agent = project @@ -169,7 +167,7 @@ lazy val javacPlugin = project .inAll ) ) - .dependsOn(semanticdb) + .dependsOn(semanticdb, scipProto) lazy val scipProto = project .in(file("scip-java-proto")) @@ -440,13 +438,15 @@ lazy val semanticdbKotlinc = project Attributed.blank(dir) } ) + .dependsOn(scipProto) // `semanticdbKotlincMinimized` mirrors the (still-present) Gradle build at // semanticdb-kotlinc/minimized/build.gradle.kts. It compiles a small set of // Kotlin and Java fixtures with the assembled `semanticdbKotlinc` plugin -// attached to kotlinc/javac, producing *.semanticdb files under -// target/semanticdb-targetroot/ which are then converted to SCIP and rendered -// as the human-readable golden snapshots by the `snapshots` task. +// attached to kotlinc/javac, producing *.scip shard files under +// target/semanticdb-targetroot/ which are then aggregated into a single SCIP +// index and rendered as the human-readable golden snapshots by the +// `snapshots` task. lazy val semanticdbKotlincMinimized = project .in(file("semanticdb-kotlinc/minimized")) .enablePlugins(KotlinPlugin) @@ -510,7 +510,7 @@ lazy val semanticdbKotlincMinimized = project // ----- snapshots regeneration task ----- // Invokes `com.sourcegraph.scip_java.ScipJava.main` twice in the cli JVM // (forked — ScipJava.main calls System.exit on failure). First pass - // converts the *.semanticdb files under target/semanticdb-targetroot/ + // aggregates the *.scip shard files under target/semanticdb-targetroot/ // into an index.scip; second pass renders that index as the human-readable // golden snapshots. // @@ -524,7 +524,10 @@ lazy val semanticdbKotlincMinimized = project val snapDir = (baseDirectory.value / "src" / "generatedSnapshots" / "resources") .getAbsolutePath - val scipOut = s"$tgtRoot/index.scip" + // Place the aggregated `index.scip` outside the shard-scanned + // targetroot so a subsequent run doesn't re-ingest it as a shard. + val scipOut = (target.value / "scip-index" / "index.scip") + .getAbsolutePath val mainCls = "com.sourcegraph.scip_java.ScipJava" Def.sequential( Compile / compile, @@ -532,7 +535,7 @@ lazy val semanticdbKotlincMinimized = project s" $mainCls index-semanticdb --no-emit-inverse-relationships --cwd $srcRoot --output $scipOut $tgtRoot" ), (cli / Compile / runMain).toTask( - s" $mainCls snapshot --cwd $srcRoot --output $snapDir $tgtRoot" + s" $mainCls snapshot --cwd $srcRoot --output $snapDir ${file(scipOut).getParentFile.getAbsolutePath}" ) ) } @@ -695,6 +698,11 @@ lazy val fatjarPackageSettings = List[Def.Setting[_]]( MergeStrategy.discard case PathList("META-INF", "versions", "9", "module-info.class") => MergeStrategy.discard + // Bazel BUILD files live next to *.proto sources in our subprojects; they are + // not needed at runtime and would conflict when multiple proto modules are + // merged into the same fat jar. + case PathList("BUILD") => + MergeStrategy.discard case x => val oldStrategy = (assembly / assemblyMergeStrategy).value oldStrategy(x) diff --git a/docs/design.md b/docs/design.md index af79ca5f6..853fc6f25 100644 --- a/docs/design.md +++ b/docs/design.md @@ -5,10 +5,9 @@ title: Design This project is implemented as a [Java compiler plugin](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.compiler/com/sun/source/util/Plugin.html) -that generates one -[SemanticDB](https://scalameta.org/docs/semanticdb/specification.html) file for -every `*.java` source file. After compilation completes, the SemanticDB files -are processed to produce SCIP. +that emits one [SCIP](https://github.com/sourcegraph/scip) shard file for every +`*.java` source file. After compilation completes, the per-file SCIP shards are +aggregated into a single SCIP index. ### Why Java compiler plugin? @@ -24,24 +23,3 @@ There are several benefits to implementing scip-java as a compiler plugin: tool, we minimize the risk of diverging from the CI build environment such as installed system dependencies, custom compiler options and custom annotation processors. - -### Why SemanticDB? - -SemanticDB is Protobuf schema for information about symbols and types in Java -programs and other languages. There are several benefits to using SemanticDB as -an intermediary representation for SCIP: - -- **Simplicity**: It's easy to translate a single Java source file into a single - SemanticDB file inside a compiler plugin. It's more complicated to produce - SCIP because compiler plugins does not have access to a project-wide context, - which is necessary to produce accurate definitions and hovers in multi-module - projects with external library dependencies. -- **Performance**: SemanticDB is fast to write and read. Each compilation unit - can be processed independently to keep memory usage low. The final conversion - from SemanticDB to SCIP can be safely parallelized. -- **Cross-repository**: Compiler plugins have access to both source code and the - classpath (compiled bytecode of upstream dependencies). SemanticDB has been - designed so that it's also possible to generate spec-compliant symbols from - the classpath alone (no source code) and from the syntax tree of an individual - source file (no classpath). This flexibility will be helpful for scip-java in - the future to unblock cross-repository navigation. diff --git a/docs/getting-started.md b/docs/getting-started.md index 93d896a09..9e1a3515a 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -351,10 +351,10 @@ Next, run the following command to generate the SCIP index (`index.scip`). ``` bazel run @scip_java//scip-semanticdb:bazel -- --sourceroot $PWD -# (optional) Validate that SemanticDB files were generated. +# (optional) Validate that SCIP shard files were generated. # The command below works for the `examples/bazel-example` directory in the sourcegraph/scip-java repository. -❯ jar tf bazel-bin/src/main/java/example/libexample.jar | grep semanticdb$ -META-INF/semanticdb/src/main/java/example/Example.java.semanticdb +❯ jar tf bazel-bin/src/main/java/example/libexample.jar | grep scip$ +META-INF/scip/src/main/java/example/Example.java.scip ``` Finally, run the following commands to upload the SCIP index to Sourcegraph. diff --git a/docs/manual-configuration.md b/docs/manual-configuration.md index 49e3597d5..98c473fb4 100644 --- a/docs/manual-configuration.md +++ b/docs/manual-configuration.md @@ -12,10 +12,9 @@ fails. Indexing a codebase consists of two independent phases: -- Compile the codebase with the SemanticDB compiler plugin. -- Generate SCIP index from SemanticDB files. - -![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single SCIP index.](assets/semanticdb-javac-pipeline.svg) +- Compile the codebase with the SemanticDB compiler plugin, which writes one + SCIP shard per Java source file. +- Aggregate the SCIP shards into a single SCIP index. The first phase can be complicated to configure and it can take a while to run. The second phase is quite simple to configure and it usually runs very fast. @@ -63,7 +62,7 @@ compiler plugin. To do this you need to explicitly configure two directories: It's important that all of the source files that should be index live under this directory. - `-targetroot:PATH`: the absolute path to the directory where to generate - SemanticDB file. This directory can be anywhere on your file system. + SCIP shard files. This directory can be anywhere on your file system. Alternatively, pass in `-targetroot:javac-classes-directory` for the plugin to automatically use the `javac` output directory. @@ -112,13 +111,13 @@ examples: - Maven: `mvn clean verify -DskipTests` - Bazel: `bazel build //...` -If everything went well, you should have a lot of `*.semanticdb` files in the +If everything went well, you should have a lot of `*.scip` shard files in the targetroot directory. ``` ❯ find $TARGETROOT -type f -build/semanticdb-targetroot/META-INF/semanticdb/j11/src/test/java/example/ExampleTest.java.semanticdb -build/semanticdb-targetroot/META-INF/semanticdb/j11/src/main/java/example/Example.java.semanticdb +build/semanticdb-targetroot/META-INF/scip/j11/src/test/java/example/ExampleTest.java.scip +build/semanticdb-targetroot/META-INF/scip/j11/src/main/java/example/Example.java.scip ... ``` @@ -198,13 +197,13 @@ Which allows you to invoke it by simply running `mvn sourcegraph:sourcegraphDepe Cross-repository navigation is a feature that allows "goto definition" and "find references" to show results from multiple repositories. -## Step 5: Generate SCIP index from SemanticDB files +## Step 5: Aggregate SCIP shards into a single SCIP index First, install the `scip-java` command-line tool according to the instructions in the [getting started guide](getting-started.md). -Next, run the `scip-java index-semanticdb` command to convert SemanticDB files -into SCIP. +Next, run the `scip-java index-semanticdb` command to aggregate the per-file +SCIP shards into a single SCIP index. ```sh ❯ scip-java index-semanticdb $TARGETROOT diff --git a/scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/ScipBuildTool.scala b/scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/ScipBuildTool.scala index 7656a8dd0..3bcb1bae6 100644 --- a/scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/ScipBuildTool.scala +++ b/scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/ScipBuildTool.scala @@ -206,7 +206,7 @@ class ScipBuildTool(index: IndexCommand) extends BuildTool("SCIP", index) { .app .reporter .info( - "Some SemanticDB files got generated even if there were compile errors. " + + "Some SCIP shard files got generated even if there were compile errors. " + "In most cases, this means that scip-java managed to index everything " + "except the locations that had compile errors and you can ignore the compile errors." ) diff --git a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexCommand.scala b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexCommand.scala index 566fc0c0e..04e962280 100644 --- a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexCommand.scala +++ b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexCommand.scala @@ -29,7 +29,7 @@ case class IndexCommand( @Description("The path where to generate the SCIP index.") output: Path = Paths.get("index.scip"), @Description( - "The directory where to generate SemanticDB files. " + + "The directory where to generate SCIP shard files. " + "Defaults to a build-specific path. " + "For example, the default value for Gradle is 'build/semanticdb-targetroot' and for Maven it's 'target/semanticdb-targetroot'" ) diff --git a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexSemanticdbCommand.scala b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexSemanticdbCommand.scala index 194c1a85c..999b2c9b7 100644 --- a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexSemanticdbCommand.scala +++ b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexSemanticdbCommand.scala @@ -12,8 +12,8 @@ import com.sourcegraph.scip_java.BuildInfo import com.sourcegraph.scip_java.buildtools.ClasspathEntry import com.sourcegraph.scip_semanticdb.ConsoleScipSemanticdbReporter import com.sourcegraph.scip_semanticdb.ScipOutputFormat -import com.sourcegraph.scip_semanticdb.ScipSemanticdb import com.sourcegraph.scip_semanticdb.ScipSemanticdbOptions +import com.sourcegraph.scip_semanticdb.ScipShardAggregator import moped.annotations._ import moped.cli.Application import moped.cli.Command @@ -21,7 +21,7 @@ import moped.cli.CommandParser import ujson.Arr import ujson.Obj -@Description("Converts SemanticDB files into a single SCIP index file.") +@Description("Aggregates SCIP shard files into a single SCIP index file.") @Usage("scip-java index-semanticdb [OPTIONS ...] [POSITIONAL ARGUMENTS ...]") @ExampleUsage( "scip-java index-semanticdb --out=myindex.scip my/targetroot1 my/targetroot2" @@ -30,10 +30,10 @@ import ujson.Obj final case class IndexSemanticdbCommand( @Description("The name of the output file.") output: Path = Paths.get("index.scip"), - @Description("Whether to process the SemanticDB files in parallel") + @Description("Whether to process the SCIP shard files in parallel") parallel: Boolean = true, @Description( - "Whether to infer the location of SemanticDB files based as produced by Bazel" + "Whether to infer the location of SCIP shard files based as produced by Bazel" ) bazel: Boolean = true, @Description( @@ -44,7 +44,7 @@ final case class IndexSemanticdbCommand( @Description("URL to a PackageHub instance") @Hidden packagehub: Option[String] = None, - @Description("Directories that contain SemanticDB files.") + @Description("Directories that contain SCIP shard files.") @PositionalArguments() targetroot: List[Path] = Nil, @Description( @@ -108,7 +108,7 @@ final case class IndexSemanticdbCommand( allowEmptyIndex, allowExportingGlobalSymbolsFromDirectoryEntries ) - ScipSemanticdb.run(options) + ScipShardAggregator.run(options) postPackages(packages) if (!app.reporter.hasErrors()) { app.info(options.output.toString) diff --git a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/SnapshotCommand.scala b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/SnapshotCommand.scala index 6b3425739..9ac166cf6 100644 --- a/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/SnapshotCommand.scala +++ b/scip-java/src/main/scala/com/sourcegraph/scip_java/commands/SnapshotCommand.scala @@ -51,31 +51,37 @@ case class SnapshotCommand( attrs: BasicFileAttributes ): FileVisitResult = { if (scipPattern.matches(file)) { - foundScipFile = true val index = Scip.Index.parseFrom(Files.readAllBytes(file)) - val root = URI.create(index.getMetadata.getProjectRoot) - index - .getDocumentsList - .asScala - .foreach { doc => - val sourcepath = Paths.get(root.resolve(doc.getRelativePath)) - val source = - new String( - Files.readAllBytes(sourcepath), - StandardCharsets.UTF_8 + // Skip per-source shards emitted by the compiler plugin (those don't have a + // project_root). The aggregator produces a single top-level index file that + // carries the project_root and is the canonical input for snapshot rendering. + val rawProjectRoot = index.getMetadata.getProjectRoot + if (rawProjectRoot.nonEmpty) { + foundScipFile = true + val projectRoot = URI.create(rawProjectRoot) + index + .getDocumentsList + .asScala + .foreach { doc => + val sourcepath = Paths.get(projectRoot.resolve(doc.getRelativePath)) + val source = + new String( + Files.readAllBytes(sourcepath), + StandardCharsets.UTF_8 + ) + val document = ScipPrinters.printTextDocument( + doc, + source, + CommentSyntax.default ) - val document = ScipPrinters.printTextDocument( - doc, - source, - CommentSyntax.default - ) - val snapshotOutput = output.resolve(doc.getRelativePath) - Files.createDirectories(snapshotOutput.getParent) - Files.write( - snapshotOutput, - document.getBytes(StandardCharsets.UTF_8) - ) - } + val snapshotOutput = output.resolve(doc.getRelativePath) + Files.createDirectories(snapshotOutput.getParent) + Files.write( + snapshotOutput, + document.getBytes(StandardCharsets.UTF_8) + ) + } + } } super.visitFile(file, attrs) } diff --git a/scip-semanticdb/BUILD b/scip-semanticdb/BUILD index 6c2b8b5a0..37565d9f0 100644 --- a/scip-semanticdb/BUILD +++ b/scip-semanticdb/BUILD @@ -20,7 +20,6 @@ java_library( ":all_java_proto", "//scip-java-proto/src/main/protobuf:scip_java_proto", "//semanticdb-java", - "//semanticdb-java/src/main/protobuf:semanticdb_java_proto", "@maven//:com_google_code_findbugs_jsr305", "@maven//:com_google_protobuf_protobuf_java", "@maven//:com_google_protobuf_protobuf_java_util", diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/BazelBuildTool.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/BazelBuildTool.java index e5fb161f3..10428b931 100644 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/BazelBuildTool.java +++ b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/BazelBuildTool.java @@ -66,7 +66,7 @@ public boolean hasErrors() { /* allowEmptyIndex */ true, /* indexDirectoryEntries */ false // because Bazel only compiles to jar files. ); - ScipSemanticdb.run(scipOptions); + ScipShardAggregator.run(scipOptions); if (!scipOptions.reporter.hasErrors()) { System.out.println("done: " + scipOptions.output); diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/RangeComparator.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/RangeComparator.java deleted file mode 100644 index aa16a5af2..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/RangeComparator.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb.Range; - -/** - * Comparator that sorts SemanticDB ranges by appearance in the document. - * - *

We can't guarantee ordering of SymbolOccurrence in SemanticDB payloads so it's good to sort - * them before processing. - */ -public class RangeComparator implements java.util.Comparator { - - @Override - public int compare(Range r1, Range r2) { - int byStartLine = Integer.compare(r1.getStartLine(), r2.getStartLine()); - if (byStartLine != 0) { - return byStartLine; - } - int byStartCharacter = Integer.compare(r1.getStartCharacter(), r2.getStartCharacter()); - if (byStartCharacter != 0) { - return byStartCharacter; - } - int byEndLine = Integer.compare(r1.getEndLine(), r2.getEndLine()); - if (byEndLine != 0) { - return byEndLine; - } - return Integer.compare(r1.getEndCharacter(), r2.getEndCharacter()); - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipSemanticdb.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipSemanticdb.java deleted file mode 100644 index 789a9afef..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipSemanticdb.java +++ /dev/null @@ -1,427 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.google.protobuf.CodedInputStream; -import com.sourcegraph.semanticdb_javac.Semanticdb; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Kind; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Property; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolOccurrence; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolOccurrence.Role; -import com.sourcegraph.semanticdb_javac.SemanticdbSymbols; -import com.sourcegraph.Scip; - -import java.io.IOException; -import java.net.URI; -import java.nio.file.*; -import java.util.*; - -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -/** The core logic that converts SemanticDB into SCIP. */ -public class ScipSemanticdb { - private final ScipWriter writer; - private final ScipSemanticdbOptions options; - - public ScipSemanticdb(ScipWriter writer, ScipSemanticdbOptions options) { - this.writer = writer; - this.options = options; - } - - public static void run(ScipSemanticdbOptions options) throws IOException { - ScipWriter writer = new ScipWriter(options); - new ScipSemanticdb(writer, options).run(); - } - - private void run() throws IOException { - PackageTable packages = new PackageTable(options); - List files = SemanticdbWalker.findSemanticdbFiles(options); - Collections.sort(files); - if (options.reporter.hasErrors()) return; - if (files.isEmpty() && !options.allowEmptyIndex) { - options.reporter.error( - "No SemanticDB files found. " - + "This typically means that `scip-java` is unable to automatically " - + "index this codebase. If you are using Gradle or Maven, please report an issue to " - + "https://github.com/sourcegraph/scip-java and include steps to reproduce. " - + "If you are using a different build tool, make sure that you have followed all " - + "of the steps from https://sourcegraph.github.io/scip-java/docs/manual-configuration.html"); - return; - } - options.reporter.startProcessing(files.size()); - runTyped(files, packages); - writer.build(); - options.reporter.endProcessing(); - } - - private void runTyped(List files, PackageTable packages) { - writer.emitTyped(typedMetadata()); - InverseReferenceRelationships references = inverseReferenceRelationships(files); - filesStream(files).forEach(document -> processTypedDocument(document, packages, references)); - } - - private String typedSymbol(String symbol, Package pkg) { - if (symbol.isEmpty()) { - return ""; - } - if (symbol.startsWith("local")) { - return "local " + symbol.substring("local".length()); - } - return "semanticdb maven " + pkg.repoName() + " " + pkg.version() + " " + symbol; - } - - private static Scip.SymbolInformation.Kind scipKind(SymbolInformation info) { - Kind kind = info.getKind(); - int properties = info.getProperties(); - boolean isStatic = (properties & Property.STATIC_VALUE) > 0; - boolean isAbstract = (properties & Property.ABSTRACT_VALUE) > 0; - boolean isEnum = (properties & Property.ENUM_VALUE) > 0; - - switch (kind) { - case CLASS: - if (isEnum) { - return Scip.SymbolInformation.Kind.Enum; - } else { - return Scip.SymbolInformation.Kind.Class; - } - case CONSTRUCTOR: - return Scip.SymbolInformation.Kind.Constructor; - case FIELD: - if (isStatic) { - return Scip.SymbolInformation.Kind.StaticField; - } else { - return Scip.SymbolInformation.Kind.Field; - } - case INTERFACE: - return Scip.SymbolInformation.Kind.Interface; - case LOCAL: - if (isStatic) { - return Scip.SymbolInformation.Kind.StaticVariable; - } else { - return Scip.SymbolInformation.Kind.Variable; - } - case MACRO: - return Scip.SymbolInformation.Kind.Macro; - case METHOD: - if (isStatic) { - return Scip.SymbolInformation.Kind.StaticMethod; - } else if (isAbstract) { - return Scip.SymbolInformation.Kind.AbstractMethod; - } else { - return Scip.SymbolInformation.Kind.Method; - } - case OBJECT: - return Scip.SymbolInformation.Kind.Object; - case PACKAGE: - return Scip.SymbolInformation.Kind.Package; - case PACKAGE_OBJECT: - return Scip.SymbolInformation.Kind.PackageObject; - case PARAMETER: - return Scip.SymbolInformation.Kind.Parameter; - case SELF_PARAMETER: - return Scip.SymbolInformation.Kind.SelfParameter; - case TRAIT: - return Scip.SymbolInformation.Kind.Trait; - case TYPE: - if (isEnum) { - return Scip.SymbolInformation.Kind.Enum; - } else { - return Scip.SymbolInformation.Kind.Type; - } - case TYPE_PARAMETER: - return Scip.SymbolInformation.Kind.TypeParameter; - case UNKNOWN_KIND: - return Scip.SymbolInformation.Kind.UnspecifiedKind; - } - - return Scip.SymbolInformation.Kind.UnspecifiedKind; - } - - public static boolean isDefinitionRole(Role role) { - return role == Role.DEFINITION || role == Role.SYNTHETIC_DEFINITION; - } - - private void processTypedDocument( - Path path, PackageTable packages, InverseReferenceRelationships references) { - for (ScipTextDocument doc : parseTextDocument(path).collect(Collectors.toList())) { - if (doc.semanticdb.getOccurrencesCount() == 0) { - continue; - } - - Path absolutePath = Paths.get(URI.create(doc.semanticdb.getUri())); - String relativePath = - StreamSupport.stream(options.sourceroot.relativize(absolutePath).spliterator(), false) - .map(p -> p.getFileName().toString()) - .collect(Collectors.joining("/")); - Scip.Document.Builder tdoc = Scip.Document.newBuilder().setRelativePath(relativePath); - for (SymbolOccurrence occ : doc.sortedSymbolOccurrences()) { - if (occ.getSymbol().isEmpty()) { - continue; - } - int role = 0; - if (isDefinitionRole(occ.getRole())) { - role |= Scip.SymbolRole.Definition_VALUE; - } - boolean isSingleLineRange = occ.getRange().getStartLine() == occ.getRange().getEndLine(); - Iterable range = - isSingleLineRange - ? Arrays.asList( - occ.getRange().getStartLine(), - occ.getRange().getStartCharacter(), - occ.getRange().getEndCharacter()) - : Arrays.asList( - occ.getRange().getStartLine(), - occ.getRange().getStartCharacter(), - occ.getRange().getEndLine(), - occ.getRange().getEndCharacter()); - Package pkg = packages.packageForSymbol(occ.getSymbol()).orElse(Package.EMPTY); - Scip.Occurrence.Builder occBuilder = - Scip.Occurrence.newBuilder() - .addAllRange(range) - .setSymbol(typedSymbol(occ.getSymbol(), pkg)) - .setSymbolRoles(role); - // Add enclosing_range if it exists - if (occ.hasEnclosingRange()) { - Semanticdb.Range enclosingRange = occ.getEnclosingRange(); - boolean isEnclosingSingleLine = - enclosingRange.getStartLine() == enclosingRange.getEndLine(); - Iterable enclosingRangeInts = - isEnclosingSingleLine - ? Arrays.asList( - enclosingRange.getStartLine(), - enclosingRange.getStartCharacter(), - enclosingRange.getEndCharacter()) - : Arrays.asList( - enclosingRange.getStartLine(), - enclosingRange.getStartCharacter(), - enclosingRange.getEndLine(), - enclosingRange.getEndCharacter()); - occBuilder.addAllEnclosingRange(enclosingRangeInts); - } - tdoc.addOccurrences(occBuilder); - } - Symtab symtab = new Symtab(doc.semanticdb); - for (SymbolInformation info : doc.semanticdb.getSymbolsList()) { - if (info.getSymbol().isEmpty()) { - continue; - } - Package pkg = packages.packageForSymbol(info.getSymbol()).orElse(Package.EMPTY); - Scip.SymbolInformation.Builder scipInfo = - Scip.SymbolInformation.newBuilder().setSymbol(typedSymbol(info.getSymbol(), pkg)); - - scipInfo.setDisplayName(info.getDisplayName()); - if (!info.getEnclosingSymbol().isEmpty()) { - scipInfo.setEnclosingSymbol(typedSymbol(info.getEnclosingSymbol(), pkg)); - } - - scipInfo.setKind(scipKind(info)); - - // TODO: this can be removed once https://github.com/sourcegraph/sourcegraph/issues/50927 is - // fixed. - ArrayList inverseReferences = references.map.get(info.getSymbol()); - if (inverseReferences != null) { - for (String inverseReference : inverseReferences) { - Package inverseReferencePkg = - packages.packageForSymbol(inverseReference).orElse(Package.EMPTY); - scipInfo.addRelationships( - Scip.Relationship.newBuilder() - .setSymbol(typedSymbol(inverseReference, inverseReferencePkg)) - .setIsImplementation(true) - .setIsReference(true)); - } - } - - for (int i = 0; i < info.getDefinitionRelationshipsCount(); i++) { - String definitionSymbol = info.getDefinitionRelationships(i); - if (definitionSymbol.isEmpty()) { - continue; - } - Package definitionSymbolPkg = - packages.packageForSymbol(definitionSymbol).orElse(Package.EMPTY); - SymbolInformation definitionInfo = symtab.symbols.get(definitionSymbol); - - scipInfo.addRelationships( - Scip.Relationship.newBuilder() - .setSymbol(typedSymbol(definitionSymbol, definitionSymbolPkg)) - .setIsDefinition(true) - .setIsReference( - definitionInfo != null - && definitionInfo.getDisplayName().equals(info.getDisplayName()) - && supportsReferenceRelationship(info))); - } - - for (int i = 0; i < info.getOverriddenSymbolsCount(); i++) { - String overriddenSymbol = info.getOverriddenSymbols(i); - if (overriddenSymbol.isEmpty()) { - continue; - } - if (isIgnoredOverriddenSymbol(overriddenSymbol)) { - continue; - } - Package overriddenSymbolPkg = - packages.packageForSymbol(overriddenSymbol).orElse(Package.EMPTY); - scipInfo.addRelationships( - Scip.Relationship.newBuilder() - .setSymbol(typedSymbol(overriddenSymbol, overriddenSymbolPkg)) - .setIsImplementation(true) - .setIsReference(supportsReferenceRelationship(info))); - } - if (info.hasSignature()) { - String language = - doc.semanticdb.getLanguage().toString().toLowerCase(Locale.ROOT).intern(); - String signature = new SignatureFormatter(info, symtab).formatSymbol(); - Scip.Document.Builder signatureDocumentation = - Scip.Document.newBuilder() - .setRelativePath(relativePath) - .setLanguage(language) - .setText(signature); - scipInfo.setSignatureDocumentation(signatureDocumentation); - } - String documentation = info.getDocumentation().getMessage(); - if (!documentation.isEmpty()) { - scipInfo.addDocumentation(documentation); - } - tdoc.addSymbols(scipInfo); - } - writer.emitTyped(Scip.Index.newBuilder().addDocuments(tdoc).build()); - } - } - - private Scip.Index typedMetadata() { - return Scip.Index.newBuilder() - .setMetadata( - Scip.Metadata.newBuilder() - .setVersion(Scip.ProtocolVersion.UnspecifiedProtocolVersion) - .setProjectRoot(options.sourceroot.toUri().toString()) - .setTextDocumentEncoding(Scip.TextEncoding.UTF8) - .setToolInfo( - Scip.ToolInfo.newBuilder() - .setName(options.toolInfo.getName()) - .setVersion(options.toolInfo.getVersion()) - .addAllArguments(options.toolInfo.getArgumentsList()))) - .build(); - } - - private Stream filesStream(List files) { - return options.parallel ? files.parallelStream() : files.stream(); - } - - private static class InverseReferenceRelationships { - public final Map> map; - - private InverseReferenceRelationships(Map> map) { - this.map = map; - } - } - - private InverseReferenceRelationships inverseReferenceRelationships(List files) { - if (!options.emitInverseRelationships) { - return new InverseReferenceRelationships(Collections.emptyMap()); - } - return new InverseReferenceRelationships( - filesStream(files) - .flatMap(this::parseTextDocument) - .flatMap(this::referenceRelationships) - .collect( - Collectors.groupingBy( - SymbolRelationship::getTo, - Collectors.mapping( - SymbolRelationship::getFrom, Collectors.toCollection(ArrayList::new))))); - } - - private Stream referenceRelationships(ScipTextDocument document) { - ArrayList relationships = new ArrayList<>(); - for (int i = 0; i < document.semanticdb.getSymbolsCount(); i++) { - SymbolInformation info = document.semanticdb.getSymbols(i); - if (!supportsReferenceRelationship(info)) { - continue; - } - if (info.getSymbol().isEmpty() || SemanticdbSymbols.isLocal(info.getSymbol())) { - continue; - } - for (int j = 0; j < info.getOverriddenSymbolsCount(); j++) { - String overriddenSymbol = info.getOverriddenSymbols(j); - if (SemanticdbSymbols.isLocal(overriddenSymbol)) { - continue; - } - relationships.add(new SymbolRelationship(info.getSymbol(), overriddenSymbol)); - } - } - return relationships.stream(); - } - - private static boolean supportsReferenceRelationship(SymbolInformation info) { - switch (info.getKind()) { - case INTERFACE: - case TYPE: - case CLASS: - case OBJECT: - case PACKAGE_OBJECT: - return false; - default: - return true; - } - } - - private Stream parseTextDocument(Path semanticdbPath) { - try { - return textDocumentsParseFrom(semanticdbPath).getDocumentsList().stream() - .filter(sdb -> !sdb.getOccurrencesList().isEmpty()) - .map(sdb -> new ScipTextDocument(semanticdbPath, sdb, options.sourceroot)); - } catch (IOException e) { - options.reporter.error("invalid protobuf: " + semanticdbPath); - options.reporter.error(e); - return Stream.empty(); - } - } - - private static PathMatcher jarPattern = FileSystems.getDefault().getPathMatcher("glob:**.jar"); - - private Semanticdb.TextDocuments textDocumentsParseFrom(Path semanticdbPath) throws IOException { - if (jarPattern.matches(semanticdbPath)) { - return textDocumentsParseJarFile(semanticdbPath); - } - return textDocumentsParseFromBytes(Files.readAllBytes(semanticdbPath)); - } - - private Semanticdb.TextDocuments textDocumentsParseJarFile(Path jarFile) throws IOException { - Semanticdb.TextDocuments.Builder result = Semanticdb.TextDocuments.newBuilder(); - try (JarFile file = new JarFile(jarFile.toFile())) { - Enumeration entries = file.entries(); - while (entries.hasMoreElements()) { - JarEntry element = entries.nextElement(); - if (element.getName().endsWith(".semanticdb")) { - byte[] bytes = InputStreamBytes.readAll(file.getInputStream(element)); - result.addAllDocuments(textDocumentsParseFromBytes(bytes).getDocumentsList()); - } - } - } - return result.build(); - } - - private Semanticdb.TextDocuments textDocumentsParseFromBytes(byte[] bytes) throws IOException { - try { - CodedInputStream in = CodedInputStream.newInstance(bytes); - in.setRecursionLimit(1000); - return Semanticdb.TextDocuments.parseFrom(in); - } catch (NoSuchMethodError ignored) { - // NOTE(olafur): For some reason, NoSuchMethodError gets thrown when running - // `snapshots/run` - // in the sbt build. I'm unable to reproduce the error in `snapshots/test` or - // when running the - // published version - // of `scip-java index`. - return Semanticdb.TextDocuments.parseFrom(bytes); - } - } - - private boolean isIgnoredOverriddenSymbol(String symbol) { - // Skip java/lang/Object# and similar symbols from Scala since it's the parent - // of all classes - // making it noisy for "find implementations" results. - return symbol.equals("java/lang/Object#"); - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardAggregator.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardAggregator.java new file mode 100644 index 000000000..96458b331 --- /dev/null +++ b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardAggregator.java @@ -0,0 +1,317 @@ +package com.sourcegraph.scip_semanticdb; + +import com.google.protobuf.CodedInputStream; +import com.sourcegraph.Scip; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +/** + * Aggregates per-source {@code *.scip} shards into a single {@link Scip.Index}. + * + *

Steps: + * + *

    + *
  1. Walk all targetroots for {@code *.scip} shards (and {@code *.jar} files containing them). + *
  2. Parse each shard into a {@link Scip.Index} containing exactly one {@link Scip.Document}. + *
  3. Rewrite placeholder global symbols ({@code ". . . . "} prefix) into the final {@code + * "scip-java maven g a v ..."} form via {@link SymbolRewriter}. + *
  4. Deduplicate documents by {@code relative_path}, merging occurrences/symbols. + *
  5. Compute inverse {@code is_implementation+is_reference} relationships across the project. + *
  6. Emit the metadata block and all documents through {@link ScipWriter}. + *
+ */ +public final class ScipShardAggregator { + + private final ScipWriter writer; + private final ScipSemanticdbOptions options; + private final SymbolRewriter rewriter; + + public ScipShardAggregator( + ScipWriter writer, ScipSemanticdbOptions options, SymbolRewriter rewriter) { + this.writer = writer; + this.options = options; + this.rewriter = rewriter; + } + + public static void run(ScipSemanticdbOptions options) throws IOException { + try (ScipWriter writer = new ScipWriter(options)) { + PackageTable packages = new PackageTable(options); + SymbolRewriter rewriter = new SymbolRewriter(packages); + new ScipShardAggregator(writer, options, rewriter).run(); + writer.build(); + } + } + + private void run() throws IOException { + List shards = ScipShardWalker.findScipShards(options); + Collections.sort(shards); + if (options.reporter.hasErrors()) return; + if (shards.isEmpty() && !options.allowEmptyIndex) { + options.reporter.error( + "No SCIP shard files found. " + + "This typically means that `scip-java` is unable to automatically " + + "index this codebase. If you are using Gradle or Maven, please report an issue to " + + "https://github.com/sourcegraph/scip-java and include steps to reproduce. " + + "If you are using a different build tool, make sure that you have followed all " + + "of the steps from https://sourcegraph.github.io/scip-java/docs/manual-configuration.html"); + return; + } + options.reporter.startProcessing(shards.size()); + writer.emitTyped(metadata()); + + // Deduplicate documents by relative_path. We rewrite symbols as we go so all merging happens + // on final-form strings. + LinkedHashMap merged = new LinkedHashMap<>(); + InverseReferenceRelationships inverse = new InverseReferenceRelationships(); + + for (Path shard : shards) { + try { + for (Scip.Index shardIndex : parseShard(shard)) { + for (Scip.Document doc : shardIndex.getDocumentsList()) { + Scip.Document rewritten = rewriteDocument(doc); + inverse.observe(rewritten); + Scip.Document.Builder existing = merged.get(rewritten.getRelativePath()); + if (existing == null) { + merged.put(rewritten.getRelativePath(), rewritten.toBuilder()); + } else { + mergeInto(existing, rewritten); + } + } + } + } catch (IOException e) { + options.reporter.error("invalid SCIP shard: " + shard); + options.reporter.error(e); + } + options.reporter.processedOneItem(); + } + + for (Scip.Document.Builder doc : merged.values()) { + Scip.Document withInverse = inverse.applyTo(doc.build()); + writer.emitTyped(Scip.Index.newBuilder().addDocuments(withInverse).build()); + } + + options.reporter.endProcessing(); + } + + // --- shard parsing ------------------------------------------------------- + + private static final PathMatcher JAR_PATTERN = + FileSystems.getDefault().getPathMatcher("glob:**.jar"); + + private List parseShard(Path shardPath) throws IOException { + if (JAR_PATTERN.matches(shardPath)) { + List out = new ArrayList<>(); + try (JarFile jar = new JarFile(shardPath.toFile())) { + Enumeration entries = jar.entries(); + while (entries.hasMoreElements()) { + JarEntry entry = entries.nextElement(); + if (entry.getName().endsWith(".scip")) { + try (InputStream is = jar.getInputStream(entry)) { + byte[] bytes = InputStreamBytes.readAll(is); + out.add(parseBytes(bytes)); + } + } + } + } + return out; + } + return Collections.singletonList(parseBytes(Files.readAllBytes(shardPath))); + } + + private static Scip.Index parseBytes(byte[] bytes) throws IOException { + CodedInputStream in = CodedInputStream.newInstance(bytes); + in.setRecursionLimit(1000); + return Scip.Index.parseFrom(in); + } + + // --- rewriting ----------------------------------------------------------- + + private Scip.Document rewriteDocument(Scip.Document doc) { + Scip.Document.Builder builder = doc.toBuilder().clearOccurrences().clearSymbols(); + for (Scip.Occurrence occ : doc.getOccurrencesList()) { + builder.addOccurrences(occ.toBuilder().setSymbol(rewriter.rewrite(occ.getSymbol())).build()); + } + for (Scip.SymbolInformation info : doc.getSymbolsList()) { + builder.addSymbols(rewriteSymbol(info)); + } + return builder.build(); + } + + private Scip.SymbolInformation rewriteSymbol(Scip.SymbolInformation info) { + Scip.SymbolInformation.Builder builder = info.toBuilder(); + builder.setSymbol(rewriter.rewrite(info.getSymbol())); + if (!info.getEnclosingSymbol().isEmpty()) { + builder.setEnclosingSymbol(rewriter.rewrite(info.getEnclosingSymbol())); + } + builder.clearRelationships(); + for (Scip.Relationship rel : info.getRelationshipsList()) { + builder.addRelationships( + rel.toBuilder().setSymbol(rewriter.rewrite(rel.getSymbol())).build()); + } + return builder.build(); + } + + private void mergeInto(Scip.Document.Builder target, Scip.Document fresh) { + // Deduplicate occurrences by (range, symbol, roles) so that shards produced by repeated + // compilation rounds (or by multiple targetroots) don't introduce duplicate entries. + // Variants that differ only by enclosing_range are collapsed, preferring the one that has it. + LinkedHashMap occurrences = new LinkedHashMap<>(); + for (Scip.Occurrence occ : target.getOccurrencesList()) putOccurrence(occurrences, occ); + for (Scip.Occurrence occ : fresh.getOccurrencesList()) putOccurrence(occurrences, occ); + target.clearOccurrences().addAllOccurrences(occurrences.values()); + + // Deduplicate symbols by symbol string; merge relationships of duplicates. + LinkedHashMap bySymbol = new LinkedHashMap<>(); + for (Scip.SymbolInformation info : target.getSymbolsList()) { + bySymbol.put(info.getSymbol(), info); + } + for (Scip.SymbolInformation info : fresh.getSymbolsList()) { + Scip.SymbolInformation existing = bySymbol.get(info.getSymbol()); + bySymbol.put(info.getSymbol(), existing == null ? info : mergeSymbol(existing, info)); + } + target.clearSymbols().addAllSymbols(bySymbol.values()); + } + + private static void putOccurrence( + LinkedHashMap out, Scip.Occurrence occ) { + OccurrenceKey key = OccurrenceKey.of(occ); + Scip.Occurrence existing = out.get(key); + if (existing == null) { + out.put(key, occ); + return; + } + if (existing.getEnclosingRangeCount() == 0 && occ.getEnclosingRangeCount() > 0) { + out.put(key, occ); + } + } + + private static final class OccurrenceKey { + final String symbol; + final java.util.List range; + final int roles; + + OccurrenceKey(String symbol, java.util.List range, int roles) { + this.symbol = symbol; + this.range = range; + this.roles = roles; + } + + static OccurrenceKey of(Scip.Occurrence occ) { + return new OccurrenceKey(occ.getSymbol(), occ.getRangeList(), occ.getSymbolRoles()); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof OccurrenceKey)) return false; + OccurrenceKey other = (OccurrenceKey) o; + return roles == other.roles && symbol.equals(other.symbol) && range.equals(other.range); + } + + @Override + public int hashCode() { + return java.util.Objects.hash(symbol, range, roles); + } + } + + private static Scip.SymbolInformation mergeSymbol( + Scip.SymbolInformation a, Scip.SymbolInformation b) { + Scip.SymbolInformation.Builder builder = b.toBuilder(); + LinkedHashMap rels = new LinkedHashMap<>(); + for (Scip.Relationship r : a.getRelationshipsList()) rels.put(r, r); + for (Scip.Relationship r : b.getRelationshipsList()) rels.put(r, r); + builder.clearRelationships().addAllRelationships(rels.values()); + return builder.build(); + } + + // --- metadata ------------------------------------------------------------ + + private Scip.Index metadata() { + return Scip.Index.newBuilder() + .setMetadata( + Scip.Metadata.newBuilder() + .setVersion(Scip.ProtocolVersion.UnspecifiedProtocolVersion) + .setProjectRoot(options.sourceroot.toUri().toString()) + .setTextDocumentEncoding(Scip.TextEncoding.UTF8) + .setToolInfo( + Scip.ToolInfo.newBuilder() + .setName(options.toolInfo.getName()) + .setVersion(options.toolInfo.getVersion()) + .addAllArguments(options.toolInfo.getArgumentsList()))) + .build(); + } + + // --- inverse relationships ---------------------------------------------- + + /** + * Collects symbols that override or implement other symbols, indexed by the overridden symbol. + * When a final document is emitted, the per-symbol entries are augmented with {@code + * is_implementation && is_reference} relationships pointing back to overriders. + */ + private final class InverseReferenceRelationships { + + private final Map> map = new LinkedHashMap<>(); + private final boolean enabled = options.emitInverseRelationships; + + void observe(Scip.Document doc) { + if (!enabled) return; + for (Scip.SymbolInformation info : doc.getSymbolsList()) { + if (info.getSymbol().isEmpty() || SymbolRewriter.isLocal(info.getSymbol())) continue; + if (!supportsReferenceRelationship(info)) continue; + for (Scip.Relationship rel : info.getRelationshipsList()) { + if (!rel.getIsImplementation()) continue; + if (rel.getSymbol().isEmpty() || SymbolRewriter.isLocal(rel.getSymbol())) continue; + map.computeIfAbsent(rel.getSymbol(), k -> new ArrayList<>()).add(info.getSymbol()); + } + } + } + + Scip.Document applyTo(Scip.Document doc) { + if (!enabled || map.isEmpty()) return doc; + Scip.Document.Builder builder = doc.toBuilder().clearSymbols(); + for (Scip.SymbolInformation info : doc.getSymbolsList()) { + List overriders = map.get(info.getSymbol()); + if (overriders == null || overriders.isEmpty()) { + builder.addSymbols(info); + continue; + } + Scip.SymbolInformation.Builder s = info.toBuilder(); + for (String overrider : overriders) { + s.addRelationships( + Scip.Relationship.newBuilder() + .setSymbol(overrider) + .setIsImplementation(true) + .setIsReference(true)); + } + builder.addSymbols(s.build()); + } + return builder.build(); + } + } + + private static boolean supportsReferenceRelationship(Scip.SymbolInformation info) { + switch (info.getKind()) { + case Interface: + case Type: + case Class: + case Object: + case PackageObject: + return false; + default: + return true; + } + } + +} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbWalker.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardWalker.java similarity index 56% rename from scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbWalker.java rename to scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardWalker.java index c0cd0a717..04dbfff39 100644 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbWalker.java +++ b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipShardWalker.java @@ -11,21 +11,26 @@ import java.util.ArrayList; import java.util.List; -/** A file visitor that recursively collects all SemanticDB files in a given directory. */ -public class SemanticdbWalker extends SimpleFileVisitor { +/** + * A file visitor that recursively collects per-source SCIP shard files ({@code *.scip}) emitted by + * the compiler plug-ins. Only files under a {@code META-INF/scip/} directory are returned so we + * don't accidentally re-ingest a previously-written aggregate {@code index.scip} that may live in + * the same target tree. + */ +public class ScipShardWalker extends SimpleFileVisitor { private final ArrayList result; private final ScipSemanticdbOptions options; - private final PathMatcher semanticdbPattern = - FileSystems.getDefault().getPathMatcher("glob:**.semanticdb"); + private final PathMatcher scipPattern = + FileSystems.getDefault().getPathMatcher("glob:**/META-INF/scip/**.scip"); - public SemanticdbWalker(ScipSemanticdbOptions options) { + public ScipShardWalker(ScipSemanticdbOptions options) { this.options = options; result = new ArrayList<>(); } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (semanticdbPattern.matches(file)) { + if (scipPattern.matches(file)) { result.add(file); } return super.visitFile(file, attrs); @@ -37,13 +42,14 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) { return FileVisitResult.CONTINUE; } - public static List findSemanticdbFiles(ScipSemanticdbOptions options) throws IOException { - SemanticdbWalker walker = new SemanticdbWalker(options); + /** Returns all {@code *.scip} shard files reachable from {@code options.targetroots}. */ + public static List findScipShards(ScipSemanticdbOptions options) throws IOException { + ScipShardWalker walker = new ScipShardWalker(options); PathMatcher jarPattern = FileSystems.getDefault().getPathMatcher("glob:**.jar"); for (Path root : options.targetroots) { if (jarPattern.matches(root)) { walker.result.add(root); - } else { + } else if (Files.exists(root)) { Files.walkFileTree(root, walker); } } diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipTextDocument.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipTextDocument.java deleted file mode 100644 index 4b6307a88..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipTextDocument.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; - -/** Wrapper around a SemanticDB TextDocument with SCIP-related utilities. */ -public class ScipTextDocument { - public final Path semanticdbPath; - public final Semanticdb.TextDocument semanticdb; - - public ScipTextDocument( - Path semanticdbPath, Semanticdb.TextDocument semanticdb, Path sourceroot) { - this.semanticdbPath = semanticdbPath; - String uri = sourceroot.resolve(semanticdb.getUri()).toUri().toString(); - this.semanticdb = Semanticdb.TextDocument.newBuilder(semanticdb).setUri(uri).build(); - } - - @Override - public String toString() { - return "ScipDocument{" + "path=" + semanticdbPath + ", semanticdb=" + semanticdb + '}'; - } - - public List sortedSymbolOccurrences() { - return ScipTextDocument.sortedSymbolOccurrences(semanticdb); - } - - public static List sortedSymbolOccurrences( - Semanticdb.TextDocument semanticdb) { - ArrayList result = - new ArrayList<>(semanticdb.getOccurrencesList().size()); - result.addAll(semanticdb.getOccurrencesList()); - for (Semanticdb.Synthetic synthetic : semanticdb.getSyntheticsList()) { - addAllSyntheticOccurrences(synthetic, result); - } - result.sort((o1, o2) -> new RangeComparator().compare(o1.getRange(), o2.getRange())); - return result; - } - - private static void addAllSyntheticOccurrences( - Semanticdb.Synthetic synthetic, ArrayList buffer) { - Semanticdb.Range offsetRange = - Semanticdb.Range.newBuilder(synthetic.getRange()) - .setStartLine(synthetic.getRange().getEndLine()) - .setStartCharacter(synthetic.getRange().getEndCharacter()) - .build(); - new SemanticdbTreeVisitor() { - @Override - void visitIdTree(Semanticdb.IdTree tree) { - Semanticdb.SymbolOccurrence syntheticOccurrence = - Semanticdb.SymbolOccurrence.newBuilder() - .setRange(offsetRange) - .setSymbol(tree.getSymbol()) - .setRole(Semanticdb.SymbolOccurrence.Role.REFERENCE) - .build(); - buffer.add(syntheticOccurrence); - } - }.visitTree(synthetic.getTree()); - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipWriter.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipWriter.java index 2b323740b..3a16d7db5 100644 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipWriter.java +++ b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipWriter.java @@ -49,6 +49,10 @@ public void emitTyped(Scip.Index index) { public void build() throws IOException { close(); + Path parent = options.output.getParent(); + if (parent != null) { + Files.createDirectories(parent); + } Files.move(tmp, options.output, StandardCopyOption.REPLACE_EXISTING); } diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbTreeVisitor.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbTreeVisitor.java deleted file mode 100644 index 3ecd82a48..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SemanticdbTreeVisitor.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb.*; - -public abstract class SemanticdbTreeVisitor { - public void visitTree(Tree tree) { - if (tree.hasApplyTree()) { - this.visitApplyTree(tree.getApplyTree()); - } else if (tree.hasFunctionTree()) { - this.visitFunctionTree(tree.getFunctionTree()); - } else if (tree.hasIdTree()) { - this.visitIdTree(tree.getIdTree()); - } else if (tree.hasLiteralTree()) { - this.visitLiteralTree(tree.getLiteralTree()); - } else if (tree.hasMacroExpansionTree()) { - this.visitMacroExpansionTree(tree.getMacroExpansionTree()); - } else if (tree.hasOriginalTree()) { - this.visitOriginalTree(tree.getOriginalTree()); - } else if (tree.hasSelectTree()) { - this.visitSelectTree(tree.getSelectTree()); - } else if (tree.hasTypeApplyTree()) { - this.visitTypeApplyTree(tree.getTypeApplyTree()); - } else if (tree.hasAnnotationTree()) { - this.visitAnnotationTree(tree.getAnnotationTree()); - } else if (tree.hasAssignTree()) { - this.visitAssignTree(tree.getAssignTree()); - } else if (tree.hasBinopTree()) { - this.visitBinaryOperatorTree(tree.getBinopTree()); - } - } - - void visitApplyTree(ApplyTree tree) { - visitTree(tree.getFunction()); - for (Tree argument : tree.getArgumentsList()) { - visitTree(argument); - } - } - - void visitFunctionTree(FunctionTree tree) { - for (IdTree parameter : tree.getParametersList()) { - visitIdTree(parameter); - } - visitTree(tree.getBody()); - } - - void visitIdTree(IdTree tree) {} - - void visitLiteralTree(LiteralTree tree) {} - - void visitMacroExpansionTree(MacroExpansionTree tree) { - visitTree(tree.getBeforeExpansion()); - } - - void visitOriginalTree(OriginalTree tree) {} - - void visitSelectTree(SelectTree tree) { - visitTree(tree.getQualifier()); - visitIdTree(tree.getId()); - } - - void visitTypeApplyTree(TypeApplyTree tree) { - visitTree(tree.getFunction()); - } - - void visitAnnotationTree(AnnotationTree tree) { - for (Tree parameter : tree.getParametersList()) { - visitTree(parameter); - } - } - - void visitAssignTree(AssignTree tree) { - visitTree(tree.getLhs()); - visitTree(tree.getRhs()); - } - - void visitBinaryOperatorTree(BinaryOperatorTree tree) { - visitTree(tree.getLhs()); - visitTree(tree.getRhs()); - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatter.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatter.java deleted file mode 100644 index fc306ad25..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatter.java +++ /dev/null @@ -1,822 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Property; -import com.sourcegraph.semanticdb_javac.Semanticdb.*; - -import com.sourcegraph.semanticdb_javac.SemanticdbSymbols; - -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import static com.sourcegraph.semanticdb_javac.SemanticdbBuilders.typeRef; - -public class SignatureFormatter { - private static final Type OBJECT_TYPE_REF = typeRef("java/lang/Object#"); - private static final Type PRODUCT_TYPE_REF = typeRef("scala/Product#"); - private static final Type SCALA_SERIALIZABLE_TYPE_REF = typeRef("scala/package.Serializable#"); - private static final Type JAVA_SERIALIZABLE_TYPE_REF = typeRef("java/util/Serializable#"); - private static final Type SCALA_ANY_TYPE_REF = typeRef("scala/Any#"); - private static final Type SCALA_ANYREF_TYPE_REF = typeRef("scala/AnyRef#"); - - private static final Type WILDCARD_TYPE_REF = typeRef("local_wildcard"); - - private static final Type NOTHING_SYMBOL = typeRef("scala/Nothing#"); - private static final String FUNCTION_SYMBOL_PREFIX = "scala/Function"; - // Special case scala/Function object to not conflict with Function1 for example - private static final String FUNCTION_OBJECT = "scala/Function."; - private static final String TUPLE_SYMBOL_PREFIX = "scala/Tuple"; - private static final String ARRAY_SYMBOL = "scala/Array#"; - private static final String ENUM_SYMBOL = "java/lang/Enum#"; - private static final String ANNOTATION_SYMBOL = "java/lang/annotation/Annotation#"; - private static final Set REDUNDANT_CLASS_PARENTS = new HashSet<>(); - private static final Set CASE_CLASS_PARENTS = new HashSet<>(); - - { - REDUNDANT_CLASS_PARENTS.add(OBJECT_TYPE_REF); - REDUNDANT_CLASS_PARENTS.add(SCALA_ANY_TYPE_REF); - REDUNDANT_CLASS_PARENTS.add(SCALA_ANYREF_TYPE_REF); - - CASE_CLASS_PARENTS.add(PRODUCT_TYPE_REF); - CASE_CLASS_PARENTS.add(SCALA_SERIALIZABLE_TYPE_REF); - CASE_CLASS_PARENTS.add(JAVA_SERIALIZABLE_TYPE_REF); - } - - private final StringBuilder s = new StringBuilder(); - private final SymbolInformation symbolInformation; - private final Symtab symtab; - private final boolean isScala; - - public SignatureFormatter(SymbolInformation symbolInformation, Symtab symtab) { - this.symbolInformation = symbolInformation; - this.symtab = symtab; - this.isScala = symbolInformation.getLanguage() == Language.SCALA; - } - - public String formatSymbol() { - try { - return formatSymbolUnsafe(); - } catch (Exception e) { - throw new SignatureFormatterException(symbolInformation, e); - } - } - - private String formatSymbolUnsafe() { - Signature signature = symbolInformation.getSignature(); - if (signature.hasClassSignature()) { - formatClassSignature(signature.getClassSignature()); - } else if (signature.hasMethodSignature()) { - formatMethodSignature(signature.getMethodSignature()); - } else if (signature.hasValueSignature()) { - formatValueSignature(signature.getValueSignature()); - } else if (signature.hasTypeSignature()) { - formatTypeParameterSignature(signature.getTypeSignature()); - } - return s.toString(); - } - - private void formatClassSignature(ClassSignature classSignature) { - boolean isAnnotation = - classSignature.getParentsList().stream() - .anyMatch(t -> t.getTypeRef().getSymbol().equals(ANNOTATION_SYMBOL)); - - boolean isEnum = has(Property.ENUM); - boolean isInterface = symbolInformation.getKind() == SymbolInformation.Kind.INTERFACE; - - printKeywordln(formatAnnotations()); - - printKeyword(formatAccess()); - if (!isEnum && !isAnnotation && !isInterface) printKeyword(formatModifiers()); - - switch (symbolInformation.getKind()) { - case CLASS: - if (isEnum) { - printKeyword("enum"); - } else { - printKeyword("class"); - } - break; - case INTERFACE: - if (isAnnotation) { - printKeyword("@interface"); - break; - } - printKeyword("interface"); - break; - case OBJECT: - printKeyword("object"); - break; - case TRAIT: - printKeyword("trait"); - break; - case PACKAGE_OBJECT: - printKeyword("package object"); - break; - default: - break; - } - s.append(symbolInformation.getDisplayName()); - if (symbolInformation.getKind() == SymbolInformation.Kind.CLASS && has(Property.CASE)) { - primaryConstructor(classSignature) - .ifPresent( - constructorSignature -> - formatScalaParameterList(constructorSignature.getParameterListsList())); - } - - List typeParameters = getSymlinks(classSignature.getTypeParameters()); - if (!typeParameters.isEmpty()) { - s.append( - typeParameters.stream() - .map(this::formatTypeParameter) - .collect(Collectors.joining(", ", isScala ? "[" : "<", isScala ? "]" : ">"))); - } - - boolean hasNonRedundantParent = - classSignature.getParentsList().size() > 0 - && !REDUNDANT_CLASS_PARENTS.contains(classSignature.getParentsList().get(0)); - - boolean isCaseClass = - isScala - && symbolInformation.getKind() == SymbolInformation.Kind.CLASS - && has(Property.CASE); - - List nonSyntheticParents = - classSignature.getParentsList().stream() - .filter(parent -> !REDUNDANT_CLASS_PARENTS.contains(parent)) - .filter(parent -> !parent.getTypeRef().getSymbol().equals(ENUM_SYMBOL)) - .filter(parent -> isCaseClass && !CASE_CLASS_PARENTS.contains(parent)) - .filter(parent -> !parent.getTypeRef().getSymbol().equals(ANNOTATION_SYMBOL)) - .collect(Collectors.toList()); - - if (nonSyntheticParents.isEmpty()) return; - - if (isScala) { - printKeyword(" extends"); - s.append( - nonSyntheticParents.stream().map(this::formatType).collect(Collectors.joining(" with "))); - return; - } - - // Determine which parents from ClassSignature.parents are classes or interfaces so we know to - // use - // 'extends' or 'implements'. - // The logic is as follows: - // 1. If the symbol has type CLASS, there will always be at least 1 parent. For enums, this is - // java/lang/Enum#, otherwise it is java/lang/Object# if no superclass is specified. - // Therefore, if the parents list contains java/lang/Object# type or the symbol is an enum, - // then no superclass was defined and all parents are interfaces and we must print - // 'implements' - // followed by all superinterfaces. - // Else if it is not an enum and the list of non-synthetic parents is non empty, a superclass - // was specified and we must print it with the 'extends' keyword prefixed, followed by - // 'implements' and all superinterfaces, if any. - // 2. If the symbol has type INTERFACE, then any defined parents must also be interfaces, so if - // the list of non-synthetic parents is not empty, print 'implements' and all - // superinterfaces. - switch (symbolInformation.getKind()) { - case CLASS: - // if no superclass or is an enum, every non synthetic parent is an interface - if (isEnum || !hasNonRedundantParent) { - printKeyword(" implements"); - - String superInterfaces = - nonSyntheticParents.stream().map(this::formatType).collect(Collectors.joining(", ")); - s.append(superInterfaces); - } else { - // else if has a superclass and is not an enum - printKeyword(" extends"); - s.append(formatType(nonSyntheticParents.get(0))); - - String superInterfaces = - nonSyntheticParents.stream() - .skip(1) - .map(this::formatType) - .collect(Collectors.joining(", ")); - if (!superInterfaces.isEmpty()) { - printKeyword(" implements"); - s.append(superInterfaces); - } - } - break; - case INTERFACE: - // can only extend other interfaces - printKeyword(" extends"); - - String superInterfaces = - nonSyntheticParents.stream().map(this::formatType).collect(Collectors.joining(", ")); - s.append(superInterfaces); - } - } - - private void formatMethodSignature(MethodSignature methodSignature) { - if (isScala) { - formatScalaMethodSignature(methodSignature); - return; - } - - printKeywordln(formatAnnotations()); - printKeyword(formatAccess()); - printKeyword(formatModifiers()); - - List typeParameters = getSymlinks(methodSignature.getTypeParameters()); - if (!typeParameters.isEmpty()) { - printKeyword( - typeParameters.stream() - .map(this::formatTypeParameter) - .collect(Collectors.joining(", ", "<", ">"))); - } - - if (symbolInformation.getKind() == SymbolInformation.Kind.CONSTRUCTOR) { - String owner = SymbolDescriptor.parseFromSymbol(symbolInformation.getSymbol()).owner; - // Fix for https://github.com/sourcegraph/scip-java/issues/150 - if (!owner.equals(SemanticdbSymbols.NONE)) { - s.append(SymbolDescriptor.parseFromSymbol(owner).descriptor.name); - } - } else { - printKeyword(formatType(methodSignature.getReturnType())); - s.append(symbolInformation.getDisplayName()); - } - - s.append( - methodSignature.getParameterListsList().stream() - .flatMap((params) -> getSymlinks(params).stream()) - .map(this::formatTermParameter) - .collect(Collectors.joining(", ", "(", ")"))); - - if (!methodSignature.getThrowsList().isEmpty()) { - printKeyword(" throws"); - s.append( - methodSignature.getThrowsList().stream() - .map(this::formatType) - .collect(Collectors.joining(", "))); - } - } - - private String formatTermParameter(SymbolInformation info) { - if (info == null) return ""; - if (isScala) { - return info.getDisplayName() - + ": " - + formatType(info.getSignature().getValueSignature().getTpe()); - } - return formatType(info.getSignature().getValueSignature().getTpe()) - + " " - + info.getDisplayName(); - } - - private void formatScalaMethodSignature(MethodSignature methodSignature) { - printKeywordln(formatAnnotations()); - printKeyword(formatAccess()); - printKeyword(formatModifiers()); - if (has(Property.VAL)) { - printKeyword("val"); - } else if (has(Property.VAR)) { - printKeyword("var"); - } else { - printKeyword("def"); - } - s.append( - symbolInformation.getKind() == SymbolInformation.Kind.CONSTRUCTOR - ? "this" - : symbolInformation.getDisplayName()); - formatScalaParameterList(methodSignature.getParameterListsList()); - if (symbolInformation.getKind() != SymbolInformation.Kind.CONSTRUCTOR) { - printKeyword(":"); - s.append(this.formatType(methodSignature.getReturnType())); - } - } - - private Optional primaryConstructor(ClassSignature classSignature) { - Symtab scopeSymtab = symtab.withHardlinks(classSignature.getDeclarations()); - int n = classSignature.getDeclarations().getSymlinksCount(); - for (int i = 0; i < n; i++) { - String symlink = classSignature.getDeclarations().getSymlinks(i); - SymbolInformation info = scopeSymtab.symbols.get(symlink); - if (info != null - && info.getKind() == SymbolInformation.Kind.CONSTRUCTOR - && has(Property.PRIMARY, info) - && info.hasSignature() - && info.getSignature().hasMethodSignature()) { - return Optional.of(info.getSignature().getMethodSignature()); - } - } - return Optional.empty(); - } - - private void formatScalaParameterList(List parameterList) { - for (Scope scope : parameterList) { - List infos = - scope.getHardlinksCount() > 0 ? scope.getHardlinksList() : getSymlinks(scope); - s.append( - infos.stream() - .map(this::formatTermParameter) - .collect(Collectors.joining(", ", "(", ")"))); - } - } - - private void formatValueSignature(ValueSignature valueSignature) { - printKeywordln(formatAnnotations()); - if (isEnumConstant()) { - String ownerSym = SymbolDescriptor.parseFromSymbol(symbolInformation.getSymbol()).owner; - SymbolInformation ownerInfo = symtab.symbols.get(ownerSym); - List enumConstants = - getSymlinks(ownerInfo.getSignature().getClassSignature().getDeclarations()).stream() - .filter(Objects::nonNull) - .filter(this::isEnumConstant) - .collect(Collectors.toList()); - int ordinal = enumConstants.indexOf(symbolInformation); - s.append(ownerInfo.getDisplayName()).append('.'); - s.append(this.symbolInformation.getDisplayName()); - s.append(" /* ordinal ").append(ordinal).append(" */"); - } else { - printKeyword(formatAccess()); - printKeyword(formatModifiers()); - if (isScala) { - s.append(symbolInformation.getDisplayName()); - printKeyword(":"); - printKeyword(formatType(valueSignature.getTpe())); - } else { - printKeyword(formatType(valueSignature.getTpe())); - s.append(symbolInformation.getDisplayName()); - } - } - } - - private void formatTypeParameterSignature(TypeSignature typeSignature) { - if (isScala && symbolInformation.getKind() == SymbolInformation.Kind.TYPE) { - printKeyword("type"); - } - s.append(symbolInformation.getDisplayName()); - if (typeSignature.hasLowerBound() - && (!isScala || !typeSignature.getLowerBound().equals(NOTHING_SYMBOL))) { - printKeyword(isScala ? " >:" : " super"); - s.append(formatType(typeSignature.getLowerBound())); - } - if (typeSignature.hasUpperBound() - && !typeSignature.getUpperBound().equals(isScala ? SCALA_ANY_TYPE_REF : OBJECT_TYPE_REF)) { - printKeyword(isScala ? " <:" : " extends"); - s.append(formatType(typeSignature.getUpperBound())); - } - } - - /** - * Transforms symlinks from a Scope into a List of SymbolInformation's looked up in the Symtab. - */ - private List getSymlinks(Scope scope) { - ArrayList symlinks = new ArrayList<>(); - for (int i = 0; i < scope.getSymlinksCount(); i++) { - SymbolInformation info = symtab.symbols.get(scope.getSymlinks(i)); - if (info != null) { - symlinks.add(info); - } - } - return symlinks; - } - - /** - * Formats one of a method's/class's type parameter symbols through recursion from the - * SymbolInformation extracted from the Symtab. This works by the signature being a TypeSignature. - */ - private String formatTypeParameter(SymbolInformation typeInfo) { - return new SignatureFormatter(typeInfo, symtab).formatSymbol(); - } - - private String formatTypeArguments(List typeArguments) { - if (typeArguments.isEmpty()) return ""; - - return typeArguments.stream() - .map(this::formatType) - .collect(Collectors.joining(", ", isScala ? "[" : "<", isScala ? "]" : ">")); - } - - private String formatAnnotations() { - return formatAnnotations(symbolInformation); - } - - private String formatAnnotations(SymbolInformation symInfo) { - return symInfo.getAnnotationsList().stream() - .map(this::formatAnnotation) - .collect(Collectors.joining("\n")); - } - - private String formatAnnotation(AnnotationTree annotation) { - StringBuilder b = new StringBuilder(); - b.append('@'); - b.append(formatType(annotation.getTpe())); - - if (annotation.getParametersCount() == 1) { - b.append('('); - - Tree parameter = annotation.getParameters(0); - // if only 1 parameter, and its LHS is named 'value', we can omit the 'value = ' - // https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.7.3 - AssignTree firstParam = parameter.getAssignTree(); - if (parameter.hasAssignTree() - && SymbolDescriptor.parseFromSymbol(firstParam.getLhs().getIdTree().getSymbol()) - .descriptor - .name - .equals("value")) { - b.append(formatTree(firstParam.getRhs())); - } else { - b.append(formatTree(parameter)); - } - - b.append(')'); - } else if (annotation.getParametersCount() > 1) { - b.append('('); - String parameter = - annotation.getParametersList().stream() - .map(this::formatTree) - .collect(Collectors.joining(", ")); - b.append(parameter); - b.append(')'); - } - - return b.toString(); - } - - private String formatTree(Tree tree) { - if (tree.hasIdTree()) { - return SymbolDescriptor.parseFromSymbol(tree.getIdTree().getSymbol()).descriptor.name; - } else if (tree.hasLiteralTree()) { - return formatConstant(tree.getLiteralTree().getConstant()); - } else if (tree.hasSelectTree()) { - return formatTree(tree.getSelectTree().getQualifier()) - + "." - + SymbolDescriptor.parseFromSymbol(tree.getSelectTree().getId().getSymbol()) - .descriptor - .name; - } else if (tree.hasAnnotationTree()) { - return formatAnnotation(tree.getAnnotationTree()); - } else if (tree.hasApplyTree()) { - if (tree.getApplyTree().getFunction().hasIdTree() - && tree.getApplyTree().getFunction().getIdTree().getSymbol().equals(ARRAY_SYMBOL)) { - return tree.getApplyTree().getArgumentsList().stream() - .map(this::formatTree) - .collect(Collectors.joining(", ", "{", "}")); - } else { - throw new IllegalArgumentException( - "unexpected apply tree function " + tree.getApplyTree().getFunction()); - } - } else if (tree.hasBinopTree()) { - return formatTree(tree.getBinopTree().getLhs()) - + " " - + formatBinaryOperator(tree.getBinopTree().getOp()) - + " " - + formatTree(tree.getBinopTree().getRhs()); - } else if (tree.hasAssignTree()) { - return formatTree(tree.getAssignTree().getLhs()) - + " = " - + formatTree(tree.getAssignTree().getRhs()); - } else if (tree.hasUnaryopTree()) { - return formatUnaryOperation(tree.getUnaryopTree()); - } else if (tree.hasCastTree()) { - return "(" - + formatType(tree.getCastTree().getTpe()) - + ")" - + " " - + formatTree(tree.getCastTree().getValue()); - } - - throw new IllegalArgumentException("tree was of unexpected type " + tree); - } - - private String formatUnaryOperation(UnaryOperatorTree tree) { - String formattedValue = formatTree(tree.getTree()); - switch (tree.getOp()) { - case UNARY_MINUS: - return "-" + formattedValue; - case UNARY_PLUS: - return "-" + formattedValue; - case UNARY_POSTFIX_INCREMENT: - return formattedValue + "++"; - case UNARY_POSTFIX_DECREMENT: - return formattedValue + "--"; - case UNARY_PREFIX_DECREMENT: - return "--" + formattedValue; - case UNARY_PREFIX_INCREMENT: - return "++" + formattedValue; - - case UNARY_BITWISE_COMPLEMENT: - return "~" + formattedValue; - case UNARY_LOGICAL_COMPLEMENT: - return "!" + formattedValue; - } - - throw new IllegalArgumentException( - "unary operation of unexpected type" + tree.getOp().toString()); - } - - private String formatConstant(Constant constant) { - if (constant.hasUnitConstant()) { - return isScala ? "()" : "scala.Unit()"; - } else if (constant.hasBooleanConstant()) { - return Boolean.toString(constant.getBooleanConstant().getValue()); - } else if (constant.hasByteConstant()) { - return Integer.toString(constant.getByteConstant().getValue()); - } else if (constant.hasShortConstant()) { - return Integer.toString(constant.getShortConstant().getValue()); - } else if (constant.hasCharConstant()) { - return String.format("'%s'", (char) constant.getCharConstant().getValue()); - } else if (constant.hasIntConstant()) { - return Integer.toString(constant.getIntConstant().getValue()); - } else if (constant.hasLongConstant()) { - return Long.toString(constant.getLongConstant().getValue()); - } else if (constant.hasFloatConstant()) { - return Float.toString(constant.getFloatConstant().getValue()) + 'f'; - } else if (constant.hasDoubleConstant()) { - return Double.toString(constant.getDoubleConstant().getValue()); - } else if (constant.hasStringConstant()) { - return '"' + constant.getStringConstant().getValue() + '"'; - } else if (constant.hasNullConstant()) { - return "null"; - } - throw new IllegalArgumentException("constant was not of known type " + constant); - } - - private String formatBinaryOperator(BinaryOperator op) { - switch (op) { - case PLUS: - return "+"; - case MINUS: - return "-"; - case MULTIPLY: - return "*"; - case DIVIDE: - return "/"; - case REMAINDER: - return "%"; - case GREATER_THAN: - return ">"; - case LESS_THAN: - return "<"; - case AND: - return "&"; - case XOR: - return "^"; - case OR: - return "|"; - case CONDITIONAL_AND: - return "&&"; - case CONDITIONAL_OR: - return "||"; - case SHIFT_LEFT: - return "<<"; - case SHIFT_RIGHT: - return ">>"; - case SHIFT_RIGHT_UNSIGNED: - return ">>>"; - case EQUAL_TO: - return "=="; - case NOT_EQUAL_TO: - return "!="; - case GREATER_THAN_EQUAL: - return ">="; - case LESS_THAN_EQUAL: - return "<="; - case UNRECOGNIZED: - throw new IllegalArgumentException("unexpected binary operator " + op); - } - return null; - } - - private String formatType(Type type) { - StringBuilder b = new StringBuilder(); - if (type.hasTypeRef()) { - TypeRef typeRef = type.getTypeRef(); - if (typeRef.getSymbol().equals(ARRAY_SYMBOL)) { - if (isScala) { - b.append("Array["); - b.append(formatType(typeRef.getTypeArguments(0))); - b.append("]"); - } else { - b.append(formatType(typeRef.getTypeArguments(0))); - b.append("[]"); - } - } else if (isScala - && typeRef.getSymbol().startsWith(FUNCTION_SYMBOL_PREFIX) - && typeRef.getTypeArgumentsCount() > 0 - && !typeRef.getSymbol().startsWith(FUNCTION_OBJECT)) { - int n = typeRef.getTypeArgumentsCount() - 1; - if (n == 0) { - // Special-case for Function1[A, B]: don't wrap `A` in parenthesis like this `(A) => B` - s.append(formatType(typeRef.getTypeArguments(0))); - } else { - b.append( - typeRef.getTypeArgumentsList().stream() - .limit(Math.max(0, n)) - .map(this::formatType) - .collect(Collectors.joining(", ", "(", ")"))); - } - b.append(" => "); - b.append(formatType(typeRef.getTypeArguments(n))); - } else if (isScala && typeRef.getSymbol().startsWith(TUPLE_SYMBOL_PREFIX)) { - b.append( - typeRef.getTypeArgumentsList().stream() - .map(this::formatType) - .collect(Collectors.joining(", ", "(", ")"))); - } else { - b.append(symbolDisplayName(typeRef.getSymbol())); - b.append(formatTypeArguments(typeRef.getTypeArgumentsList())); - } - } else if (type.hasSingleType()) { - SingleType tpe = type.getSingleType(); - if (tpe.hasPrefix()) { - b.append(formatType(tpe.getPrefix())); - } - SymbolInformation info = symtab.symbols.get(tpe.getSymbol()); - if (info != null) { - b.append(info.getDisplayName()).append(".type"); - } - } else if (type.hasThisType()) { - b.append("this.type"); - } else if (type.hasSuperType()) { - SuperType tpe = type.getSuperType(); - if (tpe.hasPrefix()) { - b.append(formatType(tpe.getPrefix())).append("."); - } - b.append("super"); - } else if (type.hasConstantType()) { - b.append(this.formatConstant(type.getConstantType().getConstant())); - } else if (type.hasIntersectionType()) { - b.append( - type.getIntersectionType().getTypesList().stream() - .map(this::formatType) - .collect(Collectors.joining(isScala ? " with " : " & "))); - } else if (type.hasUnionType()) { - b.append( - type.getIntersectionType().getTypesList().stream() - .map(this::formatType) - .collect(Collectors.joining(" | "))); - } else if (type.hasStructuralType()) { - StructuralType tpe = type.getStructuralType(); - int n = tpe.getDeclarations().getHardlinksCount(); - if (n == 0) { - b.append(" {}"); - } else { - b.append(formatType(tpe.getTpe())).append(" {"); - Symtab hardlinkSymtab = symtab.withHardlinks(tpe.getDeclarations()); - for (int i = 0; i < n; i++) { - SymbolInformation info = tpe.getDeclarations().getHardlinks(i); - if (i > 0) { - b.append(";"); - } - b.append(" ").append(new SignatureFormatter(info, hardlinkSymtab).formatSymbol()); - } - b.append(" }"); - } - } else if (type.hasExistentialType()) { - AtomicInteger hardlinkStep = new AtomicInteger(); - TypeRef typeRef = type.getExistentialType().getTpe().getTypeRef(); - b.append(symbolDisplayName(type.getExistentialType().getTpe().getTypeRef().getSymbol())); - b.append( - typeRef.getTypeArgumentsList().stream() - .map( - (typeArg) -> { - // if hardlink (aka wildcard) we need to reach into declarations at index - // hardlinkStep - if (typeArg.equals(WILDCARD_TYPE_REF)) { - SymbolInformation hardlink = - type.getExistentialType() - .getDeclarations() - .getHardlinks(hardlinkStep.getAndIncrement()); - return symbolDisplayName(hardlink.getSymbol()) - + new SignatureFormatter(hardlink, symtab).formatSymbol(); - } - // else for symlink we can use the usual path - return formatType(typeArg); - }) - .collect(Collectors.joining(", ", isScala ? "[" : "<", isScala ? "[" : ">"))); - } else if (type.hasByNameType()) { - b.append("=> ").append(formatType(type.getByNameType().getTpe())); - } else if (type.hasRepeatedType()) { - b.append(formatType(type.getRepeatedType().getTpe())).append("*"); - } - - return b.toString().trim(); - } - - private String formatAccess() { - Access access = symbolInformation.getAccess(); - if (access.hasPrivateAccess()) { - return "private"; - } else if (!isScala && access.hasPublicAccess()) { - return "public"; - } else if (access.hasProtectedAccess()) { - return "protected"; - } else if (isScala && access.hasPrivateThisAccess()) { - return "private[this]"; - } else if (isScala && access.hasPrivateWithinAccess()) { - String name = - SymbolDescriptor.parseFromSymbol(access.getPrivateWithinAccess().getSymbol()) - .descriptor - .name; - return String.format("protected[%s]", name); - } - return ""; - } - - // https://checkstyle.sourceforge.io/config_modifier.html#ModifierOrder - private String formatModifiers() { - ArrayList modifiers = new ArrayList<>(); - if (has(Property.ABSTRACT)) { - if (isScala && symbolInformation.getKind() != SymbolInformation.Kind.CLASS) { - } else { - modifiers.add("abstract"); - } - } - if (has(Property.DEFAULT)) modifiers.add("default"); - if (has(Property.STATIC)) modifiers.add("static"); - if (has(Property.FINAL)) { - if (symbolInformation.getKind() != SymbolInformation.Kind.OBJECT - && symbolInformation.getKind() != SymbolInformation.Kind.PACKAGE_OBJECT) { - modifiers.add("final"); - } - } - if (has(Property.IMPLICIT)) modifiers.add("implicit"); - if (has(Property.SEALED)) modifiers.add("sealed"); - if (has(Property.CASE)) modifiers.add("case"); - return String.join(" ", modifiers); - } - - private void printKeyword(String keyword) { - if (keyword.isEmpty()) return; - s.append(keyword).append(' '); - } - - private void printKeywordln(String keyword) { - if (keyword.isEmpty()) return; - s.append(keyword).append('\n'); - } - - private boolean isEnumConstant(SymbolInformation symInfo) { - if (!(has(Property.ENUM, symInfo) - && has(Property.FINAL, symInfo) - && has(Property.STATIC, symInfo) - && symInfo.getAccess().hasPublicAccess())) { - return false; - } - SymbolInformation owner = - symtab.symbols.get(SymbolDescriptor.parseFromSymbol(symInfo.getSymbol()).owner); - if (owner == null) return false; - return owner.getKind() == SymbolInformation.Kind.CLASS && has(Property.ENUM, owner); - } - - private boolean isEnumConstant() { - return isEnumConstant(symbolInformation); - } - - private boolean has(Property property, SymbolInformation symInfo) { - return (symInfo.getProperties() & property.getNumber()) > 0; - } - - private boolean has(Property property) { - return has(property, symbolInformation); - } - - /** - * Transforms a SemanticDB symbol string into its Java identifier display string. As SemanticDB - * uses Scala "primitive" types for Java primitives (but not for Java boxing primitive wrappers), - * we check for those first before attempting to decode a SemanticDB symbol. - */ - public String symbolDisplayName(String symbol) { - if (isScala) { - return symbolScalaDisplayName(symbol); - } - return symbolJavaDisplayName(symbol); - } - - private String symbolScalaDisplayName(String symbol) { - if ("local_wildcard".equals(symbol)) { - return "*"; - } - return SymbolDescriptor.parseFromSymbol(symbol).descriptor.name; - } - - private String symbolJavaDisplayName(String symbol) { - switch (symbol) { - case "local_wildcard": - return "?"; - case "scala/Boolean#": - return "boolean"; - case "scala/Byte#": - return "byte"; - case "scala/Short#": - return "short"; - case "scala/Int#": - return "int"; - case "scala/Long#": - return "long"; - case "scala/Char#": - return "char"; - case "scala/Float#": - return "float"; - case "scala/Double#": - return "double"; - case "scala/Unit#": - return "void"; - default: - return SymbolDescriptor.parseFromSymbol(symbol).descriptor.name; - } - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatterException.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatterException.java deleted file mode 100644 index 5c094aebc..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SignatureFormatterException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb; - -public class SignatureFormatterException extends RuntimeException { - public SignatureFormatterException( - Semanticdb.SymbolInformation symbolInformation, Throwable cause) { - super( - String.format( - "failed to format symbol '%s'\n%s", symbolInformation.getSymbol(), symbolInformation), - cause); - } - - @Override - public synchronized Throwable fillInStackTrace() { - // This exception doesn't have a relevant stack trace. The cause exception - // already points to the culprit filename and line number. - return this; - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolOccurrences.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolOccurrences.java deleted file mode 100644 index b4d309491..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolOccurrences.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb; - -import java.util.ArrayList; -import java.util.List; - -public class SymbolOccurrences { - public List occurrences = new ArrayList<>(); - - public void addSyntheticDefinition(String sym) { - occurrences.add( - Semanticdb.SymbolOccurrence.newBuilder() - .setSymbol(sym) - .setRole(Semanticdb.SymbolOccurrence.Role.SYNTHETIC_DEFINITION) - .build()); - } - - public void addDefinition(String sym) { - occurrences.add( - Semanticdb.SymbolOccurrence.newBuilder() - .setSymbol(sym) - .setRole(Semanticdb.SymbolOccurrence.Role.DEFINITION) - .build()); - } -} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolRewriter.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolRewriter.java new file mode 100644 index 000000000..227ffdcd1 --- /dev/null +++ b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/SymbolRewriter.java @@ -0,0 +1,58 @@ +package com.sourcegraph.scip_semanticdb; + +/** + * Rewrites placeholder SCIP global symbols emitted by the compiler plugin into their final form. + * + *

The compiler plugin does not know the Maven coordinates ({@code groupId:artifactId:version}) + * of the source it is compiling, so it emits global symbols with the sentinel prefix {@code ". . . + * . "}. The aggregator resolves the appropriate coordinates via {@link PackageTable} and rewrites + * those symbols to the final {@code "scip-java"} scheme. + * + *

{@code local N} symbols are passed through unchanged. + */ +public final class SymbolRewriter { + + /** + * Sentinel prefix used by the compiler plugin for global symbols whose coordinates are not yet + * known. + */ + public static final String PLACEHOLDER_PREFIX = ". . . . "; + + /** SCIP scheme used for symbols produced by scip-java. */ + public static final String SCIP_JAVA_SCHEME = "scip-java"; + + private final PackageTable packages; + + public SymbolRewriter(PackageTable packages) { + this.packages = packages; + } + + /** + * Returns {@code true} if {@code symbol} is a placeholder global emitted by the compiler plugin. + */ + public static boolean isPlaceholderGlobal(String symbol) { + return symbol != null && symbol.startsWith(PLACEHOLDER_PREFIX); + } + + /** + * Returns {@code true} if {@code symbol} is a SCIP local symbol of the form {@code "local N"}. + */ + public static boolean isLocal(String symbol) { + return symbol != null && symbol.startsWith("local "); + } + + /** + * Rewrites a placeholder global symbol into its final form using the appropriate package + * coordinates from {@link PackageTable}. Local symbols and already-rewritten symbols are returned + * unchanged. + */ + public String rewrite(String symbol) { + if (symbol == null || symbol.isEmpty()) return symbol; + if (isLocal(symbol)) return symbol; + if (!isPlaceholderGlobal(symbol)) return symbol; + + String descriptor = symbol.substring(PLACEHOLDER_PREFIX.length()); + Package pkg = packages.packageForSymbol(descriptor).orElse(Package.EMPTY); + return SCIP_JAVA_SCHEME + " " + pkg.scipTypedEncoding() + " " + descriptor; + } +} diff --git a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/Symtab.java b/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/Symtab.java deleted file mode 100644 index 5324df0e5..000000000 --- a/scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/Symtab.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.sourcegraph.scip_semanticdb; - -import com.sourcegraph.semanticdb_javac.Semanticdb; - -import java.util.HashMap; - -public class Symtab { - public final HashMap symbols = new HashMap<>(); - - public Symtab(Semanticdb.TextDocument document) { - for (Semanticdb.SymbolInformation symbolInformation : document.getSymbolsList()) { - symbols.put(symbolInformation.getSymbol(), symbolInformation); - } - } - - public Symtab withHardlinks(Semanticdb.Scope scope) { - Symtab hardlinkSymtab = new Symtab(Semanticdb.TextDocument.getDefaultInstance()); - hardlinkSymtab.symbols.putAll(this.symbols); - for (int i = 0; i < scope.getHardlinksCount(); i++) { - Semanticdb.SymbolInformation info = scope.getHardlinks(i); - hardlinkSymtab.symbols.put(info.getSymbol(), info); - } - return hardlinkSymtab; - } -} diff --git a/semanticdb-java/BUILD b/semanticdb-java/BUILD index 96f8844fb..d6955e206 100644 --- a/semanticdb-java/BUILD +++ b/semanticdb-java/BUILD @@ -1,24 +1,10 @@ -load("@rules_java//java:defs.bzl", "java_library", "java_proto_library") -load("@rules_proto//proto:defs.bzl", "proto_library") +load("@rules_java//java:defs.bzl", "java_library") package( default_visibility = ["//visibility:public"], ) -java_proto_library( - name = "semanticdb_java_proto", - deps = [":semanticdb_proto"], -) - -proto_library( - name = "semanticdb_proto", - srcs = glob(["src/main/protobuf/*.proto"]), -) - java_library( name = "semanticdb-java", srcs = glob(["src/main/java/**/*.java"]), - deps = [ - "//semanticdb-java/src/main/protobuf:semanticdb_java_proto", - ], ) diff --git a/semanticdb-java/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbBuilders.java b/semanticdb-java/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbBuilders.java deleted file mode 100644 index f91e7a9ed..000000000 --- a/semanticdb-java/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbBuilders.java +++ /dev/null @@ -1,242 +0,0 @@ -package com.sourcegraph.semanticdb_javac; - -import java.util.List; - -public class SemanticdbBuilders { - // SemanticDB Types - public static Semanticdb.Type typeRef(String symbol) { - return Semanticdb.Type.newBuilder() - .setTypeRef(Semanticdb.TypeRef.newBuilder().setSymbol(symbol)) - .build(); - } - - public static Semanticdb.Type typeRef(String symbol, List typeArguments) { - return Semanticdb.Type.newBuilder() - .setTypeRef( - Semanticdb.TypeRef.newBuilder().setSymbol(symbol).addAllTypeArguments(typeArguments)) - .build(); - } - - public static Semanticdb.Type existentialType( - Semanticdb.Type type, Semanticdb.Scope declarations) { - return Semanticdb.Type.newBuilder() - .setExistentialType( - Semanticdb.ExistentialType.newBuilder().setTpe(type).setDeclarations(declarations)) - .build(); - } - - public static Semanticdb.Type intersectionType(List types) { - return Semanticdb.Type.newBuilder() - .setIntersectionType(Semanticdb.IntersectionType.newBuilder().addAllTypes(types)) - .build(); - } - - // SemanticDB Signatures - - public static Semanticdb.Signature signature(Semanticdb.ClassSignature.Builder signature) { - return Semanticdb.Signature.newBuilder().setClassSignature(signature).build(); - } - - public static Semanticdb.Signature signature(Semanticdb.MethodSignature.Builder signature) { - return Semanticdb.Signature.newBuilder().setMethodSignature(signature).build(); - } - - public static Semanticdb.Signature signature(Semanticdb.ValueSignature.Builder signature) { - return Semanticdb.Signature.newBuilder().setValueSignature(signature).build(); - } - - public static Semanticdb.Signature signature(Semanticdb.TypeSignature.Builder signature) { - return Semanticdb.Signature.newBuilder().setTypeSignature(signature).build(); - } - - // SemanticDB Symbols - - public static Semanticdb.SymbolOccurrence symbolOccurrence( - String symbol, - Semanticdb.Range range, - Semanticdb.SymbolOccurrence.Role role, - java.util.Optional enclosingRange) { - Semanticdb.SymbolOccurrence.Builder builder = - Semanticdb.SymbolOccurrence.newBuilder().setSymbol(symbol).setRange(range).setRole(role); - enclosingRange.ifPresent(builder::setEnclosingRange); - return builder.build(); - } - - public static Semanticdb.SymbolInformation.Builder symbolInformation(String symbol) { - return Semanticdb.SymbolInformation.newBuilder().setSymbol(symbol); - } - - // SemanticDB Access - - public static Semanticdb.Access privateAccess() { - return Semanticdb.Access.newBuilder() - .setPrivateAccess(Semanticdb.PrivateAccess.newBuilder()) - .build(); - } - - public static Semanticdb.Access publicAccess() { - return Semanticdb.Access.newBuilder() - .setPublicAccess(Semanticdb.PublicAccess.newBuilder()) - .build(); - } - - public static Semanticdb.Access protectedAccess() { - return Semanticdb.Access.newBuilder() - .setProtectedAccess(Semanticdb.ProtectedAccess.newBuilder()) - .build(); - } - - public static Semanticdb.Access privateWithinAccess(String symbol) { - return Semanticdb.Access.newBuilder() - .setPrivateWithinAccess(Semanticdb.PrivateWithinAccess.newBuilder().setSymbol(symbol)) - .build(); - } - - // SemanticDB Trees - - public static Semanticdb.Tree tree(Semanticdb.IdTree idTree) { - return Semanticdb.Tree.newBuilder().setIdTree(idTree).build(); - } - - public static Semanticdb.IdTree idTree(String symbol) { - return Semanticdb.IdTree.newBuilder().setSymbol(symbol).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.ApplyTree applyTree) { - return Semanticdb.Tree.newBuilder().setApplyTree(applyTree).build(); - } - - public static Semanticdb.ApplyTree applyTree( - Semanticdb.Tree function, Iterable arguments) { - return Semanticdb.ApplyTree.newBuilder() - .setFunction(function) - .addAllArguments(arguments) - .build(); - } - - public static Semanticdb.Tree tree(Semanticdb.SelectTree selectTree) { - return Semanticdb.Tree.newBuilder().setSelectTree(selectTree).build(); - } - - public static Semanticdb.SelectTree selectTree( - Semanticdb.Tree qualifier, Semanticdb.IdTree idTree) { - return Semanticdb.SelectTree.newBuilder().setQualifier(qualifier).setId(idTree).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.LiteralTree literalTree) { - return Semanticdb.Tree.newBuilder().setLiteralTree(literalTree).build(); - } - - public static Semanticdb.LiteralTree literalTree(Semanticdb.Constant constant) { - return Semanticdb.LiteralTree.newBuilder().setConstant(constant).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.AnnotationTree annotationTree) { - return Semanticdb.Tree.newBuilder().setAnnotationTree(annotationTree).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.BinaryOperatorTree binaryOperatorTree) { - return Semanticdb.Tree.newBuilder().setBinopTree(binaryOperatorTree).build(); - } - - public static Semanticdb.BinaryOperatorTree binopTree( - Semanticdb.Tree lhs, Semanticdb.BinaryOperator operator, Semanticdb.Tree rhs) { - return Semanticdb.BinaryOperatorTree.newBuilder() - .setLhs(lhs) - .setOp(operator) - .setRhs(rhs) - .build(); - } - - public static Semanticdb.Tree tree(Semanticdb.UnaryOperatorTree unaryOperatorTree) { - return Semanticdb.Tree.newBuilder().setUnaryopTree(unaryOperatorTree).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.CastTree castTree) { - return Semanticdb.Tree.newBuilder().setCastTree(castTree).build(); - } - - public static Semanticdb.UnaryOperatorTree unaryOpTree( - Semanticdb.UnaryOperator operator, Semanticdb.Tree rhs) { - return Semanticdb.UnaryOperatorTree.newBuilder().setOp(operator).setTree(rhs).build(); - } - - public static Semanticdb.Tree tree(Semanticdb.AssignTree assignTree) { - return Semanticdb.Tree.newBuilder().setAssignTree(assignTree).build(); - } - - public static Semanticdb.AssignTree assignTree(Semanticdb.Tree lhs, Semanticdb.Tree rhs) { - return Semanticdb.AssignTree.newBuilder().setLhs(lhs).setRhs(rhs).build(); - } - - public static Semanticdb.CastTree castTree(Semanticdb.Type type, Semanticdb.Tree value) { - return Semanticdb.CastTree.newBuilder().setTpe(type).setValue(value).build(); - } - - public static Semanticdb.AnnotationTree annotationTree( - Semanticdb.Type type, Iterable parameters) { - return Semanticdb.AnnotationTree.newBuilder().setTpe(type).addAllParameters(parameters).build(); - } - - // SemanticDB Constants - - public static Semanticdb.Constant stringConst(String value) { - return Semanticdb.Constant.newBuilder() - .setStringConstant(Semanticdb.StringConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant doubleConst(Double value) { - return Semanticdb.Constant.newBuilder() - .setDoubleConstant(Semanticdb.DoubleConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant nullConst() { - return Semanticdb.Constant.newBuilder() - .setNullConstant(Semanticdb.NullConstant.newBuilder()) - .build(); - } - - public static Semanticdb.Constant floatConst(Float value) { - return Semanticdb.Constant.newBuilder() - .setFloatConstant(Semanticdb.FloatConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant longConst(Long value) { - return Semanticdb.Constant.newBuilder() - .setLongConstant(Semanticdb.LongConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant intConst(Integer value) { - return Semanticdb.Constant.newBuilder() - .setIntConstant(Semanticdb.IntConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant charConst(Character value) { - return Semanticdb.Constant.newBuilder() - .setCharConstant(Semanticdb.CharConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant shortConst(Short value) { - return Semanticdb.Constant.newBuilder() - .setShortConstant(Semanticdb.ShortConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant byteConst(Byte value) { - return Semanticdb.Constant.newBuilder() - .setByteConstant(Semanticdb.ByteConstant.newBuilder().setValue(value)) - .build(); - } - - public static Semanticdb.Constant booleanConst(Boolean value) { - return Semanticdb.Constant.newBuilder() - .setBooleanConstant(Semanticdb.BooleanConstant.newBuilder().setValue(value)) - .build(); - } -} diff --git a/semanticdb-java/src/main/protobuf/BUILD b/semanticdb-java/src/main/protobuf/BUILD deleted file mode 100644 index 88669718b..000000000 --- a/semanticdb-java/src/main/protobuf/BUILD +++ /dev/null @@ -1,16 +0,0 @@ -load("@rules_java//java:defs.bzl", "java_proto_library") -load("@rules_proto//proto:defs.bzl", "proto_library") - -package( - default_visibility = ["//visibility:public"], -) - -java_proto_library( - name = "semanticdb_java_proto", - deps = [":semanticdb_proto"], -) - -proto_library( - name = "semanticdb_proto", - srcs = ["semanticdb.proto"] -) diff --git a/semanticdb-java/src/main/protobuf/semanticdb.proto b/semanticdb-java/src/main/protobuf/semanticdb.proto deleted file mode 100644 index a671f4689..000000000 --- a/semanticdb-java/src/main/protobuf/semanticdb.proto +++ /dev/null @@ -1,468 +0,0 @@ -// Original source: https://github.com/scalameta/scalameta/blob/cf796cf2436b40494baf2bdc266623dc65264ad5/semanticdb/semanticdb/semanticdb.proto -// Local modifications: -// - Removes unused fields to minimize the amount of generated code. -// - Adds SymbolInformation.documentation that is pending upstream approval. - -syntax = "proto3"; - -package com.sourcegraph.semanticdb_javac; - -enum Schema { - LEGACY = 0; - SEMANTICDB3 = 3; - SEMANTICDB4 = 4; -} - -message TextDocuments { - repeated TextDocument documents = 1; -} - -message TextDocument { - reserved 4, 8, 9; - Schema schema = 1; - string uri = 2; - string text = 3; - string md5 = 11; - Language language = 10; - repeated SymbolInformation symbols = 5; - repeated SymbolOccurrence occurrences = 6; - repeated Synthetic synthetics = 12; -} - -enum Language { - UNKNOWN_LANGUAGE = 0; - SCALA = 1; - JAVA = 2; - KOTLIN = 3; -} - -message Range { - int32 start_line = 1; - int32 start_character = 2; - int32 end_line = 3; - int32 end_character = 4; -} - -message Signature { - oneof sealed_value { - ClassSignature class_signature = 1; - MethodSignature method_signature = 2; - TypeSignature type_signature = 3; - ValueSignature value_signature = 4; - } -} - -message ClassSignature { - Scope type_parameters = 1; - repeated Type parents = 2; - Scope declarations = 4; -} - -message MethodSignature { - Scope type_parameters = 1; - repeated Scope parameter_lists = 2; - Type return_type = 3; - repeated Type throws = 4; -} - -message TypeSignature { - Scope type_parameters = 1; - Type lower_bound = 2; - Type upper_bound = 3; -} - -message ValueSignature { - Type tpe = 1; -} - -message SymbolInformation { - enum Kind { - reserved 1, 2, 4, 5, 15, 16; - UNKNOWN_KIND = 0; - LOCAL = 19; - FIELD = 20; - METHOD = 3; - CONSTRUCTOR = 21; - MACRO = 6; - TYPE = 7; - PARAMETER = 8; - SELF_PARAMETER = 17; - TYPE_PARAMETER = 9; - OBJECT = 10; - PACKAGE = 11; - PACKAGE_OBJECT = 12; - CLASS = 13; - TRAIT = 14; - INTERFACE = 18; - } - enum Property { - UNKNOWN_PROPERTY = 0; - reserved 0x1; - reserved 0x2; - ABSTRACT = 0x4; - FINAL = 0x8; - SEALED = 0x10; - IMPLICIT = 0x20; - LAZY = 0x40; - CASE = 0x80; - COVARIANT = 0x100; - CONTRAVARIANT = 0x200; - VAL = 0x400; - VAR = 0x800; - STATIC = 0x1000; - PRIMARY = 0x2000; - ENUM = 0x4000; - DEFAULT = 0x8000; - } - reserved 2, 6, 7, 8, 9, 10, 11, 12, 14; - string symbol = 1; - Language language = 16; - Kind kind = 3; - int32 properties = 4; - string display_name = 5; - // -- OUT OF SPEC -- // - repeated AnnotationTree annotations = 13; - // -- OUT OF SPEC -- // - Signature signature = 17; - Access access = 18; - repeated string overridden_symbols = 19; - Documentation documentation = 20; - string enclosing_symbol = 15; - - // -- OUT OF SPEC -- // - repeated string definition_relationships = 21; - // -- OUT OF SPEC -- // -} - -message Access { - oneof sealed_value { - PrivateAccess private_access = 1; - PrivateThisAccess private_this_access = 2; - PrivateWithinAccess private_within_access = 3; - ProtectedAccess protected_access = 4; - PublicAccess public_access = 7; - } -} - -message PrivateAccess {} - -message PrivateWithinAccess { - string symbol = 1; -} - -message PrivateThisAccess { -} - -message ProtectedAccess {} - -message PublicAccess {} - -message Documentation { - enum Format { - HTML = 0; - MARKDOWN = 1; - JAVADOC = 2; - SCALADOC = 3; - KDOC = 4; - } - string message = 1; - Format format = 2; -} - -message SymbolOccurrence { - enum Role { - UNKNOWN_ROLE = 0; - REFERENCE = 1; - DEFINITION = 2; - // NOTE: this role does not exist in the upstream SemanticDB spec. - // WE added SYNTHETIC_DEFINITION fix the following scip-java issue: - // https://github.com/sourcegraph/scip-java/issues/399 - SYNTHETIC_DEFINITION = 3; - } - Range range = 1; - string symbol = 2; - Role role = 3; - // NOTE: this field does not exist in the upstream SemanticDB spec. - // It is added to support SCIP's enclosing_range field. - // This is the range of the nearest non-trivial enclosing AST node. - optional Range enclosing_range = 4; -} - -message Scope { - repeated string symlinks = 1; - repeated SymbolInformation hardlinks = 2; -} - -message Type { - reserved 1, 3, 4, 5, 6, 11, 12, 15, 16; - oneof sealed_value { - TypeRef type_ref = 2; - SingleType single_type = 20; - ThisType this_type = 21; - SuperType super_type = 22; - ConstantType constant_type = 23; - IntersectionType intersection_type = 17; - UnionType union_type = 18; - WithType with_type = 19; - StructuralType structural_type = 7; - AnnotatedType annotated_type = 8; - ExistentialType existential_type = 9; - UniversalType universal_type = 10; - ByNameType by_name_type = 13; - RepeatedType repeated_type = 14; - } -} - - -message TypeRef { - Type prefix = 1; - string symbol = 2; - repeated Type type_arguments = 3; -} - -message SingleType { - Type prefix = 1; - string symbol = 2; -} - -message ThisType { - string symbol = 1; -} - -message SuperType { - Type prefix = 1; - string symbol = 2; -} - -message ConstantType { - Constant constant = 1; -} - -message IntersectionType { - repeated Type types = 1; -} - -message UnionType { - repeated Type types = 1; -} - -message WithType { - repeated Type types = 1; -} - -message StructuralType { - reserved 1, 2, 3; - Type tpe = 4; - Scope declarations = 5; -} - -message AnnotatedType { - reserved 2; - repeated AnnotationTree annotations = 3; - Type tpe = 1; -} - -message ExistentialType { - reserved 2; - Type tpe = 1; - Scope declarations = 3; -} - -message UniversalType { - reserved 1; - Scope type_parameters = 3; - Type tpe = 2; -} - -message ByNameType { - Type tpe = 1; -} - -message RepeatedType { - Type tpe = 1; -} - -message Synthetic { - Range range = 1; - Tree tree = 2; -} - -message Tree { - oneof sealed_value { - ApplyTree apply_tree = 1; - FunctionTree function_tree = 2; - IdTree id_tree = 3; - LiteralTree literal_tree = 4; - MacroExpansionTree macro_expansion_tree = 5; - OriginalTree original_tree = 6; - SelectTree select_tree = 7; - TypeApplyTree type_apply_tree = 8; - // -- OUT OF SPEC -- // - AnnotationTree annotation_tree = 9; - AssignTree assign_tree = 10; - BinaryOperatorTree binop_tree = 11; - UnaryOperatorTree unaryop_tree = 12; - CastTree cast_tree = 13; - // -- OUT OF SPEC -- // - } -} - -message ApplyTree { - Tree function = 1; - repeated Tree arguments = 2; -} - - -message FunctionTree { - repeated IdTree parameters = 1; - Tree body = 2; -} - -message IdTree { - string symbol = 1; -} - - -message LiteralTree { - Constant constant = 1; -} - -message MacroExpansionTree { - Tree before_expansion = 1; - Type tpe = 2; -} - -message OriginalTree { - Range range = 1; -} - -message SelectTree { - Tree qualifier = 1; - IdTree id = 2; -} - -message TypeApplyTree { - Tree function = 1; - repeated Type type_arguments = 2; -} - -// -- OUT OF SPEC -- // -message AnnotationTree { - Type tpe = 1; - repeated Tree parameters = 2; -} - - -message CastTree { - Type tpe = 1; - Tree value = 2; -} - -message AssignTree { - Tree lhs = 1; - Tree rhs = 2; -} - -message BinaryOperatorTree { - Tree lhs = 1; - BinaryOperator op = 2; - Tree rhs = 3; -} - -enum BinaryOperator { - PLUS = 0; - MINUS = 1; - MULTIPLY = 2; - DIVIDE = 3; - REMAINDER = 4; - GREATER_THAN = 5; - LESS_THAN = 6; - AND = 7; - XOR = 8; - OR = 9; - CONDITIONAL_AND = 10; - CONDITIONAL_OR = 11; - SHIFT_LEFT = 12; - SHIFT_RIGHT = 13; - SHIFT_RIGHT_UNSIGNED = 14; - EQUAL_TO = 15; - NOT_EQUAL_TO = 16; - GREATER_THAN_EQUAL = 17; - LESS_THAN_EQUAL = 18; -} - -// https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15 -message UnaryOperatorTree { - UnaryOperator op = 1; - Tree tree = 2; -} - -enum UnaryOperator { - UNARY_MINUS = 0; - UNARY_PLUS = 1; - UNARY_POSTFIX_INCREMENT = 2; - UNARY_POSTFIX_DECREMENT = 3; - UNARY_PREFIX_DECREMENT = 4; - UNARY_PREFIX_INCREMENT = 5; - UNARY_BITWISE_COMPLEMENT = 6; - UNARY_LOGICAL_COMPLEMENT = 7; -} -// -- OUT OF SPEC -- // - -message Constant { - oneof sealed_value { - UnitConstant unit_constant = 1; - BooleanConstant boolean_constant = 2; - ByteConstant byte_constant = 3; - ShortConstant short_constant = 4; - CharConstant char_constant = 5; - IntConstant int_constant = 6; - LongConstant long_constant = 7; - FloatConstant float_constant = 8; - DoubleConstant double_constant = 9; - StringConstant string_constant = 10; - NullConstant null_constant = 11; - } -} - -message UnitConstant { -} - -message BooleanConstant { - bool value = 1; -} - -message ByteConstant { - int32 value = 1; -} - -message ShortConstant { - int32 value = 1; -} - -message CharConstant { - int32 value = 1; -} - -message IntConstant { - int32 value = 1; -} - -message LongConstant { - int64 value = 1; -} - -message FloatConstant { - float value = 1; -} - -message DoubleConstant { - double value = 1; -} - -message StringConstant { - string value = 1; -} - -message NullConstant { -} diff --git a/semanticdb-javac/BUILD b/semanticdb-javac/BUILD index 37a6e13f9..e7dad490c 100644 --- a/semanticdb-javac/BUILD +++ b/semanticdb-javac/BUILD @@ -34,7 +34,6 @@ java_library( srcs = glob(["src/main/java/**/*.java"]), resources = ["src/main/resources/META-INF/services/com.sun.source.util.Plugin"], deps = [ - "//semanticdb-java/src/main/protobuf:semanticdb_java_proto", "//semanticdb-java", ":javac-import", ], diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipOccurrences.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipOccurrences.java new file mode 100644 index 000000000..d4b29e913 --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipOccurrences.java @@ -0,0 +1,66 @@ +package com.sourcegraph.semanticdb_javac; + +import com.sourcegraph.Scip; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Objects; + +/** + * Helpers for deduplicating SCIP {@link Scip.Occurrence} entries by their {@code (symbol, range, + * roles)} key. Variants that differ only in whether {@code enclosing_range} is set are collapsed, + * preferring the one that carries the enclosing range. + */ +final class ScipOccurrences { + + private ScipOccurrences() {} + + /** Returns a new list with duplicate occurrences collapsed in insertion order. */ + static List deduplicate(List occurrences) { + LinkedHashMap out = new LinkedHashMap<>(); + for (Scip.Occurrence occ : occurrences) put(out, occ); + return new ArrayList<>(out.values()); + } + + /** Inserts {@code occ} into {@code out}, collapsing duplicates by {@link Key}. */ + static void put(LinkedHashMap out, Scip.Occurrence occ) { + Key key = Key.of(occ); + Scip.Occurrence existing = out.get(key); + if (existing == null) { + out.put(key, occ); + return; + } + if (existing.getEnclosingRangeCount() == 0 && occ.getEnclosingRangeCount() > 0) { + out.put(key, occ); + } + } + + static final class Key { + final String symbol; + final List range; + final int roles; + + private Key(String symbol, List range, int roles) { + this.symbol = symbol; + this.range = range; + this.roles = roles; + } + + static Key of(Scip.Occurrence occ) { + return new Key(occ.getSymbol(), occ.getRangeList(), occ.getSymbolRoles()); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Key)) return false; + Key other = (Key) o; + return roles == other.roles && symbol.equals(other.symbol) && range.equals(other.range); + } + + @Override + public int hashCode() { + return Objects.hash(symbol, range, roles); + } + } +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRange.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRange.java new file mode 100644 index 000000000..96132043f --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRange.java @@ -0,0 +1,41 @@ +package com.sourcegraph.semanticdb_javac; + +import java.util.Arrays; +import java.util.List; + +/** + * Lightweight value type for source ranges produced by {@link ScipVisitor}. + * + *

Coordinates are zero-based and follow the SCIP convention (line + character, end-exclusive + * character). Convertible directly to SCIP's {@code repeated int32 range} representation via {@link + * #asScipRange()}. + */ +final class ScipRange { + final int startLine; + final int startCharacter; + final int endLine; + final int endCharacter; + + ScipRange(int startLine, int startCharacter, int endLine, int endCharacter) { + this.startLine = startLine; + this.startCharacter = startCharacter; + this.endLine = endLine; + this.endCharacter = endCharacter; + } + + /** Returns a copy with adjusted start/end characters (used to correct for tab-expansion). */ + ScipRange withCharacters(int startCharacter, int endCharacter) { + return new ScipRange(startLine, startCharacter, endLine, endCharacter); + } + + /** + * Encodes the range using SCIP's compact {@code repeated int32 range} layout: 3 ints when the + * range fits on a single line, 4 ints otherwise. + */ + List asScipRange() { + if (startLine == endLine) { + return Arrays.asList(startLine, startCharacter, endCharacter); + } + return Arrays.asList(startLine, startCharacter, endLine, endCharacter); + } +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRole.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRole.java new file mode 100644 index 000000000..6ddbd2344 --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipRole.java @@ -0,0 +1,11 @@ +package com.sourcegraph.semanticdb_javac; + +/** + * Minimal role enum used by {@link ScipVisitor} when emitting SCIP occurrences. Mirrors the subset + * of {@code Semanticdb.SymbolOccurrence.Role} that the direct-to-SCIP visitor cares about. + */ +enum ScipRole { + DEFINITION, + REFERENCE, + SYNTHETIC_DEFINITION +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipShardWriter.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipShardWriter.java new file mode 100644 index 000000000..5bf5df35b --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipShardWriter.java @@ -0,0 +1,119 @@ +package com.sourcegraph.semanticdb_javac; + +import com.sourcegraph.Scip; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Writes and merges per-source SCIP shards produced by the compiler plugin. + * + *

Each source file produces a self-contained {@link Scip.Index} shard containing a single {@link + * Scip.Document}. When a shard already exists on disk (e.g. during annotation processing rounds), + * the new document is merged into the existing one, deduplicating occurrences, symbols and + * relationships. + */ +public final class ScipShardWriter { + + private ScipShardWriter() {} + + /** + * Writes the given {@code shard} to {@code output}, creating parent directories as needed. If + * {@code output} already exists, the existing shard is parsed and merged with the new one. + */ + public static void writeOrMerge(Path output, Scip.Index shard) throws IOException { + Files.createDirectories(output.getParent()); + if (Files.exists(output)) { + Scip.Index existing; + try (InputStream is = Files.newInputStream(output)) { + existing = Scip.Index.parseFrom(is); + } + shard = merge(existing, shard); + } + Files.write(output, shard.toByteArray()); + } + + /** + * Merges two SCIP shards by combining their document lists. Documents that share a {@code + * relative_path} have their occurrences, symbols and external symbols deduplicated. + */ + static Scip.Index merge(Scip.Index a, Scip.Index b) { + Scip.Index.Builder builder = Scip.Index.newBuilder(); + if (b.hasMetadata()) { + builder.setMetadata(b.getMetadata()); + } else if (a.hasMetadata()) { + builder.setMetadata(a.getMetadata()); + } + + LinkedHashMap byPath = new LinkedHashMap<>(); + for (Scip.Document doc : a.getDocumentsList()) { + byPath.put(doc.getRelativePath(), doc); + } + for (Scip.Document doc : b.getDocumentsList()) { + Scip.Document existing = byPath.get(doc.getRelativePath()); + if (existing == null) { + byPath.put(doc.getRelativePath(), doc); + } else { + byPath.put(doc.getRelativePath(), mergeDocuments(existing, doc)); + } + } + builder.addAllDocuments(byPath.values()); + + // External symbols: deduplicate by symbol string. Last writer wins to keep latest data. + LinkedHashMap externals = new LinkedHashMap<>(); + for (Scip.SymbolInformation s : a.getExternalSymbolsList()) externals.put(s.getSymbol(), s); + for (Scip.SymbolInformation s : b.getExternalSymbolsList()) externals.put(s.getSymbol(), s); + builder.addAllExternalSymbols(externals.values()); + + return builder.build(); + } + + private static Scip.Document mergeDocuments(Scip.Document a, Scip.Document b) { + Scip.Document.Builder builder = b.toBuilder().clearOccurrences().clearSymbols(); + // Use the most recent metadata for language/relative_path/text/encoding which already + // come from b via toBuilder(). + + // Deduplicate occurrences by (range, symbol, roles). Variants that differ only in + // enclosing_range get collapsed, preferring the one that carries the enclosing range. + LinkedHashMap occurrences = new LinkedHashMap<>(); + for (Scip.Occurrence occ : a.getOccurrencesList()) ScipOccurrences.put(occurrences, occ); + for (Scip.Occurrence occ : b.getOccurrencesList()) ScipOccurrences.put(occurrences, occ); + builder.addAllOccurrences(occurrences.values()); + + // Deduplicate symbols by symbol string; merge relationships and documentation. + Map bySymbol = new LinkedHashMap<>(); + for (Scip.SymbolInformation info : a.getSymbolsList()) bySymbol.put(info.getSymbol(), info); + for (Scip.SymbolInformation info : b.getSymbolsList()) { + Scip.SymbolInformation existing = bySymbol.get(info.getSymbol()); + bySymbol.put(info.getSymbol(), existing == null ? info : mergeSymbol(existing, info)); + } + builder.addAllSymbols(bySymbol.values()); + + return builder.build(); + } + + private static Scip.SymbolInformation mergeSymbol( + Scip.SymbolInformation a, Scip.SymbolInformation b) { + Scip.SymbolInformation.Builder builder = b.toBuilder(); + // Merge relationships, deduplicating by structural equality with deterministic ordering. + Map rels = new LinkedHashMap<>(); + for (Scip.Relationship r : a.getRelationshipsList()) rels.put(r, r); + for (Scip.Relationship r : b.getRelationshipsList()) rels.put(r, r); + builder.clearRelationships().addAllRelationships(rels.values()); + + // Merge documentation, preserving order and avoiding duplicates. + List docs = new ArrayList<>(a.getDocumentationList()); + for (String d : b.getDocumentationList()) { + if (!docs.contains(d)) docs.add(d); + } + builder.clearDocumentation().addAllDocumentation(docs); + + return builder.build(); + } +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSignatureFormatter.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSignatureFormatter.java new file mode 100644 index 000000000..91dd63892 --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSignatureFormatter.java @@ -0,0 +1,288 @@ +package com.sourcegraph.semanticdb_javac; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.TypeParameterElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.ArrayType; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.IntersectionType; +import javax.lang.model.type.NoType; +import javax.lang.model.type.PrimitiveType; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.type.TypeVariable; +import javax.lang.model.type.WildcardType; +import javax.lang.model.util.SimpleTypeVisitor8; + +/** + * Formats a Java {@link Element} as a human-readable declaration string suitable for SCIP's {@code + * SymbolInformation.signature_documentation.text}. + * + *

This is a port of the Java-relevant parts of {@code SignatureFormatter} that runs directly + * over javac's {@link Element}/{@link TypeMirror} APIs, eliminating the need to round-trip through + * SemanticDB signatures. + */ +public final class ScipSignatureFormatter { + + private final Element sym; + + public ScipSignatureFormatter(Element sym) { + this.sym = sym; + } + + /** Returns the formatted signature, or {@code ""} if {@link #sym} has no meaningful signature. */ + public String formatSymbol() { + StringBuilder out = new StringBuilder(); + switch (sym.getKind()) { + case CLASS: + case INTERFACE: + case ANNOTATION_TYPE: + case ENUM: + formatType(out, (TypeElement) sym); + break; + case CONSTRUCTOR: + case METHOD: + formatExecutable(out, (ExecutableElement) sym); + break; + case FIELD: + case ENUM_CONSTANT: + case PARAMETER: + case LOCAL_VARIABLE: + case EXCEPTION_PARAMETER: + case RESOURCE_VARIABLE: + formatVariable(out, (VariableElement) sym); + break; + case TYPE_PARAMETER: + formatTypeParameter(out, (TypeParameterElement) sym); + break; + default: + return ""; + } + return out.toString(); + } + + private static void formatAnnotations(StringBuilder out, Element element) { + for (AnnotationMirror mirror : element.getAnnotationMirrors()) { + out.append('@').append(simpleName(mirror.getAnnotationType())).append('\n'); + } + } + + private static String simpleName(TypeMirror t) { + if (t instanceof DeclaredType) { + Element e = ((DeclaredType) t).asElement(); + return e.getSimpleName().toString(); + } + return t.toString(); + } + + private static void formatModifiers(StringBuilder out, Set modifiers) { + for (Modifier m : modifiers) { + out.append(m.toString()).append(' '); + } + } + + private void formatType(StringBuilder out, TypeElement type) { + formatAnnotations(out, type); + formatModifiers(out, type.getModifiers()); + switch (type.getKind()) { + case ENUM: + out.append("enum "); + break; + case INTERFACE: + out.append("interface "); + break; + case ANNOTATION_TYPE: + out.append("@interface "); + break; + case CLASS: + default: + out.append("class "); + break; + } + out.append(type.getSimpleName()); + formatTypeParameters(out, type.getTypeParameters()); + + TypeMirror superclass = type.getSuperclass(); + if (superclass.getKind() != TypeKind.NONE + && !isJavaLangObject(superclass) + && type.getKind() != ElementKind.INTERFACE) { + out.append(" extends "); + formatTypeMirror(out, superclass); + } + + List interfaces = type.getInterfaces(); + if (!interfaces.isEmpty()) { + out.append(type.getKind() == ElementKind.INTERFACE ? " extends " : " implements "); + formatJoin(out, interfaces, ", "); + } + } + + private void formatExecutable(StringBuilder out, ExecutableElement method) { + formatAnnotations(out, method); + formatModifiers(out, method.getModifiers()); + if (!method.getTypeParameters().isEmpty()) { + formatTypeParameters(out, method.getTypeParameters()); + out.append(' '); + } + if (method.getKind() != ElementKind.CONSTRUCTOR) { + formatTypeMirror(out, method.getReturnType()); + out.append(' '); + out.append(method.getSimpleName()); + } else { + // Constructor: name = enclosing class simple name + out.append(method.getEnclosingElement().getSimpleName()); + } + out.append('('); + Iterator it = method.getParameters().iterator(); + while (it.hasNext()) { + VariableElement p = it.next(); + formatTypeMirror(out, p.asType()); + out.append(' ').append(p.getSimpleName()); + if (it.hasNext()) out.append(", "); + } + out.append(')'); + List thrown = method.getThrownTypes(); + if (!thrown.isEmpty()) { + out.append(" throws "); + formatJoin(out, thrown, ", "); + } + } + + private void formatVariable(StringBuilder out, VariableElement variable) { + formatAnnotations(out, variable); + formatModifiers(out, variable.getModifiers()); + if (variable.getKind() == ElementKind.ENUM_CONSTANT) { + out.append(variable.getSimpleName()); + } else { + formatTypeMirror(out, variable.asType()); + out.append(' ').append(variable.getSimpleName()); + } + } + + private void formatTypeParameter(StringBuilder out, TypeParameterElement tp) { + out.append(tp.getSimpleName()); + List bounds = tp.getBounds(); + if (!bounds.isEmpty()) { + // Skip implicit `extends Object`. + if (bounds.size() != 1 || !isJavaLangObject(bounds.get(0))) { + out.append(" extends "); + formatJoin(out, bounds, " & "); + } + } + } + + private void formatTypeParameters( + StringBuilder out, List typeParameters) { + if (typeParameters.isEmpty()) return; + out.append('<'); + Iterator it = typeParameters.iterator(); + while (it.hasNext()) { + formatTypeParameter(out, it.next()); + if (it.hasNext()) out.append(", "); + } + out.append('>'); + } + + private void formatJoin(StringBuilder out, List types, String separator) { + Iterator it = types.iterator(); + while (it.hasNext()) { + formatTypeMirror(out, it.next()); + if (it.hasNext()) out.append(separator); + } + } + + private void formatTypeMirror(StringBuilder out, TypeMirror type) { + type.accept(new TypePrinter(), out); + } + + private static boolean isJavaLangObject(TypeMirror type) { + if (!(type instanceof DeclaredType)) return false; + Element e = ((DeclaredType) type).asElement(); + return e instanceof TypeElement + && ((TypeElement) e).getQualifiedName().contentEquals("java.lang.Object"); + } + + /** Prints a TypeMirror using simple-names + type arguments + array brackets. */ + private static final class TypePrinter extends SimpleTypeVisitor8 { + + @Override + public Void visitDeclared(DeclaredType t, StringBuilder out) { + out.append(simpleName(t)); + List args = t.getTypeArguments(); + if (!args.isEmpty()) { + out.append('<'); + Iterator it = args.iterator(); + while (it.hasNext()) { + visit(it.next(), out); + if (it.hasNext()) out.append(", "); + } + out.append('>'); + } + return null; + } + + @Override + public Void visitArray(ArrayType t, StringBuilder out) { + visit(t.getComponentType(), out); + out.append("[]"); + return null; + } + + @Override + public Void visitPrimitive(PrimitiveType t, StringBuilder out) { + out.append(t.getKind().name().toLowerCase()); + return null; + } + + @Override + public Void visitTypeVariable(TypeVariable t, StringBuilder out) { + out.append(t.asElement().getSimpleName()); + return null; + } + + @Override + public Void visitWildcard(WildcardType t, StringBuilder out) { + out.append('?'); + if (t.getExtendsBound() != null) { + out.append(" extends "); + visit(t.getExtendsBound(), out); + } else if (t.getSuperBound() != null) { + out.append(" super "); + visit(t.getSuperBound(), out); + } + return null; + } + + @Override + public Void visitIntersection(IntersectionType t, StringBuilder out) { + Iterator it = t.getBounds().iterator(); + while (it.hasNext()) { + visit(it.next(), out); + if (it.hasNext()) out.append(" & "); + } + return null; + } + + @Override + public Void visitNoType(NoType t, StringBuilder out) { + if (t.getKind() == TypeKind.VOID) { + out.append("void"); + } + return null; + } + + @Override + protected Void defaultAction(TypeMirror t, StringBuilder out) { + out.append(t.toString()); + return null; + } + } +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSymbols.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSymbols.java new file mode 100644 index 000000000..736b287cd --- /dev/null +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipSymbols.java @@ -0,0 +1,46 @@ +package com.sourcegraph.semanticdb_javac; + +/** + * Helpers for emitting SCIP symbol strings from the compiler plugin. + * + *

Because the compiler plugin does not know the final Maven coordinates ({@code + * groupId:artifactId:version}) at compile time, it emits global symbols using a sentinel + * placeholder scheme that is rewritten by the aggregator to its final form: + * + *

+ *   ". . . . " + <semanticdb-style descriptor path>
+ *     ->  "scip-java maven <groupId> <artifactId> <version> <descriptor path>"
+ * 
+ * + *

Local symbols are emitted using the canonical SCIP {@code "local N"} form (with the space) and + * are not rewritten by the aggregator. + */ +public final class ScipSymbols { + + /** + * Prefix marking a global symbol whose package coordinates must be filled in by the aggregator. + * The trailing space matches the SCIP grammar requirement of separating the scheme from the + * package fields. + */ + public static final String PLACEHOLDER_PREFIX = ". . . . "; + + private ScipSymbols() {} + + /** + * Converts a SemanticDB-style symbol string (as produced by {@link GlobalSymbolsCache} and {@link + * LocalSymbolsCache}) into the SCIP symbol form expected by the aggregator. + * + *

    + *
  • Empty strings stay empty. + *
  • Local symbols of the form {@code "local42"} become {@code "local 42"}. + *
  • Everything else is prefixed with {@link #PLACEHOLDER_PREFIX}. + *
+ */ + public static String fromSemanticdbSymbol(String symbol) { + if (symbol == null || symbol.isEmpty()) return ""; + if (SemanticdbSymbols.isLocal(symbol)) { + return "local " + symbol.substring("local".length()); + } + return PLACEHOLDER_PREFIX + symbol; + } +} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbVisitor.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipVisitor.java similarity index 56% rename from semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbVisitor.java rename to semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipVisitor.java index 3a24aa885..11f487832 100644 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbVisitor.java +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/ScipVisitor.java @@ -1,60 +1,58 @@ package com.sourcegraph.semanticdb_javac; -import com.sun.source.util.SourcePositions; -import com.sun.source.util.Trees; -import com.sun.source.util.TreePathScanner; -import com.sun.source.util.TreePath; +import com.sourcegraph.Scip; +import com.sun.source.tree.AnnotatedTypeTree; +import com.sun.source.tree.ClassTree; import com.sun.source.tree.CompilationUnitTree; -import com.sun.source.tree.MemberReferenceTree; +import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.IdentifierTree; -import com.sun.source.tree.VariableTree; -import com.sun.source.tree.ClassTree; -import com.sun.source.tree.Tree; -import com.sun.source.tree.MethodTree; import com.sun.source.tree.LineMap; -import com.sun.source.tree.ExpressionTree; -import com.sun.source.tree.NewClassTree; +import com.sun.source.tree.MemberReferenceTree; import com.sun.source.tree.MemberSelectTree; -import com.sun.source.tree.PackageTree; -import com.sun.source.tree.TypeCastTree; -import com.sun.source.tree.TypeParameterTree; +import com.sun.source.tree.MethodTree; +import com.sun.source.tree.NewClassTree; import com.sun.source.tree.ParameterizedTypeTree; -import com.sun.source.tree.AnnotatedTypeTree; - -import javax.tools.Diagnostic; -import javax.lang.model.element.Element; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.Name; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.type.NoType; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.util.Types; -import javax.lang.model.util.Elements; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Kind; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Property; -import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolOccurrence.Role; +import com.sun.source.tree.Tree; +import com.sun.source.tree.TypeParameterTree; +import com.sun.source.tree.VariableTree; +import com.sun.source.util.SourcePositions; +import com.sun.source.util.TreePath; +import com.sun.source.util.TreePathScanner; +import com.sun.source.util.Trees; import java.io.IOException; import java.nio.file.Path; -import java.util.List; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; -import java.util.HashSet; -import java.util.Set; import java.util.Objects; import java.util.Optional; -import java.util.Iterator; -import java.security.NoSuchAlgorithmException; +import java.util.Set; import java.util.stream.Collectors; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.Name; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.NoType; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; +import javax.lang.model.util.Types; +import javax.tools.Diagnostic; -import static com.sourcegraph.semanticdb_javac.SemanticdbBuilders.*; - -/** Walks the AST of a typechecked compilation unit and generates a SemanticDB TextDocument. */ -public class SemanticdbVisitor extends TreePathScanner { +/** + * Walks the AST of a typechecked compilation unit and generates a {@link Scip.Document} directly. + * + *

Symbols are produced through {@link GlobalSymbolsCache} and then translated to the + * placeholder SCIP form via {@link ScipSymbols#fromSemanticdbSymbol(String)}. Signature + * documentation is produced by {@link ScipSignatureFormatter} directly from javac's element model. + */ +public final class ScipVisitor extends TreePathScanner { private final GlobalSymbolsCache globals; private final LocalSymbolsCache locals; @@ -63,146 +61,249 @@ public class SemanticdbVisitor extends TreePathScanner { private final CompilationUnitTree compUnitTree; private final Elements elements; private final SemanticdbJavacOptions options; - private final ArrayList occurrences; - private final ArrayList symbolInfos; - private String source; - private String uri; - + private final ArrayList occurrences; + private final LinkedHashMap symbols; + private final String source; + private final String relativePath; private final LinkedHashMap nodes; - public SemanticdbVisitor( + public ScipVisitor( GlobalSymbolsCache globals, CompilationUnitTree compUnitTree, SemanticdbJavacOptions options, Types types, Trees trees, Elements elements) { - this.globals = globals; // Reused cache between compilation units. - this.locals = new LocalSymbolsCache(); // Fresh cache per compilation unit. + this.globals = globals; + this.locals = new LocalSymbolsCache(); this.options = options; this.types = types; this.elements = elements; this.trees = trees; this.compUnitTree = compUnitTree; this.occurrences = new ArrayList<>(); - this.symbolInfos = new ArrayList<>(); - this.source = semanticdbText(); - this.uri = semanticdbUri(compUnitTree, options); + this.symbols = new LinkedHashMap<>(); + this.source = sourceText(compUnitTree); + this.relativePath = sourceRelativePath(compUnitTree, options); this.nodes = new LinkedHashMap<>(); } - public Semanticdb.TextDocument buildTextDocument(CompilationUnitTree tree) { - this.scan(tree, null); // Trigger recursive AST traversal to collect SemanticDB information. - + /** Builds a single-document {@link Scip.Index} shard for the given compilation unit. */ + public Scip.Index buildShard(CompilationUnitTree tree) { + this.scan(tree, null); resolveNodes(); - return Semanticdb.TextDocument.newBuilder() - .setSchema(Semanticdb.Schema.SEMANTICDB4) - .setLanguage(Semanticdb.Language.JAVA) - .setUri(uri) - .setText(options.includeText ? this.source : "") - .setMd5(semanticdbMd5()) - .addAllOccurrences(occurrences) - .addAllSymbols(symbolInfos) - .build(); + Scip.Document.Builder document = + Scip.Document.newBuilder() + .setRelativePath(relativePath) + .setLanguage(LANGUAGE_JAVA); + if (options.includeText) { + document.setText(source); + } + document.addAllOccurrences(ScipOccurrences.deduplicate(occurrences)); + document.addAllSymbols(symbols.values()); + + return Scip.Index.newBuilder().addDocuments(document).build(); } - private Optional emitSymbolOccurrence( - Element sym, Tree tree, Name name, Role role, CompilerRange kind) { + /** SCIP {@code Document.language} value for Java sources. */ + static final String LANGUAGE_JAVA = "java"; + + // ========================== + // Symbol/occurrence emission + // ========================== + + private Optional emitSymbolOccurrence( + Element sym, Tree tree, Name name, ScipRole role, CompilerRange kind) { if (sym == null || name == null) return Optional.empty(); - Optional range = semanticdbRange(tree, kind, sym, name.toString()); - if (role == Role.DEFINITION) { - emitSymbolOccurrence(sym, range, role, computeEnclosingRange(tree)); - // Only emit SymbolInformation for symbols that are defined in this compilation unit. + Optional range = scipRangeOf(tree, kind, sym, name.toString()); + if (role == ScipRole.DEFINITION) { + emitOccurrence(sym, range, role, computeEnclosingRange(tree)); emitSymbolInformation(sym, tree); return range; } - emitSymbolOccurrence(sym, range, role, Optional.empty()); + emitOccurrence(sym, range, role, Optional.empty()); return range; } - private void emitSymbolOccurrence( + private void emitOccurrence( Element sym, - Optional range, - Role role, - Optional enclosingRange) { - if (sym == null) return; - Optional occ = - semanticdbOccurrence(sym, range, role, enclosingRange); - occ.ifPresent(occurrences::add); + Optional range, + ScipRole role, + Optional enclosingRange) { + if (sym == null || !range.isPresent()) return; + String semanticdbSymbol = semanticdbSymbol(sym); + if (semanticdbSymbol.equals(SemanticdbSymbols.NONE)) return; + + Scip.Occurrence.Builder occ = + Scip.Occurrence.newBuilder() + .addAllRange(range.get().asScipRange()) + .setSymbol(ScipSymbols.fromSemanticdbSymbol(semanticdbSymbol)) + .setSymbolRoles(scipRole(role)); + enclosingRange.ifPresent(r -> occ.addAllEnclosingRange(r.asScipRange())); + occurrences.add(occ.build()); } private void emitSymbolInformation(Element sym, Tree tree) { - String symbol = semanticdbSymbol(sym); - Semanticdb.SymbolInformation.Builder builder = symbolInformation(symbol); - Semanticdb.Documentation documentation = semanticdbDocumentation(tree); - if (documentation != null) builder.setDocumentation(documentation); - Semanticdb.Signature signature = semanticdbSignature(sym); - if (signature != null) builder.setSignature(signature); - if (SemanticdbSymbols.isLocal(symbol)) { + String semanticdbSymbol = semanticdbSymbol(sym); + if (semanticdbSymbol.equals(SemanticdbSymbols.NONE)) return; + + Scip.SymbolInformation.Builder builder = + Scip.SymbolInformation.newBuilder() + .setSymbol(ScipSymbols.fromSemanticdbSymbol(semanticdbSymbol)) + .setDisplayName(sym.getSimpleName().toString()) + .setKind(scipKind(sym)); + + if (SemanticdbSymbols.isLocal(semanticdbSymbol)) { String enclosingSymbol = semanticdbSymbol(sym.getEnclosingElement()); - if (enclosingSymbol != null) builder.setEnclosingSymbol(enclosingSymbol); + if (enclosingSymbol != null && !enclosingSymbol.equals(SemanticdbSymbols.NONE)) { + builder.setEnclosingSymbol(ScipSymbols.fromSemanticdbSymbol(enclosingSymbol)); + } } - List annotations = - new SemanticdbTrees(globals, locals, uri, types, trees, nodes).annotations(tree); - if (annotations != null) builder.addAllAnnotations(annotations); + String documentation = semanticdbDocumentation(tree); + if (documentation != null && !documentation.isEmpty()) { + builder.addDocumentation(documentation); + } - builder - .setProperties(semanticdbSymbolInfoProperties(sym)) - .setDisplayName(sym.getSimpleName().toString()) - .setAccess(semanticdbAccess(sym)); + String signature = new ScipSignatureFormatter(sym).formatSymbol(); + if (!signature.isEmpty()) { + builder.setSignatureDocumentation( + Scip.Document.newBuilder() + .setLanguage(LANGUAGE_JAVA) + .setRelativePath(relativePath) + .setText(signature)); + } + + boolean supportsReferenceRel = supportsReferenceRelationship(sym); switch (sym.getKind()) { case ENUM: case CLASS: - builder.setKind(Kind.CLASS); - builder.addAllOverriddenSymbols(semanticdbParentSymbols((TypeElement) sym)); - break; case INTERFACE: case ANNOTATION_TYPE: - builder.setKind(Kind.INTERFACE); - builder.addAllOverriddenSymbols(semanticdbParentSymbols((TypeElement) sym)); - break; - case FIELD: - builder.setKind(Kind.FIELD); + addParentRelationships(builder, (TypeElement) sym, supportsReferenceRel); break; case METHOD: - builder.setKind(Kind.METHOD); - builder.addAllOverriddenSymbols( + for (String overridden : semanticdbOverrides( - (ExecutableElement) sym, sym.getEnclosingElement(), new HashSet<>())); - break; - case CONSTRUCTOR: - builder.setKind(Kind.CONSTRUCTOR); - break; - case TYPE_PARAMETER: - builder.setKind(Kind.TYPE_PARAMETER); + (ExecutableElement) sym, sym.getEnclosingElement(), new HashSet<>())) { + if (isIgnoredOverriddenSymbol(overridden)) continue; + builder.addRelationships( + Scip.Relationship.newBuilder() + .setSymbol(ScipSymbols.fromSemanticdbSymbol(overridden)) + .setIsImplementation(true) + .setIsReference(supportsReferenceRel)); + } break; - case ENUM_CONSTANT: // overwrite previous value here - String args = - ((NewClassTree) ((VariableTree) tree).getInitializer()) - .getArguments().stream() - .map(ExpressionTree::toString) - .collect(Collectors.joining(", ")); - if (!args.isEmpty()) - builder.setDisplayName(sym.getSimpleName().toString() + "(" + args + ")"); + case ENUM_CONSTANT: + if (tree instanceof VariableTree && ((VariableTree) tree).getInitializer() != null) { + String args = + ((NewClassTree) ((VariableTree) tree).getInitializer()) + .getArguments().stream() + .map(ExpressionTree::toString) + .collect(Collectors.joining(", ")); + if (!args.isEmpty()) { + builder.setDisplayName(sym.getSimpleName().toString() + "(" + args + ")"); + } + } break; - case LOCAL_VARIABLE: - builder.setKind(Kind.LOCAL); + default: break; } - Semanticdb.SymbolInformation info = builder.build(); + // Deduplicate by symbol; last write wins so newly discovered metadata takes precedence. + symbols.put(builder.getSymbol(), builder.build()); + } + + private void addParentRelationships( + Scip.SymbolInformation.Builder builder, TypeElement sym, boolean supportsReferenceRel) { + for (String parent : semanticdbParentSymbols(sym)) { + if (isIgnoredOverriddenSymbol(parent)) continue; + builder.addRelationships( + Scip.Relationship.newBuilder() + .setSymbol(ScipSymbols.fromSemanticdbSymbol(parent)) + .setIsImplementation(true) + .setIsReference(supportsReferenceRel)); + } + } + + private static boolean isIgnoredOverriddenSymbol(String symbol) { + return symbol.equals("java/lang/Object#"); + } + + private static boolean supportsReferenceRelationship(Element sym) { + switch (sym.getKind()) { + case INTERFACE: + case CLASS: + case ANNOTATION_TYPE: + case ENUM: + return false; + default: + return true; + } + } + + // ================================================= + // Role / kind translation for SCIP emission. + // ================================================= + + private static int scipRole(ScipRole role) { + if (role == ScipRole.DEFINITION || role == ScipRole.SYNTHETIC_DEFINITION) { + return Scip.SymbolRole.Definition_VALUE; + } + return 0; + } + + private static Scip.SymbolInformation.Kind scipKind(Element sym) { + Set modifiers = sym.getModifiers(); + boolean isStatic = modifiers.contains(Modifier.STATIC); + // A `default` interface method has both ABSTRACT and DEFAULT modifiers; treat it as non-abstract. + boolean isAbstract = + modifiers.contains(Modifier.ABSTRACT) && !modifiers.contains(Modifier.DEFAULT); - symbolInfos.add(info); + switch (sym.getKind()) { + case ENUM: + return Scip.SymbolInformation.Kind.Enum; + case ENUM_CONSTANT: + return Scip.SymbolInformation.Kind.EnumMember; + case CLASS: + return Scip.SymbolInformation.Kind.Class; + case INTERFACE: + case ANNOTATION_TYPE: + return Scip.SymbolInformation.Kind.Interface; + case FIELD: + return isStatic + ? Scip.SymbolInformation.Kind.StaticField + : Scip.SymbolInformation.Kind.Field; + case CONSTRUCTOR: + return Scip.SymbolInformation.Kind.Constructor; + case METHOD: + if (isStatic) return Scip.SymbolInformation.Kind.StaticMethod; + if (isAbstract) return Scip.SymbolInformation.Kind.AbstractMethod; + return Scip.SymbolInformation.Kind.Method; + case TYPE_PARAMETER: + return Scip.SymbolInformation.Kind.TypeParameter; + case LOCAL_VARIABLE: + case EXCEPTION_PARAMETER: + case RESOURCE_VARIABLE: + return Scip.SymbolInformation.Kind.Variable; + case PARAMETER: + return Scip.SymbolInformation.Kind.Parameter; + case PACKAGE: + return Scip.SymbolInformation.Kind.Package; + default: + return Scip.SymbolInformation.Kind.UnspecifiedKind; + } } + // =========================================== + // Node resolution and traversal (unchanged from SemanticdbVisitor) + // =========================================== + void resolveNodes() { - // ignore parts of NewClassTree. It would cause references to classes in addition to references - // to constructors. In these cases, the references to classes aren't wanted HashSet ignoreNodes = new HashSet<>(); - for (Tree node : nodes.keySet()) + for (Tree node : nodes.keySet()) { if (node instanceof NewClassTree) { NewClassTree newClassTree = (NewClassTree) node; if (newClassTree.getClassBody() == null) { @@ -213,6 +314,7 @@ void resolveNodes() { ignoreNodes.add(newClassTree.getIdentifier()); } } + } for (Map.Entry entry : nodes.entrySet()) { Tree node = entry.getKey(); @@ -238,9 +340,6 @@ void resolveNodes() { } } - // ======================================= - // Overridden methods from TreePathScanner - // ======================================= @Override public Void scan(Tree tree, Void unused) { if (tree != null) { @@ -250,25 +349,10 @@ public Void scan(Tree tree, Void unused) { return super.scan(tree, unused); } - @Override - public Void visitPackage(PackageTree node, Void unused) { - // Stop traversal at the package declaration. JDK 17+ TreePathScanner - // recurses into the package name's identifiers and would emit a - // self-reference for `package X.Y;`; JDK 11 does not. Skipping the - // whole package subtree keeps semanticdb output stable across JDKs and - // matches the long-standing JDK 8/11 behavior of not emitting a - // reference for the package declaration itself. - return null; - } - private boolean isAnonymous(Element sym) { return sym.getSimpleName().length() == 0; } - public static B bar(A paramA, B paramB) { - return paramB; - } - private void resolveClassTree(ClassTree node, TreePath treePath) { Element sym = trees.getElement(treePath); if (sym != null && sym.getSimpleName().length() > 0) { @@ -276,7 +360,7 @@ private void resolveClassTree(ClassTree node, TreePath treePath) { sym, node, sym.getSimpleName(), - Role.DEFINITION, + ScipRole.DEFINITION, CompilerRange.FROM_POINT_WITH_TEXT_SEARCH); } } @@ -285,7 +369,7 @@ private void resolveTypeParameterTree(TypeParameterTree node, TreePath treePath) Element sym = trees.getElement(treePath); if (sym != null && sym.getSimpleName().length() > 0) { emitSymbolOccurrence( - sym, node, sym.getSimpleName(), Role.DEFINITION, CompilerRange.FROM_POINT_TO_SYMBOL_NAME); + sym, node, sym.getSimpleName(), ScipRole.DEFINITION, CompilerRange.FROM_POINT_TO_SYMBOL_NAME); } } @@ -299,7 +383,7 @@ private void resolveMethodTree(MethodTree node, TreePath treePath) { else name = sym.getSimpleName(); emitSymbolOccurrence( - sym, node, name, Role.DEFINITION, CompilerRange.FROM_POINT_WITH_TEXT_SEARCH); + sym, node, name, ScipRole.DEFINITION, CompilerRange.FROM_POINT_WITH_TEXT_SEARCH); } } } @@ -307,17 +391,17 @@ private void resolveMethodTree(MethodTree node, TreePath treePath) { private void resolveVariableTree(VariableTree node, TreePath treePath) { Element sym = trees.getElement(treePath); if (sym != null) { - Optional range = + Optional range = emitSymbolOccurrence( sym, node, sym.getSimpleName(), - Role.DEFINITION, + ScipRole.DEFINITION, CompilerRange.FROM_POINT_WITH_TEXT_SEARCH); if (sym.getKind() == ElementKind.ENUM_CONSTANT) { TreePath typeTreePath = nodes.get(node.getInitializer()); Element typeSym = trees.getElement(typeTreePath); - if (typeSym != null) emitSymbolOccurrence(typeSym, range, Role.REFERENCE, Optional.empty()); + if (typeSym != null) emitOccurrence(typeSym, range, ScipRole.REFERENCE, Optional.empty()); } } } @@ -329,13 +413,12 @@ private void resolveIdentifierTree(IdentifierTree node, TreePath treePath) { if (sym != null) { boolean isThis = nodeName.toString().equals("this"); boolean isSuper = !isThis && nodeName.toString().equals("super"); - // exclude `this.` references but include `this(` and `super(` references if (((sym.getKind() == ElementKind.CONSTRUCTOR) == isThis) || (isSuper)) { TreePath parentPath = treePath.getParentPath(); Element parentSym = trees.getElement(parentPath); if (parentSym == null || parentSym.getKind() != null) { emitSymbolOccurrence( - sym, node, sym.getSimpleName(), Role.REFERENCE, CompilerRange.FROM_START_TO_END); + sym, node, sym.getSimpleName(), ScipRole.REFERENCE, CompilerRange.FROM_START_TO_END); } } } @@ -346,7 +429,7 @@ private void resolveMemberReferenceTree(MemberReferenceTree node, TreePath treeP Element sym = trees.getElement(treePath); if (sym != null) { emitSymbolOccurrence( - sym, node, sym.getSimpleName(), Role.REFERENCE, CompilerRange.FROM_END_TO_SYMBOL_NAME); + sym, node, sym.getSimpleName(), ScipRole.REFERENCE, CompilerRange.FROM_END_TO_SYMBOL_NAME); } } @@ -354,38 +437,33 @@ private void resolveMemberSelectTree(MemberSelectTree node, TreePath treePath) { Element sym = trees.getElement(treePath); if (sym != null) { emitSymbolOccurrence( - sym, node, sym.getSimpleName(), Role.REFERENCE, CompilerRange.FROM_END_TO_SYMBOL_NAME); + sym, node, sym.getSimpleName(), ScipRole.REFERENCE, CompilerRange.FROM_END_TO_SYMBOL_NAME); } } private void resolveNewClassTree(NewClassTree node, TreePath treePath) { - // ignore anonymous classes - otherwise there will be a local reference to itself if (node.getIdentifier() != null && node.getClassBody() == null) { Element sym = trees.getElement(treePath); if (sym != null) { TreePath parentPath = treePath.getParentPath(); Element parentSym = trees.getElement(parentPath); - if (parentSym == null || parentSym.getKind() != ElementKind.ENUM_CONSTANT) { TreePath identifierTreePath = nodes.get(node.getIdentifier()); Element identifierSym = trees.getElement(identifierTreePath); - // Simplest case, e.g. `new String()` if (identifierSym != null) { emitSymbolOccurrence( sym, node, identifierSym.getSimpleName(), - Role.REFERENCE, + ScipRole.REFERENCE, CompilerRange.FROM_TEXT_SEARCH); - } - // More complex case, where the type is annotated: `new @TypeParameters String()` - else if (node.getIdentifier().getKind() == Tree.Kind.ANNOTATED_TYPE) { + } else if (node.getIdentifier().getKind() == Tree.Kind.ANNOTATED_TYPE) { AnnotatedTypeTree annotatedTypeTree = (AnnotatedTypeTree) node.getIdentifier(); if (annotatedTypeTree.getUnderlyingType() != null && annotatedTypeTree.getUnderlyingType().getKind() == Tree.Kind.IDENTIFIER) { IdentifierTree ident = (IdentifierTree) annotatedTypeTree.getUnderlyingType(); emitSymbolOccurrence( - sym, ident, ident.getName(), Role.REFERENCE, CompilerRange.FROM_TEXT_SEARCH); + sym, ident, ident.getName(), ScipRole.REFERENCE, CompilerRange.FROM_TEXT_SEARCH); } } } @@ -394,19 +472,14 @@ else if (node.getIdentifier().getKind() == Tree.Kind.ANNOTATED_TYPE) { } // ================================================= - // Utilities to generate SemanticDB data structures. + // Symbol / range helpers used by the SCIP emission path. // ================================================= - private Semanticdb.Signature semanticdbSignature(Element sym) { - - return new SemanticdbSignatures(globals, locals, types).generateSignature(sym); - } - private String semanticdbSymbol(Element sym) { return globals.semanticdbSymbol(sym, locals); } - private Optional semanticdbRange( + private Optional scipRangeOf( Tree tree, CompilerRange kind, Element sym, String name) { if (sym == null) return Optional.empty(); @@ -425,97 +498,59 @@ private Optional semanticdbRange( } } else if (kind.isFromPoint()) { if (start != Diagnostic.NOPOS) { - // text may not exist or may be out of bounds (e.g. generated source like Lombok) int testEnd = start + name.length(); - if (source.length() > testEnd && source.substring(start, testEnd).equals(name)) + if (source.length() > testEnd && source.substring(start, testEnd).equals(name)) { end = testEnd; + } } } else if (kind.isFromEndPoint()) { if (end != Diagnostic.NOPOS) { - // text may not exist or may be out of bounds (e.g. generated source like Lombok) int testStart = end - name.length(); if (testStart >= 0 && source.length() > end - && source.substring(testStart, end).equals(name)) start = testStart; + && source.substring(testStart, end).equals(name)) { + start = testStart; + } } } } if (start != Diagnostic.NOPOS && end != Diagnostic.NOPOS && end > start) { LineMap lineMap = compUnitTree.getLineMap(); - Semanticdb.Range range = - Semanticdb.Range.newBuilder() - .setStartLine((int) lineMap.getLineNumber(start) - 1) - .setStartCharacter((int) lineMap.getColumnNumber(start) - 1) - .setEndLine((int) lineMap.getLineNumber(end) - 1) - .setEndCharacter((int) lineMap.getColumnNumber(end) - 1) - .build(); + ScipRange range = + new ScipRange( + (int) lineMap.getLineNumber(start) - 1, + (int) lineMap.getColumnNumber(start) - 1, + (int) lineMap.getLineNumber(end) - 1, + (int) lineMap.getColumnNumber(end) - 1); range = correctForTabs(range, lineMap, start); - return Optional.of(range); } return Optional.empty(); } - private Semanticdb.Range correctForTabs(Semanticdb.Range range, LineMap lineMap, int start) { + private ScipRange correctForTabs(ScipRange range, LineMap lineMap, int start) { int startLinePos = (int) lineMap.getPosition(lineMap.getLineNumber(start), 0); - - // javac replaces every tab with 8 spaces in the linemap. As this is potentially inconsistent - // with the source file itself, we adjust for that here if the line is actually indented with - // tabs. - // As for every tab there are 8 spaces, we remove 7 spaces for every tab to get the correct - // char offset (note: different to _column_ offset your editor shows) if (this.source.charAt(startLinePos) == '\t') { int count = 1; while (this.source.charAt(++startLinePos) == '\t') count++; range = - range - .toBuilder() - .setStartCharacter(range.getStartCharacter() - (count * 7)) - .setEndCharacter(range.getEndCharacter() - (count * 7)) - .build(); + range.withCharacters( + range.startCharacter - (count * 7), range.endCharacter - (count * 7)); } - return range; } - private Optional semanticdbOccurrence( - Element sym, - Optional range, - Role role, - Optional enclosingRange) { - if (range.isPresent()) { - String ssym = semanticdbSymbol(sym); - if (!ssym.equals(SemanticdbSymbols.NONE)) { - Semanticdb.SymbolOccurrence occ = symbolOccurrence(ssym, range.get(), role, enclosingRange); - return Optional.of(occ); - } else { - return Optional.empty(); - } - } else { - return Optional.empty(); - } - } - - /** - * Computes the enclosing range for the given tree node. Returns the range of the nearest - * non-trivial enclosing AST node. For definition occurrences, this includes the entire definition - * including documentation. For reference occurrences, this includes the parent expression bounds. - */ - private Optional computeEnclosingRange(Tree tree) { + private Optional computeEnclosingRange(Tree tree) { if (tree == null) return Optional.empty(); - TreePath path = nodes.get(tree); if (path == null) return Optional.empty(); - // For method, class, and variable definitions, use the tree itself as the enclosing range - // since we're processing the definition node Tree enclosingTree = tree; if (!(tree instanceof MethodTree || tree instanceof ClassTree || tree instanceof VariableTree)) { - // For non-definition nodes (like references), use the parent TreePath parentPath = path.getParentPath(); if (parentPath == null) return Optional.empty(); enclosingTree = parentPath.getLeaf(); @@ -528,58 +563,26 @@ private Optional computeEnclosingRange(Tree tree) { if (start != Diagnostic.NOPOS && end != Diagnostic.NOPOS && end > start) { LineMap lineMap = compUnitTree.getLineMap(); - Semanticdb.Range range = - Semanticdb.Range.newBuilder() - .setStartLine((int) lineMap.getLineNumber(start) - 1) - .setStartCharacter((int) lineMap.getColumnNumber(start) - 1) - .setEndLine((int) lineMap.getLineNumber(end) - 1) - .setEndCharacter((int) lineMap.getColumnNumber(end) - 1) - .build(); - + ScipRange range = + new ScipRange( + (int) lineMap.getLineNumber(start) - 1, + (int) lineMap.getColumnNumber(start) - 1, + (int) lineMap.getLineNumber(end) - 1, + (int) lineMap.getColumnNumber(end) - 1); range = correctForTabs(range, lineMap, start); - return Optional.of(range); } - return Optional.empty(); } - private String semanticdbText() { - if (source != null) return source; + private static String sourceText(CompilationUnitTree tree) { try { - source = compUnitTree.getSourceFile().getCharContent(true).toString(); + return tree.getSourceFile().getCharContent(true).toString(); } catch (IOException e) { - source = ""; - } - return source; - } - - private String semanticdbMd5() { - try { - return MD5.digest(compUnitTree.getSourceFile().getCharContent(true).toString()); - } catch (IOException | NoSuchAlgorithmException e) { return ""; } } - private int semanticdbSymbolInfoProperties(Element sym) { - int properties = 0; - properties |= - sym.getKind() == ElementKind.ENUM || sym.getKind() == ElementKind.ENUM_CONSTANT - ? Property.ENUM_VALUE - : 0; - for (Modifier modifier : sym.getModifiers()) { - if (modifier == Modifier.STATIC) properties |= Property.STATIC_VALUE; - else if (modifier == Modifier.DEFAULT) properties |= Property.DEFAULT_VALUE; - else if (modifier == Modifier.FINAL) properties |= Property.FINAL_VALUE; - else if (modifier == Modifier.ABSTRACT) properties |= Property.ABSTRACT_VALUE; - } - // for default interface methods, Modifier.ABSTRACT is also set... - if (((properties & Property.ABSTRACT_VALUE) > 0) && ((properties & Property.DEFAULT_VALUE) > 0)) - properties ^= Property.ABSTRACT_VALUE; - return properties; - } - private List semanticdbParentSymbols(TypeElement typeElement) { ArrayList parentSymbols = new ArrayList<>(); Set parentElements = semanticdbParentTypeElements(typeElement, new HashSet<>()); @@ -599,14 +602,13 @@ private Set semanticdbParentTypeElements( for (TypeMirror interfaceType : typeElement.getInterfaces()) { semanticdbParentSymbol(interfaceType, result); } - return result; } private void semanticdbParentSymbol(TypeMirror elementType, Set result) { if (!(elementType instanceof NoType)) { Element superElement = types.asElement(elementType); - if (superElement != null && superElement instanceof TypeElement) { + if (superElement instanceof TypeElement) { result.add((TypeElement) superElement); semanticdbParentTypeElements((TypeElement) superElement, result); } @@ -617,20 +619,16 @@ private Set semanticdbOverrides( ExecutableElement sym, Element enclosingElement, HashSet overriddenSymbols) { if (enclosingElement instanceof TypeElement) { List superTypes = types.directSupertypes(enclosingElement.asType()); - // iterate through all super types for (TypeMirror superType : superTypes) { if (superType instanceof DeclaredType) { Element superElement = ((DeclaredType) superType).asElement(); - // find all elements of super class if (superElement instanceof TypeElement) { boolean methodFound = false; List enclosedElements = ((TypeElement) superElement).getEnclosedElements(); for (Element enclosedElement : enclosedElements) { - // check the element is a method if (enclosedElement instanceof ExecutableElement) { ExecutableElement enclosedExecutableElement = (ExecutableElement) enclosedElement; - // check the method overrides the original method if (elements.overrides( sym, enclosedExecutableElement, (TypeElement) sym.getEnclosingElement())) { String symbol = semanticdbSymbol(enclosedExecutableElement); @@ -650,16 +648,7 @@ private Set semanticdbOverrides( return overriddenSymbols; } - private Semanticdb.Access semanticdbAccess(Element sym) { - for (Modifier modifier : sym.getModifiers()) { - if (modifier == Modifier.PRIVATE) return privateAccess(); - if (modifier == Modifier.PUBLIC) return publicAccess(); - if (modifier == Modifier.PROTECTED) return protectedAccess(); - } - return privateWithinAccess(semanticdbSymbol(sym.getEnclosingElement())); - } - - private static String semanticdbUri( + private static String sourceRelativePath( CompilationUnitTree compUnitTree, SemanticdbJavacOptions options) { Path absolutePath = SemanticdbTaskListener.absolutePathFromUri(options, compUnitTree.getSourceFile()); @@ -677,24 +666,12 @@ private static String semanticdbUri( return out.toString(); } - private Semanticdb.Documentation semanticdbDocumentation(Tree tree) { + private String semanticdbDocumentation(Tree tree) { try { TreePath treePath = nodes.get(tree); String doc = trees.getDocComment(treePath); - if (doc == null) return null; - - return Semanticdb.Documentation.newBuilder() - .setFormat(Semanticdb.Documentation.Format.JAVADOC) - .setMessage(doc) - .build(); + return doc; } catch (NullPointerException e) { - // Can happen in `getDocComment()` - // Caused by: java.lang.NullPointerException - // at com.sun.tools.javac.model.JavacElements.cast(JavacElements.java:605) - // at com.sun.tools.javac.model.JavacElements.getTreeAndTopLevel(JavacElements.java:543) - // at com.sun.tools.javac.model.JavacElements.getDocComment(JavacElements.java:321) - // at - // com.sourcegraph.semanticdb_javac.SemanticdbVisitor.semanticdbDocumentation(SemanticdbVisitor.java:233) return null; } } diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java index 672813a47..e42c9fa43 100644 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java @@ -18,12 +18,13 @@ /** Settings that can be configured alongside the -Xplugin compiler option. */ public class SemanticdbJavacOptions { - /** The directory to place META-INF and its .semanticdb files */ + /** The directory to place META-INF and its SCIP shard files */ public Path targetroot; public Path sourceroot; public boolean includeText = false; public boolean verboseEnabled = false; + public final ArrayList errors; public boolean alreadyReportedErrors = false; public UriScheme uriScheme = UriScheme.DEFAULT; @@ -97,6 +98,9 @@ public static SemanticdbJavacOptions parse(String[] args, JavacTask task) { result.verboseEnabled = true; } else if (arg.equals("-verbose:off")) { result.verboseEnabled = false; + } else if (arg.equals("-emit-scip:on") || arg.equals("-emit-scip:off")) { + // Deprecated no-op: SCIP shard emission is now unconditional. The flag is still parsed so + // older callers / cached compiler options keep working without errors. } else if (arg.startsWith("-randomtimestamp")) { } else { result.errors.add(String.format("unknown flag '%s'\n", arg)); diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java deleted file mode 100644 index 6e4fedf0e..000000000 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.sourcegraph.semanticdb_javac; - -import com.sourcegraph.semanticdb_javac.Semanticdb.*; - -import javax.lang.model.element.Element; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.element.TypeParameterElement; -import javax.lang.model.type.TypeVariable; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.Types; -import java.util.List; -import java.util.stream.Collectors; - -import static com.sourcegraph.semanticdb_javac.SemanticdbBuilders.*; -import static com.sourcegraph.semanticdb_javac.SemanticdbTypeVisitor.UNRESOLVED_TYPE_REF; - -public final class SemanticdbSignatures { - private final GlobalSymbolsCache cache; - private final LocalSymbolsCache locals; - private final Types types; - - public SemanticdbSignatures(GlobalSymbolsCache cache, LocalSymbolsCache locals, Types types) { - this.cache = cache; - this.locals = locals; - this.types = types; - } - - public Signature generateSignature(Element sym) { - if (sym instanceof TypeElement) { - return generateClassSignature((TypeElement) sym); - } else if (sym instanceof ExecutableElement) { - return generateMethodSignature((ExecutableElement) sym); - } else if (sym instanceof VariableElement) { - return generateFieldSignature((VariableElement) sym); - } else if (sym instanceof TypeParameterElement) { - return generateTypeSignature((TypeParameterElement) sym); - } - return null; - } - - private Signature generateClassSignature(TypeElement sym) { - ClassSignature.Builder builder = ClassSignature.newBuilder(); - - builder.setTypeParameters(generateScope(sym.getTypeParameters())); - - for (TypeMirror superType : types.directSupertypes(sym.asType())) { - Semanticdb.Type semanticdbType = generateType(superType); - if (semanticdbType == null) { - semanticdbType = UNRESOLVED_TYPE_REF; - } - builder.addParents(semanticdbType); - } - - builder.setDeclarations(generateScope(sym.getEnclosedElements())); - - return signature(builder); - } - - private Signature generateMethodSignature(ExecutableElement sym) { - MethodSignature.Builder builder = MethodSignature.newBuilder(); - - builder.setTypeParameters(generateScope(sym.getTypeParameters())); - - builder.addParameterLists(generateScope(sym.getParameters())); - - Semanticdb.Type returnType = generateType(sym.getReturnType()); - if (returnType != null) { - builder.setReturnType(returnType); - } - - List thrownTypes = - sym.getThrownTypes().stream().map(this::generateType).collect(Collectors.toList()); - builder.addAllThrows(thrownTypes); - - return signature(builder); - } - - private Signature generateFieldSignature(VariableElement sym) { - Semanticdb.Type generateType = generateType(sym.asType()); - if (generateType == null) { - generateType = UNRESOLVED_TYPE_REF; - } - return signature(ValueSignature.newBuilder().setTpe(generateType)); - } - - private Signature generateTypeSignature(TypeParameterElement sym) { - TypeSignature.Builder builder = TypeSignature.newBuilder(); - - if (sym instanceof TypeElement) { - builder.setTypeParameters(generateScope(((TypeElement) sym).getTypeParameters())); - } - - TypeMirror varType = sym.asType(); - if (varType instanceof TypeVariable) { - Semanticdb.Type upperBound = generateType(((TypeVariable) varType).getUpperBound()); - if (upperBound != null) builder.setUpperBound(upperBound); - else builder.setUpperBound(UNRESOLVED_TYPE_REF); - } else builder.setUpperBound(UNRESOLVED_TYPE_REF); - - return signature(builder); - } - - private Scope generateScope(List elements) { - Scope.Builder scope = Scope.newBuilder(); - for (Element typeVar : elements) { - scope.addSymlinks(cache.semanticdbSymbol(typeVar, locals)); - } - return scope.build(); - } - - private Semanticdb.Type generateType(TypeMirror mirror) { - return new SemanticdbTypeVisitor(cache, locals, types).semanticdbType(mirror); - } -} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTaskListener.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTaskListener.java index 7c5238f65..c7ce170ef 100644 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTaskListener.java +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTaskListener.java @@ -8,18 +8,18 @@ import javax.lang.model.util.Types; import javax.tools.JavaFileObject; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintWriter; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.HashSet; -import java.util.Set; -import java.util.stream.Collectors; /** - * Callback hook that generates SemanticDB when the compiler has completed typechecking a Java - * source file. + * Callback hook that drives {@link ScipVisitor} after javac finishes typechecking a Java source + * file. The visitor builds a self-contained {@code *.scip} shard which is written (or merged) + * under {@code META-INF/scip/...}. */ public final class SemanticdbTaskListener implements TaskListener { private final SemanticdbJavacOptions options; @@ -46,15 +46,14 @@ public SemanticdbTaskListener( @Override public void started(TaskEvent e) { - // Upon first encounter with a file (before any other tasks are run) - // we remove the semanticdb file for this source file to ensure - // stale data doesn't cause problems + // Upon first encounter with a file (before any other tasks are run) we remove any prior SCIP + // shard for this source file to avoid accumulating stale occurrences across builds. if (e.getKind() == TaskEvent.Kind.ENTER) { inferBazelSourceroot(e.getSourceFile()); - Result semanticdbPath = semanticdbOutputPath(options, e); - if (semanticdbPath.isOk()) { + Result shardPath = scipShardOutputPath(options, e); + if (shardPath != null && shardPath.isOk()) { try { - Files.deleteIfExists(semanticdbPath.getOrThrow()); + Files.deleteIfExists(shardPath.getOrThrow()); } catch (IOException ex) { this.reportException(ex, e); } @@ -78,12 +77,8 @@ public void finished(TaskEvent e) { try { onFinishedAnalyze(e); } catch (Throwable ex) { - // Catch exceptions because we don't want to stop the compilation even if this - // plugin has a + // Catch exceptions because we don't want to stop the compilation even if this plugin has a // bug. We report the full stack trace because it's helpful for bug reports. - // Exceptions - // should only happen in *exceptional* situations and they should be reported - // upstream. Throwable throwable = ex; if (e.getSourceFile() != null) { throwable = @@ -94,10 +89,8 @@ public void finished(TaskEvent e) { } } - // Uses reporter.error with the full stack trace of the exception instead of - // reporter.exception - // because reporter.exception doesn't seem to print any meaningful information - // about the + // Uses reporter.error with the full stack trace of the exception instead of reporter.exception + // because reporter.exception doesn't seem to print any meaningful information about the // exception, it just prints the location with an empty message. private void reportException(Throwable exception, TaskEvent e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -108,101 +101,21 @@ private void reportException(Throwable exception, TaskEvent e) { } private void onFinishedAnalyze(TaskEvent e) { - Result path = semanticdbOutputPath(options, e); - if (path != null) { - if (path.isOk()) { - Semanticdb.TextDocument textDocument = - new SemanticdbVisitor(globals, e.getCompilationUnit(), options, types, trees, elements) - .buildTextDocument(e.getCompilationUnit()); - Path output = path.getOrThrow(); - if (Files.exists(output)) appendSemanticdb(e, output, textDocument); - else writeSemanticdb(e, output, textDocument); - } else { - reporter.error(path.getErrorOrThrow(), e); - } - } - } - - private void writeSemanticdb(TaskEvent event, Path output, Semanticdb.TextDocument textDocument) { - try { - byte[] bytes = - Semanticdb.TextDocuments.newBuilder().addDocuments(textDocument).build().toByteArray(); - Files.createDirectories(output.getParent()); - Files.write(output, bytes); - } catch (IOException e) { - this.reportException(e, event); - } - } - - private void appendSemanticdb( - TaskEvent event, Path output, Semanticdb.TextDocument textDocument) { - /* - * If there already is a semanticdb file at the given path, - * we do the following: - * - Read a documents collection - * - Try to find the document with the matching relative path (matching the incoming textDocument) - * - Then, depending on whether a matching document already exists in the collection: - * - if YES, mutate it in place to only add entries from the incoming document - * - if NO, simply add the incoming text document to the collection - * - Write the collection back to disk - * */ - Semanticdb.TextDocument document = null; - int documentIndex = -1; - Semanticdb.TextDocuments documents = null; - - try (InputStream is = Files.newInputStream(output.toFile().toPath())) { - documents = Semanticdb.TextDocuments.parseFrom(is); - - for (int i = 0; i < documents.getDocumentsCount(); i++) { - Semanticdb.TextDocument candidate = documents.getDocuments(i); - if (document == null && candidate.getUri().equals(textDocument.getUri())) { - document = candidate; - documentIndex = i; - } - } - - } catch (IOException e) { - this.reportException(e, event); + Result path = scipShardOutputPath(options, e); + if (path == null) return; + if (!path.isOk()) { + reporter.error(path.getErrorOrThrow(), e); return; } - if (document != null) { - // If there is a previous semanticdb document at this path, we need - // to deduplicate symbols and occurrences and mutate the document in place - Set symbols = new HashSet<>(textDocument.getSymbolsList()); - Set occurrences = - new HashSet<>(textDocument.getOccurrencesList()); - Set synthetics = new HashSet<>(textDocument.getSyntheticsList()); - - symbols.addAll(document.getSymbolsList()); - occurrences.addAll(document.getOccurrencesList()); - synthetics.addAll(document.getSyntheticsList()); - - documents - .toBuilder() - .addDocuments( - documentIndex, - document - .toBuilder() - .clearOccurrences() - .addAllOccurrences(occurrences) - .clearSymbols() - .addAllSymbols(symbols) - .clearSynthetics() - .addAllSynthetics(synthetics)); - - } else { - // If no prior document was found, we can just add the incoming one to the collection - documents = documents.toBuilder().addDocuments(textDocument).build(); - } - - byte[] bytes = documents.toByteArray(); - + Path shardPath = path.getOrThrow(); try { - Files.createDirectories(output.getParent()); - Files.write(output, bytes); - } catch (IOException e) { - this.reportException(e, event); + com.sourcegraph.Scip.Index shard = + new ScipVisitor(globals, e.getCompilationUnit(), options, types, trees, elements) + .buildShard(e.getCompilationUnit()); + ScipShardWriter.writeOrMerge(shardPath, shard); + } catch (IOException ex) { + this.reportException(ex, e); } } @@ -219,16 +132,11 @@ public static Path absolutePathFromUri(SemanticdbJavacOptions options, JavaFileO } } else if (options.uriScheme == UriScheme.BAZEL) { String toString = file.toString().replace(":", "/"); - // This solution is hacky, and it would be very nice to use a dedicated API - // instead. - // The Bazel Java compiler constructs `SimpleFileObject/DirectoryFileObject` - // with a - // "user-friendly" name that points to the original source file and an - // underlying/actual - // file path in a temporary directory. We're constrained by having to use only - // public APIs of - // the Java compiler and `toString()` seems to be the only way to access the - // user-friendly + // This solution is hacky, and it would be very nice to use a dedicated API instead. + // The Bazel Java compiler constructs `SimpleFileObject/DirectoryFileObject` with a + // "user-friendly" name that points to the original source file and an underlying/actual + // file path in a temporary directory. We're constrained by having to use only public APIs of + // the Java compiler and `toString()` seems to be the only way to access the user-friendly // path. String[] knownBazelToStringPatterns = new String[] {"SimpleFileObject[", "DirectoryFileObject["}; @@ -255,19 +163,7 @@ private void inferBazelSourceroot(JavaFileObject file) { } Path absolutePath = absolutePathFromUri(options, file); Path uriPath = Paths.get(file.toUri()); - // absolutePath is the "human-readable" original path, for example - // /home/repo/com/example/Hello.java - // uriPath is the sandbox/temporary file path, for example - // /private/var/tmp/com/example/Hello.java - // - // We infer sourceroot by iterating the names of both files in reverse order - // and stop at the first entry where the two paths are different. For the - // example above, we compare "Hello.java", then "example", then "com", and - // when we reach "repo" != "tmp" then we guess that "/home/repo" is the - // sourceroot. This logic is brittle and it would be nice to use more - // dedicated APIs, but Bazel actively makes an effort to sandbox - // compilation and hide access to the original workspace, which is why we - // resort to solutions like this. + // See comments in the previous implementation for the rationale of the inference loop below. int relativePathDepth = 0; int uriPathDepth = uriPath.getNameCount(); int absolutePathDepth = absolutePath.getNameCount(); @@ -285,41 +181,36 @@ private void inferBazelSourceroot(JavaFileObject file) { .resolve(absolutePath.subpath(0, absolutePathDepth - relativePathDepth)); } - private Result semanticdbOutputPath(SemanticdbJavacOptions options, TaskEvent e) { + private Result scipShardOutputPath(SemanticdbJavacOptions options, TaskEvent e) { Path absolutePath = absolutePathFromUri(options, e.getSourceFile()); if (absolutePath.startsWith(options.sourceroot)) { Path relativePath = options.sourceroot.relativize(absolutePath); - String filename = relativePath.getFileName().toString() + ".semanticdb"; - Path semanticdbOutputPath = + String filename = relativePath.getFileName().toString() + ".scip"; + Path scipOutputPath = options .targetroot .resolve("META-INF") - .resolve("semanticdb") + .resolve("scip") .resolve(relativePath) .resolveSibling(filename); - return Result.ok(semanticdbOutputPath); + return Result.ok(scipOutputPath); } switch (options.noRelativePath) { case INDEX_ANYWAY: - // Come up with a unique relative path for this file even if it's not under the - // sourceroot. - // By indexing auto-generated files, we collect SymbolInformation for - // auto-generated symbol, - // which results in more useful hover tooltips in the editor. - // In the future, we may want to additionally embed the full text contents of - // these files - // so that it's possible to browse generated files with precise code navigation. + // Come up with a unique relative path for this file even if it's not under the sourceroot. + // By indexing auto-generated files, we collect SymbolInformation for auto-generated + // symbols, which results in more useful hover tooltips in the editor. String uniqueFilename = - String.format("%d.%s.semanticdb", ++noRelativePathCounter, absolutePath.getFileName()); - Path semanticdbOutputPath = + String.format("%d.%s.scip", ++noRelativePathCounter, absolutePath.getFileName()); + Path scipOutputPath = options .targetroot .resolve("META-INF") - .resolve("semanticdb") + .resolve("scip") .resolve("no-relative-path") .resolve(uniqueFilename); - return Result.ok(semanticdbOutputPath); + return Result.ok(scipOutputPath); case WARNING: reporter.info( String.format( diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTrees.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTrees.java deleted file mode 100644 index f78b5abe6..000000000 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTrees.java +++ /dev/null @@ -1,258 +0,0 @@ -package com.sourcegraph.semanticdb_javac; - -import com.sun.source.tree.*; -import com.sun.source.util.Trees; -import javax.lang.model.element.Element; -import javax.lang.model.util.Types; -import javax.lang.model.type.TypeMirror; -import com.sun.source.util.TreePath; -import com.sun.source.tree.Tree; -import com.sun.source.tree.Tree.Kind; - -import java.util.HashMap; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import static com.sourcegraph.semanticdb_javac.SemanticdbBuilders.*; -import static com.sourcegraph.semanticdb_javac.SemanticdbTypeVisitor.ARRAY_SYMBOL; - -public class SemanticdbTrees { - public SemanticdbTrees( - GlobalSymbolsCache globals, - LocalSymbolsCache locals, - String semanticdbUri, - Types types, - Trees trees, - HashMap nodes) { - this.globals = globals; - this.locals = locals; - this.semanticdbUri = semanticdbUri; - this.types = types; - this.trees = trees; - this.nodes = nodes; - this.typeVisitor = new SemanticdbTypeVisitor(globals, locals, types); - } - - private final GlobalSymbolsCache globals; - private final LocalSymbolsCache locals; - private final String semanticdbUri; - private final Types types; - private final Trees trees; - private final HashMap nodes; - private final SemanticdbTypeVisitor typeVisitor; - - public List annotations(Tree node) { - if (!(node instanceof ClassTree) - && !(node instanceof MethodTree) - && !(node instanceof VariableTree)) return null; - - List annotations = new ArrayList<>(); - - ModifiersTree mods; - if (node instanceof ClassTree) { - mods = ((ClassTree) node).getModifiers(); - } else if (node instanceof MethodTree) { - mods = ((MethodTree) node).getModifiers(); - } else { - mods = ((VariableTree) node).getModifiers(); - } - - for (AnnotationTree annotation : mods.getAnnotations()) { - annotations.add(annotationBuilder(annotation)); - } - - return annotations; - } - - public Semanticdb.AnnotationTree annotationBuilder(AnnotationTree annotation) { - ArrayList params = new ArrayList<>(annotation.getArguments().size()); - - for (ExpressionTree param : annotation.getArguments()) { - // anecdotally not always AssignmentTree in some situations when a compilation - // unit can't - // resolve symbols fully - if (param instanceof AssignmentTree) { - AssignmentTree assign = (AssignmentTree) param; - ExpressionTree assignValue = assign.getExpression(); - TreePath variableTreePath = nodes.get(assign.getVariable()); - if (variableTreePath != null) { - Element variableSym = trees.getElement(variableTreePath); - String symbol = globals.semanticdbSymbol(variableSym, locals); - params.add(tree(assignTree(tree(idTree(symbol)), annotationParameter(assignValue)))); - } - } else { - params.add(annotationParameter(param)); - } - } - - TreePath annotationTreePath = nodes.get(annotation); - Element annotationSym = trees.getElement(annotationTreePath); - - Semanticdb.Type type = typeVisitor.semanticdbType(annotationSym.asType()); - return annotationTree(type, params); - } - - private TypeMirror getTreeType(Tree tree) { - TreePath path = nodes.get(tree); - return trees.getTypeMirror(path); - } - - private Semanticdb.Tree annotationParameter(ExpressionTree expr) { - if (expr instanceof MemberSelectTree) { - TreePath expressionTreePath = nodes.get(expr); - Element expressionSym = trees.getElement(expressionTreePath); - return tree( - selectTree( - tree(idTree(globals.semanticdbSymbol(expressionSym.getEnclosingElement(), locals))), - idTree(globals.semanticdbSymbol(expressionSym, locals)))); - } else if (expr instanceof NewArrayTree) { - NewArrayTree rhs = (NewArrayTree) expr; - return tree( - applyTree( - tree(idTree(ARRAY_SYMBOL)), - rhs.getInitializers().stream() - .map(this::annotationParameter) - .collect(Collectors.toList()))); - } else if (expr instanceof LiteralTree) { - // Literals can either be a primitive or String - Object value = ((LiteralTree) expr).getValue(); - final Semanticdb.Constant constant; - // Technically, annotation parameter values cannot be null, - // according to JLS: https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.7.1 - // But this codepath is still possible to hit when compiling invalid code - and - // we should handle the null const case in order to fail more gracefully - if (value == null) constant = nullConst(); - else if (value instanceof String) constant = stringConst((String) value); - else if (value instanceof Boolean) constant = booleanConst((Boolean) value); - else if (value instanceof Byte) constant = byteConst((Byte) value); - else if (value instanceof Short) constant = shortConst((Short) value); - else if (value instanceof Integer) constant = intConst((Integer) value); - else if (value instanceof Long) constant = longConst((Long) value); - else if (value instanceof Character) constant = charConst((Character) value); - else if (value instanceof Float) constant = floatConst((Float) value); - else if (value instanceof Double) constant = doubleConst((Double) value); - else - throw new IllegalStateException( - semanticdbUri - + ": annotation parameter rhs was of unexpected class type " - + value.getClass() - + "\n" - + value); - return tree(literalTree(constant)); - } else if (expr instanceof AnnotationTree) { - return tree(annotationBuilder((AnnotationTree) expr)); - } else if (expr instanceof IdentifierTree) { - TreePath expressionTreePath = nodes.get(expr); - Element expressionSym = trees.getElement(expressionTreePath); - return tree(idTree(globals.semanticdbSymbol(expressionSym, locals))); - } else if (expr instanceof BinaryTree) { - BinaryTree binExpr = (BinaryTree) expr; - return tree( - binopTree( - annotationParameter(binExpr.getLeftOperand()), - semanticdbBinaryOperator(expr.getKind()), - annotationParameter(binExpr.getRightOperand()))); - } else if (expr instanceof UnaryTree) { - UnaryTree unaryExpr = (UnaryTree) expr; - return tree( - unaryOpTree( - semanticdbUnaryOperator(unaryExpr.getKind()), - annotationParameter(unaryExpr.getExpression()))); - } else if (expr instanceof ParenthesizedTree) { - ParenthesizedTree parenExpr = (ParenthesizedTree) expr; - return annotationParameter(parenExpr.getExpression()); - } else if (expr instanceof TypeCastTree) { - TypeCastTree tree = (TypeCastTree) expr; - return tree( - castTree( - typeVisitor.semanticdbType(getTreeType(tree.getType())), - annotationParameter(tree.getExpression()))); - } else { - throw new IllegalArgumentException( - semanticdbUri - + ": annotation parameter rhs was of unexpected tree node type " - + expr.getClass() - + "\n" - + expr); - } - } - - private Semanticdb.BinaryOperator semanticdbBinaryOperator(Tree.Kind kind) { - switch (kind) { - case PLUS: - return Semanticdb.BinaryOperator.PLUS; - case MINUS: - return Semanticdb.BinaryOperator.MINUS; - case MULTIPLY: - return Semanticdb.BinaryOperator.MULTIPLY; - case DIVIDE: - return Semanticdb.BinaryOperator.DIVIDE; - case REMAINDER: - return Semanticdb.BinaryOperator.REMAINDER; - case LESS_THAN: - return Semanticdb.BinaryOperator.LESS_THAN; - case GREATER_THAN: - return Semanticdb.BinaryOperator.GREATER_THAN; - case LEFT_SHIFT: - return Semanticdb.BinaryOperator.SHIFT_LEFT; - case RIGHT_SHIFT: - return Semanticdb.BinaryOperator.SHIFT_RIGHT; - case UNSIGNED_RIGHT_SHIFT: - return Semanticdb.BinaryOperator.SHIFT_RIGHT_UNSIGNED; - case EQUAL_TO: - return Semanticdb.BinaryOperator.EQUAL_TO; - case NOT_EQUAL_TO: - return Semanticdb.BinaryOperator.NOT_EQUAL_TO; - case LESS_THAN_EQUAL: - return Semanticdb.BinaryOperator.LESS_THAN_EQUAL; - case GREATER_THAN_EQUAL: - return Semanticdb.BinaryOperator.GREATER_THAN_EQUAL; - case CONDITIONAL_AND: - return Semanticdb.BinaryOperator.CONDITIONAL_AND; - case CONDITIONAL_OR: - return Semanticdb.BinaryOperator.CONDITIONAL_OR; - case AND: - return Semanticdb.BinaryOperator.AND; - case OR: - return Semanticdb.BinaryOperator.OR; - case XOR: - return Semanticdb.BinaryOperator.XOR; - default: - throw new IllegalStateException( - semanticdbUri + ": unexpected binary expression operator kind " + kind); - } - } - - private Semanticdb.UnaryOperator semanticdbUnaryOperator(Tree.Kind kind) { - switch (kind) { - case UNARY_MINUS: - return Semanticdb.UnaryOperator.UNARY_MINUS; - - case UNARY_PLUS: - return Semanticdb.UnaryOperator.UNARY_PLUS; - - case POSTFIX_INCREMENT: - return Semanticdb.UnaryOperator.UNARY_POSTFIX_INCREMENT; - - case POSTFIX_DECREMENT: - return Semanticdb.UnaryOperator.UNARY_POSTFIX_DECREMENT; - - case PREFIX_INCREMENT: - return Semanticdb.UnaryOperator.UNARY_PREFIX_INCREMENT; - - case PREFIX_DECREMENT: - return Semanticdb.UnaryOperator.UNARY_PREFIX_DECREMENT; - - case BITWISE_COMPLEMENT: - return Semanticdb.UnaryOperator.UNARY_BITWISE_COMPLEMENT; - - case LOGICAL_COMPLEMENT: - return Semanticdb.UnaryOperator.UNARY_LOGICAL_COMPLEMENT; - - default: - throw new IllegalStateException( - semanticdbUri + ": unexpected unary expression operator kind " + kind); - } - } -} diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTypeVisitor.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTypeVisitor.java deleted file mode 100644 index 0733dbbfd..000000000 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTypeVisitor.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.sourcegraph.semanticdb_javac; - -import javax.lang.model.element.Element; -import javax.lang.model.util.SimpleTypeVisitor8; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.type.ArrayType; -import javax.lang.model.type.WildcardType; -import javax.lang.model.type.TypeVariable; -import javax.lang.model.type.IntersectionType; -import javax.lang.model.type.PrimitiveType; -import javax.lang.model.type.TypeKind; -import javax.lang.model.type.NoType; -import javax.lang.model.util.Types; -import java.util.ArrayList; - -import static com.sourcegraph.semanticdb_javac.SemanticdbBuilders.*; - -/** A TypeMirror tree visitor that constructs a recursive SemanticDB Type structure. */ -class SemanticdbTypeVisitor extends SimpleTypeVisitor8 { - static final Semanticdb.Type UNRESOLVED_TYPE_REF = typeRef("unresolved_type#"); - - static final String ARRAY_SYMBOL = "scala/Array#"; - - private final GlobalSymbolsCache cache; - private final LocalSymbolsCache locals; - private final Types types; - - SemanticdbTypeVisitor(GlobalSymbolsCache cache, LocalSymbolsCache locals, Types types) { - this.cache = cache; - this.locals = locals; - this.types = types; - } - - public Semanticdb.Type semanticdbType(TypeMirror tpe) { - Semanticdb.Type result = super.visit(tpe); - return result == null ? UNRESOLVED_TYPE_REF : result; - } - - @Override - public Semanticdb.Type visitDeclared(DeclaredType t, Void unused) { - boolean isExistential = - t.getTypeArguments().stream().anyMatch((type) -> type instanceof WildcardType); - - ArrayList typeParams = new ArrayList<>(); - Semanticdb.Scope.Builder declarations = Semanticdb.Scope.newBuilder(); - for (TypeMirror type : t.getTypeArguments()) { - typeParams.add(semanticdbType(type)); - - if (type instanceof WildcardType) { - Semanticdb.TypeSignature.Builder typeSig = Semanticdb.TypeSignature.newBuilder(); - WildcardType wildcardType = (WildcardType) type; - - // semanticdb spec asks for List() not None for type_parameters field - typeSig.setTypeParameters(Semanticdb.Scope.newBuilder()); - - if (wildcardType.getExtendsBound() != null) { - typeSig.setUpperBound(super.visit(wildcardType.getExtendsBound())); - } else if (wildcardType.getSuperBound() != null) { - typeSig.setLowerBound(super.visit(wildcardType.getSuperBound())); - } - - declarations.addHardlinks( - Semanticdb.SymbolInformation.newBuilder() - .setSymbol("local_wildcard") - .setSignature(Semanticdb.Signature.newBuilder().setTypeSignature(typeSig))); - } else { - Element element = types.asElement(type); - declarations.addSymlinks(cache.semanticdbSymbol(element, locals)); - } - } - - if (!isExistential) { - return typeRef(cache.semanticdbSymbol(t.asElement(), locals), typeParams); - } else { - return existentialType( - typeRef(cache.semanticdbSymbol(t.asElement(), locals), typeParams), declarations.build()); - } - } - - @Override - public Semanticdb.Type visitArray(ArrayType t, Void unused) { - ArrayList types = new ArrayList(); - types.add(semanticdbType(t.getComponentType())); - return typeRef(ARRAY_SYMBOL, types); - } - - @Override - public Semanticdb.Type visitPrimitive(PrimitiveType t, Void unused) { - return typeRef(primitiveSymbol(t.getKind())); - } - - @Override - public Semanticdb.Type visitTypeVariable(TypeVariable t, Void unused) { - return typeRef(cache.semanticdbSymbol(t.asElement(), locals)); - } - - @Override - public Semanticdb.Type visitIntersection(IntersectionType t, Void unused) { - ArrayList types = new ArrayList<>(); - for (TypeMirror type : t.getBounds()) { - types.add(super.visit(type)); - } - - return intersectionType(types); - } - - @Override - public Semanticdb.Type visitWildcard(WildcardType t, Void unused) { - // https://github.com/scalameta/scalameta/issues/1703 - // https://sourcegraph.com/github.com/scalameta/scalameta/-/blob/semanticdb/metacp/src/main/scala/scala/meta/internal/javacp/Javacp.scala#L452:19 - return typeRef("local_wildcard"); - } - - @Override - public Semanticdb.Type visitNoType(NoType t, Void unused) { - return typeRef(primitiveSymbol(t.getKind())); - } - - public String primitiveSymbol(TypeKind kind) { - switch (kind) { - case BOOLEAN: - return "scala/Boolean#"; - case BYTE: - return "scala/Byte#"; - case SHORT: - return "scala/Short#"; - case INT: - return "scala/Int#"; - case LONG: - return "scala/Long#"; - case CHAR: - return "scala/Char#"; - case FLOAT: - return "scala/Float#"; - case DOUBLE: - return "scala/Double#"; - case VOID: - return "scala/Unit#"; - default: - throw new IllegalArgumentException("got " + kind.name()); - } - } -} diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ClassConsumer.java b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ClassConsumer.java index 299966fdd..b50629be4 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ClassConsumer.java +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ClassConsumer.java @@ -1,28 +1,28 @@ package snapshots; -//⌄ enclosing_range_start semanticdb maven . . snapshots/ClassConsumer# +//⌄ enclosing_range_start scip-java maven . . snapshots/ClassConsumer# public class ClassConsumer { -// ^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/ClassConsumer# +// ^^^^^^^^^^^^^ definition scip-java maven . . snapshots/ClassConsumer# // display_name ClassConsumer // signature_documentation java public class ClassConsumer // kind Class -// ^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/ClassConsumer#``(). +// ^^^^^^^^^^^^^ definition scip-java maven . . snapshots/ClassConsumer#``(). // display_name // signature_documentation java public ClassConsumer() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . snapshots/ClassConsumer#run(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/ClassConsumer#run(). public static void run() { -// ^^^ definition semanticdb maven . . snapshots/ClassConsumer#run(). +// ^^^ definition scip-java maven . . snapshots/ClassConsumer#run(). // display_name run // signature_documentation java public static void run() // kind StaticMethod System.out.println(new Class().getAsdf()); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9). -// ^^^^^ reference semanticdb maven . . snapshots/Class#``(+1). -// ^^^^^^^ reference semanticdb maven . . snapshots/Class#getAsdf(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^ reference scip-java maven . . snapshots/Class#``(+1). +// ^^^^^^^ reference scip-java maven . . snapshots/Class#getAsdf(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/ClassConsumer#run(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/ClassConsumer#run(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/ClassConsumer# +//⌃ enclosing_range_end scip-java maven . . snapshots/ClassConsumer# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/CompanionConsumer.java b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/CompanionConsumer.java index 6708477bb..962c6bbce 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/CompanionConsumer.java +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/CompanionConsumer.java @@ -1,25 +1,25 @@ package snapshots; -//⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionConsumer# +//⌄ enclosing_range_start scip-java maven . . snapshots/CompanionConsumer# public class CompanionConsumer { -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionConsumer# +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionConsumer# // display_name CompanionConsumer // signature_documentation java public class CompanionConsumer // kind Class -// ⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionConsumer#``(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/CompanionConsumer#``(). CompanionConsumer() { -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionConsumer#``(). +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionConsumer#``(). // display_name // signature_documentation java CompanionConsumer() // kind Constructor CompanionOwner.Companion.create(); -// ^^^^^^^^^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner# -// ^^^^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#Companion. -// ^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#Companion#create(). +// ^^^^^^^^^^^^^^ reference scip-java maven . . snapshots/CompanionOwner# +// ^^^^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#Companion. +// ^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#Companion#create(). new CompanionOwner().create(); -// ^^^^^^^^^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#``(). -// ^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#create(). +// ^^^^^^^^^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#``(). +// ^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#create(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionConsumer#``(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/CompanionConsumer#``(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionConsumer# +//⌃ enclosing_range_end scip-java maven . . snapshots/CompanionConsumer# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinClass.java b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinClass.java index 82ea72ed4..77785c36a 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinClass.java +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinClass.java @@ -1,45 +1,45 @@ package snapshots; -//⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinClass# +//⌄ enclosing_range_start scip-java maven . . snapshots/KotlinClass# public class KotlinClass { -// ^^^^^^^^^^^ definition semanticdb maven . . snapshots/KotlinClass# +// ^^^^^^^^^^^ definition scip-java maven . . snapshots/KotlinClass# // display_name KotlinClass // signature_documentation java public class KotlinClass // kind Class -// ⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinClass#``(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/KotlinClass#``(). KotlinClass() throws Class { -// ^^^^^^^^^^^ definition semanticdb maven . . snapshots/KotlinClass#``(). +// ^^^^^^^^^^^ definition scip-java maven . . snapshots/KotlinClass#``(). // display_name // signature_documentation java KotlinClass() throws Class // kind Constructor -// ^^^^^ reference semanticdb maven . . snapshots/Class# +// ^^^^^ reference scip-java maven . . snapshots/Class# throw new Class(); -// ^^^^^ reference semanticdb maven . . snapshots/Class#``(+1). +// ^^^^^ reference scip-java maven . . snapshots/Class#``(+1). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinClass#``(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/KotlinClass#``(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinClass#test(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/KotlinClass#test(). void test() throws Class { -// ^^^^ definition semanticdb maven . . snapshots/KotlinClass#test(). +// ^^^^ definition scip-java maven . . snapshots/KotlinClass#test(). // display_name test // signature_documentation java void test() throws Class // kind Method -// ^^^^^ reference semanticdb maven . . snapshots/Class# +// ^^^^^ reference scip-java maven . . snapshots/Class# throw new Class(1, ""); -// ^^^^^ reference semanticdb maven . . snapshots/Class#``(). +// ^^^^^ reference scip-java maven . . snapshots/Class#``(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinClass#test(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/KotlinClass#test(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinClass#other(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/KotlinClass#other(). void other() throws Class { -// ^^^^^ definition semanticdb maven . . snapshots/KotlinClass#other(). +// ^^^^^ definition scip-java maven . . snapshots/KotlinClass#other(). // display_name other // signature_documentation java void other() throws Class // kind Method -// ^^^^^ reference semanticdb maven . . snapshots/Class# +// ^^^^^ reference scip-java maven . . snapshots/Class# throw new Class(1); -// ^^^^^ reference semanticdb maven . . snapshots/Class#``(+2). +// ^^^^^ reference scip-java maven . . snapshots/Class#``(+2). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinClass#other(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/KotlinClass#other(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinClass# +//⌃ enclosing_range_end scip-java maven . . snapshots/KotlinClass# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinLambdas.java b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinLambdas.java index 4a57bc1d6..b952e169a 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinLambdas.java +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/KotlinLambdas.java @@ -1,43 +1,43 @@ package snapshots; import kotlin.collections.CollectionsKt; -// ^^^^^^ reference semanticdb maven . . kotlin/ -// ^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/ -// ^^^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/CollectionsKt# +// ^^^^^^ reference scip-java maven . . kotlin/ +// ^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/ +// ^^^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/CollectionsKt# import kotlin.text.StringsKt; -// ^^^^^^ reference semanticdb maven . . kotlin/ -// ^^^^ reference semanticdb maven . . kotlin/text/ -// ^^^^^^^^^ reference semanticdb maven . . kotlin/text/StringsKt# +// ^^^^^^ reference scip-java maven . . kotlin/ +// ^^^^ reference scip-java maven . . kotlin/text/ +// ^^^^^^^^^ reference scip-java maven . . kotlin/text/StringsKt# -//⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinLambdas# +//⌄ enclosing_range_start scip-java maven . . snapshots/KotlinLambdas# public class KotlinLambdas { -// ^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/KotlinLambdas# +// ^^^^^^^^^^^^^ definition scip-java maven . . snapshots/KotlinLambdas# // display_name KotlinLambdas // signature_documentation java public class KotlinLambdas // kind Class -// ^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/KotlinLambdas#``(). +// ^^^^^^^^^^^^^ definition scip-java maven . . snapshots/KotlinLambdas#``(). // display_name // signature_documentation java public KotlinLambdas() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . snapshots/KotlinLambdas#test(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/KotlinLambdas#test(). public void test() { -// ^^^^ definition semanticdb maven . . snapshots/KotlinLambdas#test(). +// ^^^^ definition scip-java maven . . snapshots/KotlinLambdas#test(). // display_name test // signature_documentation java public void test() // kind Method LambdasKt.getX(); // TODO figure out emit getX on kotlin side -// ^^^^^^^^^ reference semanticdb maven . . snapshots/LambdasKt# -// ^^^^ reference semanticdb maven . . snapshots/LambdasKt#getX(). +// ^^^^^^^^^ reference scip-java maven . . snapshots/LambdasKt# +// ^^^^ reference scip-java maven . . snapshots/LambdasKt#getX(). kotlin.collections.CollectionsKt.listOf(); -// ^^^^^^ reference semanticdb maven . . kotlin/ -// ^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/ -// ^^^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/CollectionsKt# -// ^^^^^^ reference semanticdb maven . . kotlin/collections/CollectionsKt__CollectionsKt#listOf(). +// ^^^^^^ reference scip-java maven . . kotlin/ +// ^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/ +// ^^^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/CollectionsKt# +// ^^^^^^ reference scip-java maven . . kotlin/collections/CollectionsKt__CollectionsKt#listOf(). FunctionsKt.sampleText(""); -// ^^^^^^^^^^^ reference semanticdb maven . . snapshots/FunctionsKt# -// ^^^^^^^^^^ reference semanticdb maven . . snapshots/FunctionsKt#sampleText(). +// ^^^^^^^^^^^ reference scip-java maven . . snapshots/FunctionsKt# +// ^^^^^^^^^^ reference scip-java maven . . snapshots/FunctionsKt#sampleText(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinLambdas#test(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/KotlinLambdas#test(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/KotlinLambdas# +//⌃ enclosing_range_end scip-java maven . . snapshots/KotlinLambdas# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ObjectKtConsumer.java b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ObjectKtConsumer.java index 8bbb54604..a9c03cefd 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ObjectKtConsumer.java +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/java/snapshots/ObjectKtConsumer.java @@ -1,26 +1,26 @@ package snapshots; -//⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKtConsumer# +//⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKtConsumer# public class ObjectKtConsumer { -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/ObjectKtConsumer# +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/ObjectKtConsumer# // display_name ObjectKtConsumer // signature_documentation java public class ObjectKtConsumer // kind Class -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/ObjectKtConsumer#``(). +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/ObjectKtConsumer#``(). // display_name // signature_documentation java public ObjectKtConsumer() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKtConsumer#run(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKtConsumer#run(). public static void run() { -// ^^^ definition semanticdb maven . . snapshots/ObjectKtConsumer#run(). +// ^^^ definition scip-java maven . . snapshots/ObjectKtConsumer#run(). // display_name run // signature_documentation java public static void run() // kind StaticMethod ObjectKt.INSTANCE.fail("boom"); -// ^^^^^^^^ reference semanticdb maven . . snapshots/ObjectKt# -// ^^^^^^^^ reference semanticdb maven . . snapshots/ObjectKt#INSTANCE. -// ^^^^ reference semanticdb maven . . snapshots/ObjectKt#fail(). +// ^^^^^^^^ reference scip-java maven . . snapshots/ObjectKt# +// ^^^^^^^^ reference scip-java maven . . snapshots/ObjectKt#INSTANCE. +// ^^^^ reference scip-java maven . . snapshots/ObjectKt#fail(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKtConsumer#run(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKtConsumer#run(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKtConsumer# +//⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKtConsumer# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Class.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Class.kt index 57939c894..b99c5cbb0 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Class.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Class.kt @@ -1,129 +1,146 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ -//⌄ enclosing_range_start semanticdb maven . . snapshots/Class# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``().(banana) -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#banana. -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#getBanana(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#setBanana(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#setBanana().(value) -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``().(apple) +//⌄ enclosing_range_start scip-java maven . . snapshots/Class# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``().(banana) +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#banana. +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#getBanana(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#setBanana(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#setBanana().(value) +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``().(apple) class Class constructor(private var banana: Int, apple: String) : -// ^^^^^ definition semanticdb maven . . snapshots/Class# +// ^^^^^ definition scip-java maven . . snapshots/Class# // display_name Class -// documentation ```kotlin\npublic final class Class : Throwable\n``` -// relationship is_reference is_implementation semanticdb maven . . kotlin/Throwable# -// ^^^^^^^^^^^ definition semanticdb maven . . snapshots/Class#``(). +// signature_documentation kotlin public final class Class : Throwable +// kind Class +// relationship is_implementation scip-java maven . . kotlin/Throwable# +// ^^^^^^^^^^^ definition scip-java maven . . snapshots/Class#``(). // display_name Class -// documentation ```kotlin\npublic constructor(banana: Int, apple: String): Class\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/Class#``().(banana) +// signature_documentation kotlin public constructor(banana: Int, apple: String): Class +// kind Constructor +// ^^^^^^ definition scip-java maven . . snapshots/Class#``().(banana) // display_name banana -// documentation ```kotlin\nbanana: Int\n``` -// ^^^^^^ reference semanticdb maven . . snapshots/Class#``().(banana) -// ^^^^^^ definition semanticdb maven . . snapshots/Class#banana. +// signature_documentation kotlin banana: Int +// kind Parameter +// ^^^^^^ reference scip-java maven . . snapshots/Class#``().(banana) +// ^^^^^^ definition scip-java maven . . snapshots/Class#banana. // display_name banana -// documentation ```kotlin\nprivate final var banana: Int\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/Class#getBanana(). +// signature_documentation kotlin private final var banana: Int +// kind Property +// ^^^^^^ definition scip-java maven . . snapshots/Class#getBanana(). // display_name banana -// documentation ```kotlin\nprivate get(): Int\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/Class#setBanana(). +// signature_documentation kotlin private get(): Int +// kind Method +// ^^^^^^ definition scip-java maven . . snapshots/Class#setBanana(). // display_name banana -// documentation ```kotlin\nprivate set(value: Int): Unit\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/Class#setBanana().(value) +// signature_documentation kotlin private set(value: Int): Unit +// kind Method +// ^^^^^^ definition scip-java maven . . snapshots/Class#setBanana().(value) // display_name value -// documentation ```kotlin\nvalue: Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ^^^^^ definition semanticdb maven . . snapshots/Class#``().(apple) +// signature_documentation kotlin value: Int +// kind Parameter +// ^^^ reference scip-java maven . . kotlin/Int# +// ^^^^^ definition scip-java maven . . snapshots/Class#``().(apple) // display_name apple -// documentation ```kotlin\napple: String\n``` -// ^^^^^^ reference semanticdb maven . . kotlin/String# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``().(banana) -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#banana. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#getBanana(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#setBanana(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#setBanana().(value) -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``().(apple) -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``(). +// signature_documentation kotlin apple: String +// kind Parameter +// ^^^^^^ reference scip-java maven . . kotlin/String# +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``().(banana) +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#banana. +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#getBanana(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#setBanana(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#setBanana().(value) +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``().(apple) +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``(). Throwable(banana.toString() + apple) { -// ^^^^^^^^^ reference semanticdb maven . . kotlin/Throwable# -// ^^^^^^ reference semanticdb maven . . snapshots/Class#``().(banana) -// ^^^^^^^^ reference semanticdb maven . . kotlin/Int#toString(). -// ^ reference semanticdb maven . . kotlin/String#plus(). -// ^^^^^ reference semanticdb maven . . snapshots/Class#``().(apple) +// ^^^^^^^^^ reference scip-java maven . . kotlin/Throwable# +// ^^^^^^ reference scip-java maven . . snapshots/Class#``().(banana) +// ^^^^^^^^ reference scip-java maven . . kotlin/Int#toString(). +// ^ reference scip-java maven . . kotlin/String#plus(). +// ^^^^^ reference scip-java maven . . snapshots/Class#``().(apple) init { println("") -// ^^^^^^^ reference semanticdb maven . . kotlin/io/println(). +// ^^^^^^^ reference scip-java maven . . kotlin/io/println(). } -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#asdf. -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#getAsdf(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#asdf. +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#getAsdf(). val asdf = -// ^^^^ definition semanticdb maven . . snapshots/Class#asdf. +// ^^^^ definition scip-java maven . . snapshots/Class#asdf. // display_name asdf -// documentation ```kotlin\npublic final val asdf: Any\n``` -// ^^^^ definition semanticdb maven . . snapshots/Class#getAsdf(). +// signature_documentation kotlin public final val asdf: Any +// kind Property +// ^^^^ definition scip-java maven . . snapshots/Class#getAsdf(). // display_name asdf -// documentation ```kotlin\npublic get(): Any\n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/``# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/``#``(). +// signature_documentation kotlin public get(): Any +// kind Method +// ⌄ enclosing_range_start scip-java maven . . snapshots/``# +// ⌄ enclosing_range_start scip-java maven . . snapshots/``#``(). object { -// ^^^^^^ definition semanticdb maven . . snapshots/``# +// ^^^^^^ definition scip-java maven . . snapshots/``# // display_name -// documentation ```kotlin\nobject : Any\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/``#``(). +// signature_documentation kotlin object : Any +// kind Object +// ^^^^^^ definition scip-java maven . . snapshots/``#``(). // display_name -// documentation ```kotlin\nprivate constructor(): \n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/``#doStuff(). +// signature_documentation kotlin private constructor(): +// kind Constructor +// ⌄ enclosing_range_start scip-java maven . . snapshots/``#doStuff(). fun doStuff() = Unit -// ^^^^^^^ definition semanticdb maven . . snapshots/``#doStuff(). +// ^^^^^^^ definition scip-java maven . . snapshots/``#doStuff(). // display_name doStuff -// documentation ```kotlin\npublic final fun doStuff(): Unit\n``` -// ⌃ enclosing_range_end semanticdb maven . . snapshots/``#doStuff(). +// signature_documentation kotlin public final fun doStuff(): Unit +// kind Method +// ⌃ enclosing_range_end scip-java maven . . snapshots/``#doStuff(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#asdf. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#getAsdf(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/``# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/``#``(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#asdf. +// ⌃ enclosing_range_end scip-java maven . . snapshots/``# +// ⌃ enclosing_range_end scip-java maven . . snapshots/``#``(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#getAsdf(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``(+1). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``(+1). constructor() : this(1, "") -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Class#``(+1). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Class#``(+1). // display_name Class -// documentation ```kotlin\npublic constructor(): Class\n``` -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``(+1). +// signature_documentation kotlin public constructor(): Class +// kind Constructor +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``(+1). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``(+2). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#``(+2).(banana) +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``(+2). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#``(+2).(banana) constructor(banana: Int) : this(banana, "") -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Class#``(+2). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Class#``(+2). // display_name Class -// documentation ```kotlin\npublic constructor(banana: Int): Class\n``` -// ^^^^^^ definition semanticdb maven . . snapshots/Class#``(+2).(banana) +// signature_documentation kotlin public constructor(banana: Int): Class +// kind Constructor +// ^^^^^^ definition scip-java maven . . snapshots/Class#``(+2).(banana) // display_name banana -// documentation ```kotlin\nbanana: Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ^^^^^^ reference semanticdb maven . . snapshots/Class#``(+2).(banana) -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``(+2).(banana) -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#``(+2). +// signature_documentation kotlin banana: Int +// kind Parameter +// ^^^ reference scip-java maven . . kotlin/Int# +// ^^^^^^ reference scip-java maven . . snapshots/Class#``(+2).(banana) +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``(+2).(banana) +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#``(+2). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Class#run(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Class#run(). fun run() { -// ^^^ definition semanticdb maven . . snapshots/Class#run(). +// ^^^ definition scip-java maven . . snapshots/Class#run(). // display_name run -// documentation ```kotlin\npublic final fun run(): Unit\n``` +// signature_documentation kotlin public final fun run(): Unit +// kind Method println(Class::class) -// ^^^^^^^ reference semanticdb maven . . kotlin/io/println(). +// ^^^^^^^ reference scip-java maven . . kotlin/io/println(). println("I eat $banana for lunch") -// ^^^^^^^ reference semanticdb maven . . kotlin/io/println(). -// ^^^^^^ reference semanticdb maven . . snapshots/Class#banana. -// ^^^^^^ reference semanticdb maven . . snapshots/Class#getBanana(). -// ^^^^^^ reference semanticdb maven . . snapshots/Class#setBanana(). +// ^^^^^^^ reference scip-java maven . . kotlin/io/println(). +// ^^^^^^ reference scip-java maven . . snapshots/Class#banana. +// ^^^^^^ reference scip-java maven . . snapshots/Class#getBanana(). +// ^^^^^^ reference scip-java maven . . snapshots/Class#setBanana(). banana = 42 -// ^^^^^^ reference semanticdb maven . . snapshots/Class#banana. -// ^^^^^^ reference semanticdb maven . . snapshots/Class#getBanana(). -// ^^^^^^ reference semanticdb maven . . snapshots/Class#setBanana(). +// ^^^^^^ reference scip-java maven . . snapshots/Class#banana. +// ^^^^^^ reference scip-java maven . . snapshots/Class#getBanana(). +// ^^^^^^ reference scip-java maven . . snapshots/Class#setBanana(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Class#run(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Class#run(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Class# +//⌃ enclosing_range_end scip-java maven . . snapshots/Class# diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/CompanionOwner.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/CompanionOwner.kt index a5a386101..6ffe782a6 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/CompanionOwner.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/CompanionOwner.kt @@ -1,44 +1,50 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ -//⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner# -//⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner# +//⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner#``(). class CompanionOwner { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner# +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionOwner# // display_name CompanionOwner -// documentation ```kotlin\npublic final class CompanionOwner : Any\n``` -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner#``(). +// signature_documentation kotlin public final class CompanionOwner : Any +// kind Class +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionOwner#``(). // display_name CompanionOwner -// documentation ```kotlin\npublic constructor(): CompanionOwner\n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner#Companion# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner#Companion#``(). +// signature_documentation kotlin public constructor(): CompanionOwner +// kind Constructor +// ⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner#Companion# +// ⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner#Companion#``(). companion object { -// ^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner#Companion# 2:3 +// ^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionOwner#Companion# 2:3 // display_name Companion -// documentation ```kotlin\npublic final companion object Companion : Any\n``` -// ^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner#Companion#``(). 2:3 +// signature_documentation kotlin public final companion object Companion : Any +// kind Object +// ^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/CompanionOwner#Companion#``(). 2:3 // display_name Companion -// documentation ```kotlin\nprivate constructor(): CompanionOwner.Companion\n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner#Companion#create(). +// signature_documentation kotlin private constructor(): CompanionOwner.Companion +// kind Constructor +// ⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner#Companion#create(). fun create(): CompanionOwner = CompanionOwner() -// ^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner#Companion#create(). +// ^^^^^^ definition scip-java maven . . snapshots/CompanionOwner#Companion#create(). // display_name create -// documentation ```kotlin\npublic final fun create(): CompanionOwner\n``` -// ^^^^^^^^^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner# -// ^^^^^^^^^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#``(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner#Companion#create(). +// signature_documentation kotlin public final fun create(): CompanionOwner +// kind Method +// ^^^^^^^^^^^^^^ reference scip-java maven . . snapshots/CompanionOwner# +// ^^^^^^^^^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#``(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner#Companion#create(). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner#Companion# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner#Companion#``(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/CompanionOwner#create(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner#Companion# +// ⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner#Companion#``(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/CompanionOwner#create(). fun create(): Int = CompanionOwner.create().hashCode() -// ^^^^^^ definition semanticdb maven . . snapshots/CompanionOwner#create(). +// ^^^^^^ definition scip-java maven . . snapshots/CompanionOwner#create(). // display_name create -// documentation ```kotlin\npublic final fun create(): Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ^^^^^^ reference semanticdb maven . . snapshots/CompanionOwner#Companion#create(). -// ^^^^^^^^ reference semanticdb maven . . kotlin/Any#hashCode(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner#create(). +// signature_documentation kotlin public final fun create(): Int +// kind Method +// ^^^ reference scip-java maven . . kotlin/Int# +// ^^^^^^ reference scip-java maven . . snapshots/CompanionOwner#Companion#create(). +// ^^^^^^^^ reference scip-java maven . . kotlin/Any#hashCode(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner#create(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner# -//⌃ enclosing_range_end semanticdb maven . . snapshots/CompanionOwner#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner# +//⌃ enclosing_range_end scip-java maven . . snapshots/CompanionOwner#``(). diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Docstrings.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Docstrings.kt index cf219ac01..d9070bc1d 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Docstrings.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Docstrings.kt @@ -1,44 +1,52 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ import java.io.Serializable -// ^^^^ reference semanticdb maven . . java/ -// ^^ reference semanticdb maven . . java/io/ -// ^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/io/Serializable# +// ^^^^ reference scip-java maven . . java/ +// ^^ reference scip-java maven . . java/io/ +// ^^^^^^^^^^^^ reference scip-java maven jdk 11 java/io/Serializable# -//⌄ enclosing_range_start semanticdb maven . . snapshots/DocstringSuperclass# -//⌄ enclosing_range_start semanticdb maven . . snapshots/DocstringSuperclass#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/DocstringSuperclass# +//⌄ enclosing_range_start scip-java maven . . snapshots/DocstringSuperclass#``(). abstract class DocstringSuperclass -// ^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/DocstringSuperclass# +// ^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/DocstringSuperclass# // display_name DocstringSuperclass -// documentation ```kotlin\npublic abstract class DocstringSuperclass : Any\n``` -// ^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/DocstringSuperclass#``(). +// signature_documentation kotlin public abstract class DocstringSuperclass : Any +// kind Class +// ^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/DocstringSuperclass#``(). // display_name DocstringSuperclass -// documentation ```kotlin\npublic constructor(): DocstringSuperclass\n``` -// ⌃ enclosing_range_end semanticdb maven . . snapshots/DocstringSuperclass# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/DocstringSuperclass#``(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/Docstrings# -//⌄ enclosing_range_start semanticdb maven . . snapshots/Docstrings#``(). +// signature_documentation kotlin public constructor(): DocstringSuperclass +// kind Constructor +// ⌃ enclosing_range_end scip-java maven . . snapshots/DocstringSuperclass# +// ⌃ enclosing_range_end scip-java maven . . snapshots/DocstringSuperclass#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/Docstrings# +//⌄ enclosing_range_start scip-java maven . . snapshots/Docstrings#``(). /** Example class docstring. */ class Docstrings : DocstringSuperclass(), Serializable { -// ^^^^^^^^^^ definition semanticdb maven . . snapshots/Docstrings# +// ^^^^^^^^^^ definition scip-java maven . . snapshots/Docstrings# // display_name Docstrings -// documentation ```kotlin\npublic final class Docstrings : DocstringSuperclass, Serializable\n```\n\n----\n\n Example class docstring. -// relationship is_reference is_implementation semanticdb maven . . snapshots/DocstringSuperclass# -// relationship is_reference is_implementation semanticdb maven jdk 11 java/io/Serializable# -// ^^^^^^^^^^ definition semanticdb maven . . snapshots/Docstrings#``(). +// signature_documentation kotlin public final class Docstrings : DocstringSuperclass, Serializable +// kind Class +// documentation Example class docstring. +// relationship is_implementation scip-java maven . . snapshots/DocstringSuperclass# +// relationship is_implementation scip-java maven jdk 11 java/io/Serializable# +// ^^^^^^^^^^ definition scip-java maven . . snapshots/Docstrings#``(). // display_name Docstrings -// documentation ```kotlin\npublic constructor(): Docstrings\n```\n\n----\n\n Example class docstring. -// ^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . snapshots/DocstringSuperclass# -// ^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/io/Serializable# +// signature_documentation kotlin public constructor(): Docstrings +// kind Constructor +// documentation Example class docstring. +// ^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . snapshots/DocstringSuperclass# +// ^^^^^^^^^^^^ reference scip-java maven jdk 11 java/io/Serializable# } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Docstrings# -//⌃ enclosing_range_end semanticdb maven . . snapshots/Docstrings#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/Docstrings# +//⌃ enclosing_range_end scip-java maven . . snapshots/Docstrings#``(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/docstrings(). +//⌄ enclosing_range_start scip-java maven . . snapshots/docstrings(). /** Example method docstring. */ fun docstrings() { } -// ^^^^^^^^^^ definition semanticdb maven . . snapshots/docstrings(). +// ^^^^^^^^^^ definition scip-java maven . . snapshots/docstrings(). // display_name docstrings -// documentation ```kotlin\npublic final fun docstrings(): Unit\n```\n\n----\n\n Example method docstring. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/docstrings(). +// signature_documentation kotlin public final fun docstrings(): Unit +// kind Method +// documentation Example method docstring. +// ⌃ enclosing_range_end scip-java maven . . snapshots/docstrings(). diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Functions.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Functions.kt index 30f646798..8df23c98b 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Functions.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Functions.kt @@ -1,19 +1,21 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ -//⌄ enclosing_range_start semanticdb maven . . snapshots/sampleText(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/sampleText().(x) +//⌄ enclosing_range_start scip-java maven . . snapshots/sampleText(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/sampleText().(x) fun sampleText(x: String = "") { -// ^^^^^^^^^^ definition semanticdb maven . . snapshots/sampleText(). +// ^^^^^^^^^^ definition scip-java maven . . snapshots/sampleText(). // display_name sampleText -// documentation ```kotlin\npublic final fun sampleText(x: String = ...): Unit\n``` -// ^ definition semanticdb maven . . snapshots/sampleText().(x) +// signature_documentation kotlin public final fun sampleText(x: String = ...): Unit +// kind Method +// ^ definition scip-java maven . . snapshots/sampleText().(x) // display_name x -// documentation ```kotlin\nx: String = ...\n``` -// ^^^^^^ reference semanticdb maven . . kotlin/String# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/sampleText().(x) +// signature_documentation kotlin x: String = ... +// kind Parameter +// ^^^^^^ reference scip-java maven . . kotlin/String# +// ⌃ enclosing_range_end scip-java maven . . snapshots/sampleText().(x) println(x) -// ^^^^^^^ reference semanticdb maven . . kotlin/io/println(). -// ^ reference semanticdb maven . . snapshots/sampleText().(x) +// ^^^^^^^ reference scip-java maven . . kotlin/io/println(). +// ^ reference scip-java maven . . snapshots/sampleText().(x) } -//⌃ enclosing_range_end semanticdb maven . . snapshots/sampleText(). +//⌃ enclosing_range_end scip-java maven . . snapshots/sampleText(). diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Implementations.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Implementations.kt index ebd286d31..635d7b6f1 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Implementations.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Implementations.kt @@ -1,129 +1,146 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ -//⌄ enclosing_range_start semanticdb maven . . snapshots/Overrides# -//⌄ enclosing_range_start semanticdb maven . . snapshots/Overrides#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/Overrides# +//⌄ enclosing_range_start scip-java maven . . snapshots/Overrides#``(). class Overrides : AutoCloseable { -// ^^^^^^^^^ definition semanticdb maven . . snapshots/Overrides# +// ^^^^^^^^^ definition scip-java maven . . snapshots/Overrides# // display_name Overrides -// documentation ```kotlin\npublic final class Overrides : {kotlin/AutoCloseable=} AutoCloseable\n``` -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/AutoCloseable# -// ^^^^^^^^^ definition semanticdb maven . . snapshots/Overrides#``(). +// signature_documentation kotlin public final class Overrides : {kotlin/AutoCloseable=} AutoCloseable +// kind Class +// relationship is_implementation scip-java maven jdk 11 java/lang/AutoCloseable# +// ^^^^^^^^^ definition scip-java maven . . snapshots/Overrides#``(). // display_name Overrides -// documentation ```kotlin\npublic constructor(): Overrides\n``` -// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/AutoCloseable# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Overrides#close(). +// signature_documentation kotlin public constructor(): Overrides +// kind Constructor +// ^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/AutoCloseable# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Overrides#close(). override fun close() { -// ^^^^^ definition semanticdb maven . . snapshots/Overrides#close(). +// ^^^^^ definition scip-java maven . . snapshots/Overrides#close(). // display_name close -// documentation ```kotlin\npublic open override fun close(): Unit\n``` -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/AutoCloseable#close(). +// signature_documentation kotlin public open override fun close(): Unit +// kind Method +// relationship is_reference is_implementation scip-java maven jdk 11 java/lang/AutoCloseable#close(). TODO("Not yet implemented") -// ^^^^ reference semanticdb maven . . kotlin/TODO(+1). +// ^^^^ reference scip-java maven . . kotlin/TODO(+1). } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Overrides#close(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Overrides#close(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Overrides# -//⌃ enclosing_range_end semanticdb maven . . snapshots/Overrides#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/Overrides# +//⌃ enclosing_range_end scip-java maven . . snapshots/Overrides#``(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/Animal# +//⌄ enclosing_range_start scip-java maven . . snapshots/Animal# interface Animal { -// ^^^^^^ definition semanticdb maven . . snapshots/Animal# +// ^^^^^^ definition scip-java maven . . snapshots/Animal# // display_name Animal -// documentation ```kotlin\npublic abstract interface Animal : Any\n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Animal#favoriteNumber. -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Animal#getFavoriteNumber(). +// signature_documentation kotlin public abstract interface Animal : Any +// kind Interface +// ⌄ enclosing_range_start scip-java maven . . snapshots/Animal#favoriteNumber. +// ⌄ enclosing_range_start scip-java maven . . snapshots/Animal#getFavoriteNumber(). val favoriteNumber: Int -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Animal#favoriteNumber. +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Animal#favoriteNumber. // display_name favoriteNumber -// documentation ```kotlin\npublic abstract val favoriteNumber: Int\n``` -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Animal#getFavoriteNumber(). +// signature_documentation kotlin public abstract val favoriteNumber: Int +// kind Property +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Animal#getFavoriteNumber(). // display_name favoriteNumber -// documentation ```kotlin\npublic get(): Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Animal#favoriteNumber. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Animal#getFavoriteNumber(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Animal#sound(). +// signature_documentation kotlin public get(): Int +// kind Method +// ^^^ reference scip-java maven . . kotlin/Int# +// ⌃ enclosing_range_end scip-java maven . . snapshots/Animal#favoriteNumber. +// ⌃ enclosing_range_end scip-java maven . . snapshots/Animal#getFavoriteNumber(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Animal#sound(). fun sound(): String -// ^^^^^ definition semanticdb maven . . snapshots/Animal#sound(). +// ^^^^^ definition scip-java maven . . snapshots/Animal#sound(). // display_name sound -// documentation ```kotlin\npublic abstract fun sound(): String\n\n``` -// ^^^^^^ reference semanticdb maven . . kotlin/String# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Animal#sound(). +// signature_documentation kotlin public abstract fun sound(): String\n +// kind Method +// ^^^^^^ reference scip-java maven . . kotlin/String# +// ⌃ enclosing_range_end scip-java maven . . snapshots/Animal#sound(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Animal# -//⌄ enclosing_range_start semanticdb maven . . snapshots/Bird# -//⌄ enclosing_range_start semanticdb maven . . snapshots/Bird#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/Animal# +//⌄ enclosing_range_start scip-java maven . . snapshots/Bird# +//⌄ enclosing_range_start scip-java maven . . snapshots/Bird#``(). open class Bird : Animal { -// ^^^^ definition semanticdb maven . . snapshots/Bird# +// ^^^^ definition scip-java maven . . snapshots/Bird# // display_name Bird -// documentation ```kotlin\npublic open class Bird : Animal\n``` -// relationship is_reference is_implementation semanticdb maven . . snapshots/Animal# -// ^^^^ definition semanticdb maven . . snapshots/Bird#``(). +// signature_documentation kotlin public open class Bird : Animal +// kind Class +// relationship is_implementation scip-java maven . . snapshots/Animal# +// ^^^^ definition scip-java maven . . snapshots/Bird#``(). // display_name Bird -// documentation ```kotlin\npublic constructor(): Bird\n``` -// ^^^^^^ reference semanticdb maven . . snapshots/Animal# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Bird#favoriteNumber. +// signature_documentation kotlin public constructor(): Bird +// kind Constructor +// ^^^^^^ reference scip-java maven . . snapshots/Animal# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Bird#favoriteNumber. override val favoriteNumber: Int -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Bird#favoriteNumber. +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Bird#favoriteNumber. // display_name favoriteNumber -// documentation ```kotlin\npublic open override val favoriteNumber: Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Bird#getFavoriteNumber(). +// signature_documentation kotlin public open override val favoriteNumber: Int +// kind Property +// ^^^ reference scip-java maven . . kotlin/Int# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Bird#getFavoriteNumber(). get() = 42 -// ^^^ definition semanticdb maven . . snapshots/Bird#getFavoriteNumber(). +// ^^^ definition scip-java maven . . snapshots/Bird#getFavoriteNumber(). // display_name favoriteNumber -// documentation ```kotlin\npublic get(): Int\n``` -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Bird#favoriteNumber. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Bird#getFavoriteNumber(). +// signature_documentation kotlin public get(): Int +// kind Method +// ⌃ enclosing_range_end scip-java maven . . snapshots/Bird#favoriteNumber. +// ⌃ enclosing_range_end scip-java maven . . snapshots/Bird#getFavoriteNumber(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Bird#sound(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Bird#sound(). override fun sound(): String { -// ^^^^^ definition semanticdb maven . . snapshots/Bird#sound(). +// ^^^^^ definition scip-java maven . . snapshots/Bird#sound(). // display_name sound -// documentation ```kotlin\npublic open override fun sound(): String\n``` -// relationship is_reference is_implementation semanticdb maven . . snapshots/Animal#sound(). -// ^^^^^^ reference semanticdb maven . . kotlin/String# +// signature_documentation kotlin public open override fun sound(): String +// kind Method +// relationship is_reference is_implementation scip-java maven . . snapshots/Animal#sound(). +// ^^^^^^ reference scip-java maven . . kotlin/String# return "tweet" } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Bird#sound(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Bird#sound(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Bird# -//⌃ enclosing_range_end semanticdb maven . . snapshots/Bird#``(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/Seagull# -//⌄ enclosing_range_start semanticdb maven . . snapshots/Seagull#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/Bird# +//⌃ enclosing_range_end scip-java maven . . snapshots/Bird#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/Seagull# +//⌄ enclosing_range_start scip-java maven . . snapshots/Seagull#``(). class Seagull : Bird() { -// ^^^^^^^ definition semanticdb maven . . snapshots/Seagull# +// ^^^^^^^ definition scip-java maven . . snapshots/Seagull# // display_name Seagull -// documentation ```kotlin\npublic final class Seagull : Bird\n``` -// relationship is_reference is_implementation semanticdb maven . . snapshots/Bird# -// ^^^^^^^ definition semanticdb maven . . snapshots/Seagull#``(). +// signature_documentation kotlin public final class Seagull : Bird +// kind Class +// relationship is_implementation scip-java maven . . snapshots/Bird# +// ^^^^^^^ definition scip-java maven . . snapshots/Seagull#``(). // display_name Seagull -// documentation ```kotlin\npublic constructor(): Seagull\n``` -// ^^^^ reference semanticdb maven . . snapshots/Bird# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Seagull#favoriteNumber. +// signature_documentation kotlin public constructor(): Seagull +// kind Constructor +// ^^^^ reference scip-java maven . . snapshots/Bird# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Seagull#favoriteNumber. override val favoriteNumber: Int -// ^^^^^^^^^^^^^^ definition semanticdb maven . . snapshots/Seagull#favoriteNumber. +// ^^^^^^^^^^^^^^ definition scip-java maven . . snapshots/Seagull#favoriteNumber. // display_name favoriteNumber -// documentation ```kotlin\npublic open override val favoriteNumber: Int\n``` -// ^^^ reference semanticdb maven . . kotlin/Int# -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Seagull#getFavoriteNumber(). +// signature_documentation kotlin public open override val favoriteNumber: Int +// kind Property +// ^^^ reference scip-java maven . . kotlin/Int# +// ⌄ enclosing_range_start scip-java maven . . snapshots/Seagull#getFavoriteNumber(). get() = 1337 -// ^^^ definition semanticdb maven . . snapshots/Seagull#getFavoriteNumber(). +// ^^^ definition scip-java maven . . snapshots/Seagull#getFavoriteNumber(). // display_name favoriteNumber -// documentation ```kotlin\npublic get(): Int\n``` -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Seagull#favoriteNumber. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Seagull#getFavoriteNumber(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/Seagull#sound(). +// signature_documentation kotlin public get(): Int +// kind Method +// ⌃ enclosing_range_end scip-java maven . . snapshots/Seagull#favoriteNumber. +// ⌃ enclosing_range_end scip-java maven . . snapshots/Seagull#getFavoriteNumber(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/Seagull#sound(). override fun sound(): String { -// ^^^^^ definition semanticdb maven . . snapshots/Seagull#sound(). +// ^^^^^ definition scip-java maven . . snapshots/Seagull#sound(). // display_name sound -// documentation ```kotlin\npublic open override fun sound(): String\n``` -// relationship is_reference is_implementation semanticdb maven . . snapshots/Bird#sound(). -// ^^^^^^ reference semanticdb maven . . kotlin/String# +// signature_documentation kotlin public open override fun sound(): String +// kind Method +// relationship is_reference is_implementation scip-java maven . . snapshots/Bird#sound(). +// ^^^^^^ reference scip-java maven . . kotlin/String# return "squawk" } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/Seagull#sound(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/Seagull#sound(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/Seagull# -//⌃ enclosing_range_end semanticdb maven . . snapshots/Seagull#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/Seagull# +//⌃ enclosing_range_end scip-java maven . . snapshots/Seagull#``(). diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Lambdas.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Lambdas.kt index d531349ba..50448bf78 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Lambdas.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/Lambdas.kt @@ -1,66 +1,75 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ -//⌄ enclosing_range_start semanticdb maven . . snapshots/x. -//⌄ enclosing_range_start semanticdb maven . . snapshots/getX(). +//⌄ enclosing_range_start scip-java maven . . snapshots/x. +//⌄ enclosing_range_start scip-java maven . . snapshots/getX(). // ⌄ enclosing_range_start local 0 // ⌄ enclosing_range_start local 1 val x = arrayListOf().forEachIndexed { i, s -> println("$i $s") } -// ^ definition semanticdb maven . . snapshots/getX(). +// ^ definition scip-java maven . . snapshots/getX(). // display_name x -// documentation ```kotlin\npublic get(): Unit\n``` -// ^ definition semanticdb maven . . snapshots/x. +// signature_documentation kotlin public get(): Unit +// kind Method +// ^ definition scip-java maven . . snapshots/x. // display_name x -// documentation ```kotlin\npublic final val x: Unit\n``` -// ^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/arrayListOf(). -// ^^^^^^^^^^^^^^ reference semanticdb maven . . kotlin/collections/forEachIndexed(+9). +// signature_documentation kotlin public final val x: Unit +// kind Property +// ^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/arrayListOf(). +// ^^^^^^^^^^^^^^ reference scip-java maven . . kotlin/collections/forEachIndexed(+9). // ^ definition local 0 // display_name i -// documentation ```kotlin\ni: Int\n``` +// signature_documentation kotlin i: Int +// kind Parameter // ^ definition local 1 // display_name s -// documentation ```kotlin\ns: String\n``` -// ^^^^^^^ reference semanticdb maven . . kotlin/io/println(). +// signature_documentation kotlin s: String +// kind Parameter +// ^^^^^^^ reference scip-java maven . . kotlin/io/println(). // ^ reference local 0 // ^ reference local 1 // ⌃ enclosing_range_end local 0 // ⌃ enclosing_range_end local 1 -// ⌃ enclosing_range_end semanticdb maven . . snapshots/x. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/getX(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/x. +// ⌃ enclosing_range_end scip-java maven . . snapshots/getX(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/y. -//⌄ enclosing_range_start semanticdb maven . . snapshots/getY(). +//⌄ enclosing_range_start scip-java maven . . snapshots/y. +//⌄ enclosing_range_start scip-java maven . . snapshots/getY(). val y = "fdsa".run { this.toByteArray() } -// ^ definition semanticdb maven . . snapshots/getY(). +// ^ definition scip-java maven . . snapshots/getY(). // display_name y -// documentation ```kotlin\npublic get(): ByteArray\n``` -// ^ definition semanticdb maven . . snapshots/y. +// signature_documentation kotlin public get(): ByteArray +// kind Method +// ^ definition scip-java maven . . snapshots/y. // display_name y -// documentation ```kotlin\npublic final val y: ByteArray\n``` -// ^^^ reference semanticdb maven . . kotlin/run(+1). -// ^^^^^^^^^^^ reference semanticdb maven . . kotlin/text/toByteArray(). -// ⌃ enclosing_range_end semanticdb maven . . snapshots/y. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/getY(). +// signature_documentation kotlin public final val y: ByteArray +// kind Property +// ^^^ reference scip-java maven . . kotlin/run(+1). +// ^^^^^^^^^^^ reference scip-java maven . . kotlin/text/toByteArray(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/y. +// ⌃ enclosing_range_end scip-java maven . . snapshots/getY(). -//⌄ enclosing_range_start semanticdb maven . . snapshots/z. -//⌄ enclosing_range_start semanticdb maven . . snapshots/getZ(). +//⌄ enclosing_range_start scip-java maven . . snapshots/z. +//⌄ enclosing_range_start scip-java maven . . snapshots/getZ(). // ⌄ enclosing_range_start local 2 val z = y.let { it.size } -// ^ definition semanticdb maven . . snapshots/getZ(). +// ^ definition scip-java maven . . snapshots/getZ(). // display_name z -// documentation ```kotlin\npublic get(): Int\n``` -// ^ definition semanticdb maven . . snapshots/z. +// signature_documentation kotlin public get(): Int +// kind Method +// ^ definition scip-java maven . . snapshots/z. // display_name z -// documentation ```kotlin\npublic final val z: Int\n``` -// ^ reference semanticdb maven . . snapshots/getY(). -// ^ reference semanticdb maven . . snapshots/y. -// ^^^ reference semanticdb maven . . kotlin/let(). +// signature_documentation kotlin public final val z: Int +// kind Property +// ^ reference scip-java maven . . snapshots/getY(). +// ^ reference scip-java maven . . snapshots/y. +// ^^^ reference scip-java maven . . kotlin/let(). // ^^^^^^^^^^^ definition local 2 // display_name it -// documentation ```kotlin\nit: ByteArray\n``` +// signature_documentation kotlin it: ByteArray +// kind Parameter // ^^ reference local 2 -// ^^^^ reference semanticdb maven . . kotlin/ByteArray#getSize(). -// ^^^^ reference semanticdb maven . . kotlin/ByteArray#size. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/z. -// ⌃ enclosing_range_end semanticdb maven . . snapshots/getZ(). +// ^^^^ reference scip-java maven . . kotlin/ByteArray#getSize(). +// ^^^^ reference scip-java maven . . kotlin/ByteArray#size. +// ⌃ enclosing_range_end scip-java maven . . snapshots/z. // ⌃ enclosing_range_end local 2 +// ⌃ enclosing_range_end scip-java maven . . snapshots/getZ(). diff --git a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/ObjectKt.kt b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/ObjectKt.kt index 5a4b21f3c..62e50ac11 100644 --- a/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/ObjectKt.kt +++ b/semanticdb-kotlinc/minimized/src/generatedSnapshots/resources/semanticdb-kotlinc/minimized/src/main/kotlin/snapshots/ObjectKt.kt @@ -1,37 +1,41 @@ package snapshots -// ^^^^^^^^^ reference semanticdb maven . . snapshots/ +// ^^^^^^^^^ reference scip-java maven . . snapshots/ import java.lang.RuntimeException -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/RuntimeException# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/RuntimeException# -//⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKt# -//⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKt#``(). +//⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKt# +//⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKt#``(). object ObjectKt { -// ^^^^^^^^ definition semanticdb maven . . snapshots/ObjectKt# +// ^^^^^^^^ definition scip-java maven . . snapshots/ObjectKt# // display_name ObjectKt -// documentation ```kotlin\npublic final object ObjectKt : Any\n``` -// ^^^^^^^^ definition semanticdb maven . . snapshots/ObjectKt#``(). +// signature_documentation kotlin public final object ObjectKt : Any +// kind Object +// ^^^^^^^^ definition scip-java maven . . snapshots/ObjectKt#``(). // display_name ObjectKt -// documentation ```kotlin\nprivate constructor(): ObjectKt\n``` -// ⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKt#fail(). -// ⌄ enclosing_range_start semanticdb maven . . snapshots/ObjectKt#fail().(message) +// signature_documentation kotlin private constructor(): ObjectKt +// kind Constructor +// ⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKt#fail(). +// ⌄ enclosing_range_start scip-java maven . . snapshots/ObjectKt#fail().(message) fun fail(message: String?): Nothing { -// ^^^^ definition semanticdb maven . . snapshots/ObjectKt#fail(). +// ^^^^ definition scip-java maven . . snapshots/ObjectKt#fail(). // display_name fail -// documentation ```kotlin\npublic final fun fail(message: String?): Nothing\n``` -// ^^^^^^^ definition semanticdb maven . . snapshots/ObjectKt#fail().(message) +// signature_documentation kotlin public final fun fail(message: String?): Nothing +// kind Method +// ^^^^^^^ definition scip-java maven . . snapshots/ObjectKt#fail().(message) // display_name message -// documentation ```kotlin\nmessage: String?\n``` -// ^^^^^^^ reference semanticdb maven . . kotlin/String# -// ^^^^^^^ reference semanticdb maven . . kotlin/Nothing# -// ⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKt#fail().(message) +// signature_documentation kotlin message: String? +// kind Parameter +// ^^^^^^^ reference scip-java maven . . kotlin/String# +// ^^^^^^^ reference scip-java maven . . kotlin/Nothing# +// ⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKt#fail().(message) throw RuntimeException(message) -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/RuntimeException#``(). -// ^^^^^^^ reference semanticdb maven . . snapshots/ObjectKt#fail().(message) +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/RuntimeException#``(). +// ^^^^^^^ reference scip-java maven . . snapshots/ObjectKt#fail().(message) } -// ⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKt#fail(). +// ⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKt#fail(). } -//⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKt# -//⌃ enclosing_range_end semanticdb maven . . snapshots/ObjectKt#``(). +//⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKt# +//⌃ enclosing_range_end scip-java maven . . snapshots/ObjectKt#``(). diff --git a/semanticdb-kotlinc/src/main/java/com/sourcegraph/semanticdb_kotlinc/SemanticdbBuilders.kt b/semanticdb-kotlinc/src/main/java/com/sourcegraph/semanticdb_kotlinc/SemanticdbBuilders.kt deleted file mode 100644 index 652ebe267..000000000 --- a/semanticdb-kotlinc/src/main/java/com/sourcegraph/semanticdb_kotlinc/SemanticdbBuilders.kt +++ /dev/null @@ -1,407 +0,0 @@ -// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -@file:JvmName("-SemanticdbBuilders") - -package com.sourcegraph.semanticdb_kotlinc - -import kotlin.DslMarker -import kotlin.Unit -import kotlin.annotation.AnnotationRetention -import kotlin.annotation.AnnotationTarget -import kotlin.annotation.Retention -import kotlin.annotation.Target -import kotlin.jvm.JvmName - -inline fun Semanticdb.TextDocuments.copy(block: Semanticdb.TextDocuments.Builder.() -> Unit): - Semanticdb.TextDocuments = this.toBuilder().apply(block).build() - -operator fun Semanticdb.TextDocuments.plus(other: Semanticdb.TextDocuments): - Semanticdb.TextDocuments = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.TextDocuments?.orDefault(): Semanticdb.TextDocuments = this ?: - Semanticdb.TextDocuments.getDefaultInstance() - -inline fun Semanticdb.TextDocuments.Builder.addDocuments(block: - Semanticdb.TextDocument.Builder.() -> Unit): Semanticdb.TextDocuments.Builder = - this.addDocuments(Semanticdb.TextDocument.newBuilder().apply(block).build()) - -inline fun Semanticdb.TextDocument.copy(block: Semanticdb.TextDocument.Builder.() -> Unit): - Semanticdb.TextDocument = this.toBuilder().apply(block).build() - -operator fun Semanticdb.TextDocument.plus(other: Semanticdb.TextDocument): Semanticdb.TextDocument = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.TextDocument?.orDefault(): Semanticdb.TextDocument = this ?: - Semanticdb.TextDocument.getDefaultInstance() - -inline fun Semanticdb.TextDocument.Builder.addSymbols(block: - Semanticdb.SymbolInformation.Builder.() -> Unit): Semanticdb.TextDocument.Builder = - this.addSymbols(Semanticdb.SymbolInformation.newBuilder().apply(block).build()) - -inline fun Semanticdb.TextDocument.Builder.addOccurrences(block: - Semanticdb.SymbolOccurrence.Builder.() -> Unit): Semanticdb.TextDocument.Builder = - this.addOccurrences(Semanticdb.SymbolOccurrence.newBuilder().apply(block).build()) - -inline fun Semanticdb.Range.copy(block: Semanticdb.Range.Builder.() -> Unit): Semanticdb.Range = - this.toBuilder().apply(block).build() - -operator fun Semanticdb.Range.plus(other: Semanticdb.Range): Semanticdb.Range = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Range?.orDefault(): Semanticdb.Range = this ?: Semanticdb.Range.getDefaultInstance() - -inline fun Semanticdb.Signature.copy(block: Semanticdb.Signature.Builder.() -> Unit): - Semanticdb.Signature = this.toBuilder().apply(block).build() - -operator fun Semanticdb.Signature.plus(other: Semanticdb.Signature): Semanticdb.Signature = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Signature?.orDefault(): Semanticdb.Signature = this ?: - Semanticdb.Signature.getDefaultInstance() - -inline fun Semanticdb.Signature.Builder.classSignature(block: - Semanticdb.ClassSignature.Builder.() -> Unit): Semanticdb.Signature.Builder = - this.setClassSignature(Semanticdb.ClassSignature.newBuilder().apply(block).build()) - -inline fun Semanticdb.Signature.Builder.methodSignature(block: - Semanticdb.MethodSignature.Builder.() -> Unit): Semanticdb.Signature.Builder = - this.setMethodSignature(Semanticdb.MethodSignature.newBuilder().apply(block).build()) - -inline fun Semanticdb.Signature.Builder.typeSignature(block: Semanticdb.TypeSignature.Builder.() -> - Unit): Semanticdb.Signature.Builder = - this.setTypeSignature(Semanticdb.TypeSignature.newBuilder().apply(block).build()) - -inline fun Semanticdb.Signature.Builder.valueSignature(block: - Semanticdb.ValueSignature.Builder.() -> Unit): Semanticdb.Signature.Builder = - this.setValueSignature(Semanticdb.ValueSignature.newBuilder().apply(block).build()) - -inline fun Semanticdb.ClassSignature.copy(block: Semanticdb.ClassSignature.Builder.() -> Unit): - Semanticdb.ClassSignature = this.toBuilder().apply(block).build() - -operator fun Semanticdb.ClassSignature.plus(other: Semanticdb.ClassSignature): - Semanticdb.ClassSignature = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.ClassSignature?.orDefault(): Semanticdb.ClassSignature = this ?: - Semanticdb.ClassSignature.getDefaultInstance() - -inline fun Semanticdb.ClassSignature.Builder.typeParameters(block: Semanticdb.Scope.Builder.() -> - Unit): Semanticdb.ClassSignature.Builder = - this.setTypeParameters(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun Semanticdb.ClassSignature.Builder.addParents(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.ClassSignature.Builder = - this.addParents(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.ClassSignature.Builder.declarations(block: Semanticdb.Scope.Builder.() -> - Unit): Semanticdb.ClassSignature.Builder = - this.setDeclarations(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun Semanticdb.MethodSignature.copy(block: Semanticdb.MethodSignature.Builder.() -> Unit): - Semanticdb.MethodSignature = this.toBuilder().apply(block).build() - -operator fun Semanticdb.MethodSignature.plus(other: Semanticdb.MethodSignature): - Semanticdb.MethodSignature = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.MethodSignature?.orDefault(): Semanticdb.MethodSignature = this ?: - Semanticdb.MethodSignature.getDefaultInstance() - -inline fun Semanticdb.MethodSignature.Builder.typeParameters(block: Semanticdb.Scope.Builder.() -> - Unit): Semanticdb.MethodSignature.Builder = - this.setTypeParameters(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun Semanticdb.MethodSignature.Builder.addParameterLists(block: - Semanticdb.Scope.Builder.() -> Unit): Semanticdb.MethodSignature.Builder = - this.addParameterLists(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun Semanticdb.MethodSignature.Builder.returnType(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.MethodSignature.Builder = - this.setReturnType(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.TypeSignature.copy(block: Semanticdb.TypeSignature.Builder.() -> Unit): - Semanticdb.TypeSignature = this.toBuilder().apply(block).build() - -operator fun Semanticdb.TypeSignature.plus(other: Semanticdb.TypeSignature): - Semanticdb.TypeSignature = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.TypeSignature?.orDefault(): Semanticdb.TypeSignature = this ?: - Semanticdb.TypeSignature.getDefaultInstance() - -inline fun Semanticdb.TypeSignature.Builder.typeParameters(block: Semanticdb.Scope.Builder.() -> - Unit): Semanticdb.TypeSignature.Builder = - this.setTypeParameters(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun Semanticdb.TypeSignature.Builder.lowerBound(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.TypeSignature.Builder = - this.setLowerBound(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.TypeSignature.Builder.upperBound(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.TypeSignature.Builder = - this.setUpperBound(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.ValueSignature.copy(block: Semanticdb.ValueSignature.Builder.() -> Unit): - Semanticdb.ValueSignature = this.toBuilder().apply(block).build() - -operator fun Semanticdb.ValueSignature.plus(other: Semanticdb.ValueSignature): - Semanticdb.ValueSignature = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.ValueSignature?.orDefault(): Semanticdb.ValueSignature = this ?: - Semanticdb.ValueSignature.getDefaultInstance() - -inline fun Semanticdb.ValueSignature.Builder.tpe(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.ValueSignature.Builder = - this.setTpe(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.SymbolInformation.copy(block: Semanticdb.SymbolInformation.Builder.() -> - Unit): Semanticdb.SymbolInformation = this.toBuilder().apply(block).build() - -operator fun Semanticdb.SymbolInformation.plus(other: Semanticdb.SymbolInformation): - Semanticdb.SymbolInformation = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.SymbolInformation?.orDefault(): Semanticdb.SymbolInformation = this ?: - Semanticdb.SymbolInformation.getDefaultInstance() - -inline fun Semanticdb.SymbolInformation.Builder.signature(block: Semanticdb.Signature.Builder.() -> - Unit): Semanticdb.SymbolInformation.Builder = - this.setSignature(Semanticdb.Signature.newBuilder().apply(block).build()) - -inline fun Semanticdb.SymbolInformation.Builder.access(block: Semanticdb.Access.Builder.() -> Unit): - Semanticdb.SymbolInformation.Builder = - this.setAccess(Semanticdb.Access.newBuilder().apply(block).build()) - -inline fun Semanticdb.SymbolInformation.Builder.documentation(block: - Semanticdb.Documentation.Builder.() -> Unit): Semanticdb.SymbolInformation.Builder = - this.setDocumentation(Semanticdb.Documentation.newBuilder().apply(block).build()) - -inline fun Semanticdb.Access.copy(block: Semanticdb.Access.Builder.() -> Unit): Semanticdb.Access = - this.toBuilder().apply(block).build() - -operator fun Semanticdb.Access.plus(other: Semanticdb.Access): Semanticdb.Access = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Access?.orDefault(): Semanticdb.Access = this ?: - Semanticdb.Access.getDefaultInstance() - -inline fun Semanticdb.Access.Builder.privateAccess(block: Semanticdb.PrivateAccess.Builder.() -> - Unit): Semanticdb.Access.Builder = - this.setPrivateAccess(Semanticdb.PrivateAccess.newBuilder().apply(block).build()) - -inline fun Semanticdb.Access.Builder.privateWithinAccess(block: - Semanticdb.PrivateWithinAccess.Builder.() -> Unit): Semanticdb.Access.Builder = - this.setPrivateWithinAccess(Semanticdb.PrivateWithinAccess.newBuilder().apply(block).build()) - -inline fun Semanticdb.Access.Builder.protectedAccess(block: Semanticdb.ProtectedAccess.Builder.() -> - Unit): Semanticdb.Access.Builder = - this.setProtectedAccess(Semanticdb.ProtectedAccess.newBuilder().apply(block).build()) - -inline fun Semanticdb.Access.Builder.publicAccess(block: Semanticdb.PublicAccess.Builder.() -> - Unit): Semanticdb.Access.Builder = - this.setPublicAccess(Semanticdb.PublicAccess.newBuilder().apply(block).build()) - -inline fun Semanticdb.PrivateAccess.copy(block: Semanticdb.PrivateAccess.Builder.() -> Unit): - Semanticdb.PrivateAccess = this.toBuilder().apply(block).build() - -operator fun Semanticdb.PrivateAccess.plus(other: Semanticdb.PrivateAccess): - Semanticdb.PrivateAccess = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.PrivateAccess?.orDefault(): Semanticdb.PrivateAccess = this ?: - Semanticdb.PrivateAccess.getDefaultInstance() - -inline fun Semanticdb.PrivateWithinAccess.copy(block: Semanticdb.PrivateWithinAccess.Builder.() -> - Unit): Semanticdb.PrivateWithinAccess = this.toBuilder().apply(block).build() - -operator fun Semanticdb.PrivateWithinAccess.plus(other: Semanticdb.PrivateWithinAccess): - Semanticdb.PrivateWithinAccess = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.PrivateWithinAccess?.orDefault(): Semanticdb.PrivateWithinAccess = this ?: - Semanticdb.PrivateWithinAccess.getDefaultInstance() - -inline fun Semanticdb.ProtectedAccess.copy(block: Semanticdb.ProtectedAccess.Builder.() -> Unit): - Semanticdb.ProtectedAccess = this.toBuilder().apply(block).build() - -operator fun Semanticdb.ProtectedAccess.plus(other: Semanticdb.ProtectedAccess): - Semanticdb.ProtectedAccess = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.ProtectedAccess?.orDefault(): Semanticdb.ProtectedAccess = this ?: - Semanticdb.ProtectedAccess.getDefaultInstance() - -inline fun Semanticdb.PublicAccess.copy(block: Semanticdb.PublicAccess.Builder.() -> Unit): - Semanticdb.PublicAccess = this.toBuilder().apply(block).build() - -operator fun Semanticdb.PublicAccess.plus(other: Semanticdb.PublicAccess): Semanticdb.PublicAccess = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.PublicAccess?.orDefault(): Semanticdb.PublicAccess = this ?: - Semanticdb.PublicAccess.getDefaultInstance() - -inline fun Semanticdb.Documentation.copy(block: Semanticdb.Documentation.Builder.() -> Unit): - Semanticdb.Documentation = this.toBuilder().apply(block).build() - -operator fun Semanticdb.Documentation.plus(other: Semanticdb.Documentation): - Semanticdb.Documentation = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Documentation?.orDefault(): Semanticdb.Documentation = this ?: - Semanticdb.Documentation.getDefaultInstance() - -inline fun Semanticdb.SymbolOccurrence.copy(block: Semanticdb.SymbolOccurrence.Builder.() -> Unit): - Semanticdb.SymbolOccurrence = this.toBuilder().apply(block).build() - -operator fun Semanticdb.SymbolOccurrence.plus(other: Semanticdb.SymbolOccurrence): - Semanticdb.SymbolOccurrence = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.SymbolOccurrence?.orDefault(): Semanticdb.SymbolOccurrence = this ?: - Semanticdb.SymbolOccurrence.getDefaultInstance() - -inline fun Semanticdb.SymbolOccurrence.Builder.range(block: Semanticdb.Range.Builder.() -> Unit): - Semanticdb.SymbolOccurrence.Builder = - this.setRange(Semanticdb.Range.newBuilder().apply(block).build()) - -inline fun Semanticdb.SymbolOccurrence.Builder.enclosingRange(block: Semanticdb.Range.Builder.() -> Unit): - Semanticdb.SymbolOccurrence.Builder = - this.setEnclosingRange(Semanticdb.Range.newBuilder().apply(block).build()) - -inline fun Semanticdb.Scope.copy(block: Semanticdb.Scope.Builder.() -> Unit): Semanticdb.Scope = - this.toBuilder().apply(block).build() - -operator fun Semanticdb.Scope.plus(other: Semanticdb.Scope): Semanticdb.Scope = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Scope?.orDefault(): Semanticdb.Scope = this ?: Semanticdb.Scope.getDefaultInstance() - -inline fun Semanticdb.Scope.Builder.addHardlinks(block: Semanticdb.SymbolInformation.Builder.() -> - Unit): Semanticdb.Scope.Builder = - this.addHardlinks(Semanticdb.SymbolInformation.newBuilder().apply(block).build()) - -inline fun Semanticdb.Type.copy(block: Semanticdb.Type.Builder.() -> Unit): Semanticdb.Type = - this.toBuilder().apply(block).build() - -operator fun Semanticdb.Type.plus(other: Semanticdb.Type): Semanticdb.Type = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.Type?.orDefault(): Semanticdb.Type = this ?: Semanticdb.Type.getDefaultInstance() - -inline fun Semanticdb.Type.Builder.typeRef(block: Semanticdb.TypeRef.Builder.() -> Unit): - Semanticdb.Type.Builder = - this.setTypeRef(Semanticdb.TypeRef.newBuilder().apply(block).build()) - -inline fun Semanticdb.Type.Builder.existentialType(block: Semanticdb.ExistentialType.Builder.() -> - Unit): Semanticdb.Type.Builder = - this.setExistentialType(Semanticdb.ExistentialType.newBuilder().apply(block).build()) - -inline fun Semanticdb.Type.Builder.intersectionType(block: Semanticdb.IntersectionType.Builder.() -> - Unit): Semanticdb.Type.Builder = - this.setIntersectionType(Semanticdb.IntersectionType.newBuilder().apply(block).build()) - -inline fun Semanticdb.TypeRef.copy(block: Semanticdb.TypeRef.Builder.() -> Unit): Semanticdb.TypeRef - = this.toBuilder().apply(block).build() - -operator fun Semanticdb.TypeRef.plus(other: Semanticdb.TypeRef): Semanticdb.TypeRef = - this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.TypeRef?.orDefault(): Semanticdb.TypeRef = this ?: - Semanticdb.TypeRef.getDefaultInstance() - -inline fun Semanticdb.TypeRef.Builder.addTypeArguments(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.TypeRef.Builder = - this.addTypeArguments(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.IntersectionType.copy(block: Semanticdb.IntersectionType.Builder.() -> Unit): - Semanticdb.IntersectionType = this.toBuilder().apply(block).build() - -operator fun Semanticdb.IntersectionType.plus(other: Semanticdb.IntersectionType): - Semanticdb.IntersectionType = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.IntersectionType?.orDefault(): Semanticdb.IntersectionType = this ?: - Semanticdb.IntersectionType.getDefaultInstance() - -inline fun Semanticdb.IntersectionType.Builder.addTypes(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.IntersectionType.Builder = - this.addTypes(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.ExistentialType.copy(block: Semanticdb.ExistentialType.Builder.() -> Unit): - Semanticdb.ExistentialType = this.toBuilder().apply(block).build() - -operator fun Semanticdb.ExistentialType.plus(other: Semanticdb.ExistentialType): - Semanticdb.ExistentialType = this.toBuilder().mergeFrom(other).build() - -fun Semanticdb.ExistentialType?.orDefault(): Semanticdb.ExistentialType = this ?: - Semanticdb.ExistentialType.getDefaultInstance() - -inline fun Semanticdb.ExistentialType.Builder.tpe(block: Semanticdb.Type.Builder.() -> Unit): - Semanticdb.ExistentialType.Builder = - this.setTpe(Semanticdb.Type.newBuilder().apply(block).build()) - -inline fun Semanticdb.ExistentialType.Builder.declarations(block: Semanticdb.Scope.Builder.() -> - Unit): Semanticdb.ExistentialType.Builder = - this.setDeclarations(Semanticdb.Scope.newBuilder().apply(block).build()) - -inline fun TextDocuments(block: Semanticdb.TextDocuments.Builder.() -> Unit): - Semanticdb.TextDocuments = Semanticdb.TextDocuments.newBuilder().apply(block).build() - -inline fun TextDocument(block: Semanticdb.TextDocument.Builder.() -> Unit): Semanticdb.TextDocument - = Semanticdb.TextDocument.newBuilder().apply(block).build() - -inline fun Range(block: Semanticdb.Range.Builder.() -> Unit): Semanticdb.Range = - Semanticdb.Range.newBuilder().apply(block).build() - -inline fun Signature(block: Semanticdb.Signature.Builder.() -> Unit): Semanticdb.Signature = - Semanticdb.Signature.newBuilder().apply(block).build() - -inline fun ClassSignature(block: Semanticdb.ClassSignature.Builder.() -> Unit): - Semanticdb.ClassSignature = Semanticdb.ClassSignature.newBuilder().apply(block).build() - -inline fun MethodSignature(block: Semanticdb.MethodSignature.Builder.() -> Unit): - Semanticdb.MethodSignature = Semanticdb.MethodSignature.newBuilder().apply(block).build() - -inline fun TypeSignature(block: Semanticdb.TypeSignature.Builder.() -> Unit): - Semanticdb.TypeSignature = Semanticdb.TypeSignature.newBuilder().apply(block).build() - -inline fun ValueSignature(block: Semanticdb.ValueSignature.Builder.() -> Unit): - Semanticdb.ValueSignature = Semanticdb.ValueSignature.newBuilder().apply(block).build() - -inline fun SymbolInformation(block: Semanticdb.SymbolInformation.Builder.() -> Unit): - Semanticdb.SymbolInformation = - Semanticdb.SymbolInformation.newBuilder().apply(block).build() - -inline fun Access(block: Semanticdb.Access.Builder.() -> Unit): Semanticdb.Access = - Semanticdb.Access.newBuilder().apply(block).build() - -inline fun PrivateAccess(block: Semanticdb.PrivateAccess.Builder.() -> Unit): - Semanticdb.PrivateAccess = Semanticdb.PrivateAccess.newBuilder().apply(block).build() - -inline fun PrivateWithinAccess(block: Semanticdb.PrivateWithinAccess.Builder.() -> Unit): - Semanticdb.PrivateWithinAccess = - Semanticdb.PrivateWithinAccess.newBuilder().apply(block).build() - -inline fun ProtectedAccess(block: Semanticdb.ProtectedAccess.Builder.() -> Unit): - Semanticdb.ProtectedAccess = Semanticdb.ProtectedAccess.newBuilder().apply(block).build() - -inline fun PublicAccess(block: Semanticdb.PublicAccess.Builder.() -> Unit): Semanticdb.PublicAccess - = Semanticdb.PublicAccess.newBuilder().apply(block).build() - -inline fun Documentation(block: Semanticdb.Documentation.Builder.() -> Unit): - Semanticdb.Documentation = Semanticdb.Documentation.newBuilder().apply(block).build() - -inline fun SymbolOccurrence(block: Semanticdb.SymbolOccurrence.Builder.() -> Unit): - Semanticdb.SymbolOccurrence = Semanticdb.SymbolOccurrence.newBuilder().apply(block).build() - -inline fun Scope(block: Semanticdb.Scope.Builder.() -> Unit): Semanticdb.Scope = - Semanticdb.Scope.newBuilder().apply(block).build() - -inline fun Type(block: Semanticdb.Type.Builder.() -> Unit): Semanticdb.Type = - Semanticdb.Type.newBuilder().apply(block).build() - -inline fun TypeRef(block: Semanticdb.TypeRef.Builder.() -> Unit): Semanticdb.TypeRef = - Semanticdb.TypeRef.newBuilder().apply(block).build() - -inline fun IntersectionType(block: Semanticdb.IntersectionType.Builder.() -> Unit): - Semanticdb.IntersectionType = Semanticdb.IntersectionType.newBuilder().apply(block).build() - -inline fun ExistentialType(block: Semanticdb.ExistentialType.Builder.() -> Unit): - Semanticdb.ExistentialType = Semanticdb.ExistentialType.newBuilder().apply(block).build() - -@DslMarker -@Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.BINARY) -annotation class SemanticdbDslMarker - -@SemanticdbDslMarker -interface SemanticdbDslBuilder diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerCommandLineProcessor.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerCommandLineProcessor.kt index 4c67ac789..291dd6ec7 100644 --- a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerCommandLineProcessor.kt +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerCommandLineProcessor.kt @@ -28,7 +28,7 @@ class AnalyzerCommandLineProcessor : CommandLineProcessor { CliOption( VAL_TARGET, "", - "the absolute path to the directory where to generate SemanticDB files.", + "the absolute path to the directory where to generate SCIP shard files.", required = true)) override fun processOption( diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerRegistrar.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerRegistrar.kt index 410dee517..2d65d45de 100644 --- a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerRegistrar.kt +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerRegistrar.kt @@ -9,8 +9,7 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter @OptIn(ExperimentalCompilerApi::class) @ExperimentalContracts -class AnalyzerRegistrar(private val callback: (Semanticdb.TextDocument) -> Unit = {}) : - CompilerPluginRegistrar() { +class AnalyzerRegistrar : CompilerPluginRegistrar() { override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) { FirExtensionRegistrarAdapter.registerExtension( AnalyzerFirExtensionRegistrar(sourceroot = configuration[KEY_SOURCES]!!) @@ -18,8 +17,7 @@ class AnalyzerRegistrar(private val callback: (Semanticdb.TextDocument) -> Unit IrGenerationExtension.registerExtension( PostAnalysisExtension( sourceRoot = configuration[KEY_SOURCES]!!, - targetRoot = configuration[KEY_TARGET]!!, - callback = callback)) + targetRoot = configuration[KEY_TARGET]!!)) } override val supportsK2: Boolean diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/PostAnalysisExtension.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/PostAnalysisExtension.kt index d002b7fbb..2552e8c15 100644 --- a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/PostAnalysisExtension.kt +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/PostAnalysisExtension.kt @@ -16,21 +16,22 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +/** + * IR generation extension that runs after FIR analysis to write the per-source SCIP shards + * collected by [SemanticdbVisitor]. The legacy SemanticDB protobuf output has been removed. + */ class PostAnalysisExtension( private val sourceRoot: Path, private val targetRoot: Path, - private val callback: (Semanticdb.TextDocument) -> Unit ) : IrGenerationExtension { @OptIn(ExperimentalContracts::class) override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { try { for ((ktSourceFile, visitor) in AnalyzerCheckers.visitors) { try { - val document = visitor.build() - semanticdbOutPathForFile(ktSourceFile)?.apply { - Files.write(this, TextDocuments { addDocuments(document) }.toByteArray()) + scipShardOutPathForFile(ktSourceFile)?.apply { + ScipShardWriter.write(this, visitor.buildScipIndex()) } - callback(document) } catch (e: Exception) { handleException(e) } @@ -40,20 +41,20 @@ class PostAnalysisExtension( } } - private fun semanticdbOutPathForFile(file: KtSourceFile): Path? { + private fun scipShardOutPathForFile(file: KtSourceFile): Path? { val normalizedPath = Paths.get(file.path).normalize() if (normalizedPath.startsWith(sourceRoot)) { val relative = sourceRoot.relativize(normalizedPath) - val filename = relative.fileName.toString() + ".semanticdb" - val semanticdbOutPath = + val filename = relative.fileName.toString() + ".scip" + val outPath = targetRoot .resolve("META-INF") - .resolve("semanticdb") + .resolve("scip") .resolve(relative) .resolveSibling(filename) - Files.createDirectories(semanticdbOutPath.parent) - return semanticdbOutPath + Files.createDirectories(outPath.parent) + return outPath } System.err.println( "given file is not under the sourceroot.\n\tSourceroot: $sourceRoot\n\tFile path: ${file.path}\n\tNormalized file path: $normalizedPath") @@ -83,7 +84,7 @@ class PostAnalysisExtension( writer.println("Exception in semanticdb-kotlin compiler plugin:") e.printStackTrace(writer) writer.println( - "Please report a bug to https://github.com/sourcegraph/scip-kotlin with the stack trace above.") + "Please report a bug to https://github.com/sourcegraph/scip-java with the stack trace above.") writer.close() } } diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipOccurrences.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipOccurrences.kt new file mode 100644 index 000000000..3123f2e8a --- /dev/null +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipOccurrences.kt @@ -0,0 +1,40 @@ +package com.sourcegraph.semanticdb_kotlinc + +import com.sourcegraph.Scip + +/** + * Helpers for deduplicating SCIP [Scip.Occurrence] entries by their `(symbol, range, roles)` key. + * + * Variants that differ only in whether `enclosing_range` is set are collapsed, preferring the one + * that carries the enclosing range. Mirrors the Java `ScipOccurrences` helper used by the javac + * plug-in. + */ +internal object ScipOccurrences { + + /** Returns a new list with duplicate occurrences collapsed in insertion order. */ + fun deduplicate(occurrences: List): List { + val out = LinkedHashMap() + for (occ in occurrences) put(out, occ) + return out.values.toList() + } + + /** Inserts [occ] into [out], collapsing duplicates by [Key]. */ + fun put(out: LinkedHashMap, occ: Scip.Occurrence) { + val key = Key.of(occ) + val existing = out[key] + if (existing == null) { + out[key] = occ + return + } + if (existing.enclosingRangeCount == 0 && occ.enclosingRangeCount > 0) { + out[key] = occ + } + } + + data class Key(val symbol: String, val range: List, val roles: Int) { + companion object { + fun of(occ: Scip.Occurrence): Key = + Key(occ.symbol, occ.rangeList.toList(), occ.symbolRoles) + } + } +} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipRole.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipRole.kt new file mode 100644 index 000000000..1b639a623 --- /dev/null +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipRole.kt @@ -0,0 +1,11 @@ +package com.sourcegraph.semanticdb_kotlinc + +/** + * Minimal role enum used by the direct-to-SCIP visitor and builder. Mirrors the subset of + * `Semanticdb.SymbolOccurrence.Role` that the Kotlin plug-in needs after the SemanticDB protobuf + * dependency has been removed. + */ +enum class ScipRole { + DEFINITION, + REFERENCE +} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipShardWriter.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipShardWriter.kt new file mode 100644 index 000000000..947812c77 --- /dev/null +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipShardWriter.kt @@ -0,0 +1,27 @@ +package com.sourcegraph.semanticdb_kotlinc + +import com.sourcegraph.Scip +import java.nio.file.Files +import java.nio.file.Path + +/** + * Writes per-source SCIP shards produced by the Kotlin compiler plug-in. + * + * Each Kotlin source file produces a self-contained [Scip.Index] shard containing a single + * [Scip.Document]. Unlike the javac equivalent, kotlinc compiles each source file once per round + * and we delete stale shards on [delete] before re-emitting, so the writer is a straightforward + * overwrite — no merge step is necessary. + */ +internal object ScipShardWriter { + + /** Writes the given [shard] to [output], creating parent directories as needed. */ + fun write(output: Path, shard: Scip.Index) { + Files.createDirectories(output.parent) + Files.write(output, shard.toByteArray()) + } + + /** Removes a previously emitted shard at [output], if any. */ + fun delete(output: Path) { + Files.deleteIfExists(output) + } +} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipSymbols.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipSymbols.kt new file mode 100644 index 000000000..7ebc2b51b --- /dev/null +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipSymbols.kt @@ -0,0 +1,42 @@ +package com.sourcegraph.semanticdb_kotlinc + +/** + * Helpers for emitting SCIP symbol strings from the Kotlin compiler plug-in. + * + * Mirrors the Java `ScipSymbols` helper. Because the compiler plug-in does not know the final + * Maven coordinates (`groupId:artifactId:version`) at compile time, it emits global symbols using + * a sentinel placeholder scheme that is rewritten by the aggregator to its final form: + * + * `. . . . ` + + * -> "scip-java maven " + * + * Local symbols are emitted using the canonical SCIP `local N` form (with the space) and are NOT + * rewritten by the aggregator. + */ +object ScipSymbols { + + /** + * Prefix marking a global symbol whose package coordinates must be filled in by the aggregator. + * The trailing space matches the SCIP grammar requirement of separating the scheme from the + * package fields. + */ + const val PLACEHOLDER_PREFIX: String = ". . . . " + + /** + * Converts a SemanticDB-style symbol string into the SCIP symbol form expected by the + * aggregator. + * + * - Empty strings stay empty. + * - Local symbols of the form `local42` become `local 42`. + * - Everything else is prefixed with [PLACEHOLDER_PREFIX]. + */ + fun fromSemanticdbSymbol(symbol: String?): String { + if (symbol.isNullOrEmpty()) return "" + if (symbol.startsWith("local")) { + return "local " + symbol.substring("local".length) + } + return PLACEHOLDER_PREFIX + symbol + } + + fun fromSemanticdbSymbol(symbol: Symbol): String = fromSemanticdbSymbol(symbol.toString()) +} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipTextDocumentBuilder.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipTextDocumentBuilder.kt new file mode 100644 index 000000000..5bb1e527f --- /dev/null +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/ScipTextDocumentBuilder.kt @@ -0,0 +1,321 @@ +package com.sourcegraph.semanticdb_kotlinc + +import com.sourcegraph.Scip +import kotlin.contracts.ExperimentalContracts +import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.KtSourceFile +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.directOverriddenSymbolsSafe +import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol +import org.jetbrains.kotlin.fir.analysis.getChild +import org.jetbrains.kotlin.fir.renderer.* +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.SymbolInternals +import org.jetbrains.kotlin.fir.symbols.impl.* +import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.text + +/** + * Builds a single-document [Scip.Index] shard for one Kotlin source file from per-element callbacks + * fired by [SemanticdbVisitor]. + * + * Symbols are emitted using the placeholder scheme [ScipSymbols.PLACEHOLDER_PREFIX]; the + * `scip-aggregator` rewrites them into final `scip-java maven g a v ...` form once Maven + * coordinates are resolved. + * + * Signature documentation is rendered directly via [FirRenderer] (Kotlin's built-in declaration + * renderer) and assigned to `SymbolInformation.signature_documentation.text` as raw Kotlin source. + */ +@ExperimentalContracts +class ScipTextDocumentBuilder( + private val file: KtSourceFile, + private val lineMap: LineMap, + private val cache: SymbolsCache, + private val relativePath: String, +) { + private val occurrences = mutableListOf() + // Keyed by symbol string so re-encounters of the same definition (multi-round compilation, + // synthetic accessors) do not produce duplicate entries. + private val symbols = LinkedHashMap() + + fun build(): Scip.Document = + Scip + .Document + .newBuilder() + .setRelativePath(relativePath) + .setLanguage(LANGUAGE_KOTLIN) + .addAllOccurrences(ScipOccurrences.deduplicate(occurrences)) + .addAllSymbols(symbols.values) + .build() + + fun buildIndex(): Scip.Index = Scip.Index.newBuilder().addDocuments(build()).build() + + fun emitScipData( + firBasedSymbol: FirBasedSymbol<*>?, + symbol: Symbol, + element: KtSourceElement, + role: ScipRole, + context: CheckerContext, + enclosingSource: KtSourceElement? = null, + ) { + if (symbol == Symbol.NONE) return + + emitOccurrence(symbol, element, role, enclosingSource) + if (role == ScipRole.DEFINITION) { + emitSymbolInformation(firBasedSymbol, symbol, element, context) + } + } + + private fun emitOccurrence( + symbol: Symbol, + element: KtSourceElement, + role: ScipRole, + enclosingSource: KtSourceElement?, + ) { + val builder = + Scip + .Occurrence + .newBuilder() + .addAllRange(scipRange(element)) + .setSymbol(ScipSymbols.fromSemanticdbSymbol(symbol)) + .setSymbolRoles(scipRole(role)) + if (enclosingSource != null) { + builder.addAllEnclosingRange(scipEnclosingRange(enclosingSource)) + } + occurrences.add(builder.build()) + } + + @OptIn(SymbolInternals::class) + private fun emitSymbolInformation( + firBasedSymbol: FirBasedSymbol<*>?, + symbol: Symbol, + element: KtSourceElement, + context: CheckerContext, + ) { + val scipSymbolStr = ScipSymbols.fromSemanticdbSymbol(symbol) + val builder = + Scip + .SymbolInformation + .newBuilder() + .setSymbol(scipSymbolStr) + .setDisplayName(displayName(firBasedSymbol, element)) + .setKind(scipKind(firBasedSymbol)) + + if (symbol.isLocal()) { + // Locals are convenient to navigate from when the enclosing symbol is known. + // We don't have direct access to the enclosing FirBasedSymbol here, but the + // information is non-essential — leaving enclosing_symbol unset is fine. + } + + val signature = signatureText(firBasedSymbol) + if (signature.isNotEmpty()) { + builder.setSignatureDocumentation( + Scip.Document.newBuilder() + .setLanguage(LANGUAGE_KOTLIN) + .setRelativePath(relativePath) + .setText(signature)) + } + + val kdoc = kdocText(firBasedSymbol) + if (kdoc.isNotEmpty()) { + builder.addDocumentation(kdoc) + } + + val supportsRefRel = supportsReferenceRelationship(firBasedSymbol) + for (parent in parentOrOverriddenSymbols(firBasedSymbol, context)) { + val parentSymbolStr = ScipSymbols.fromSemanticdbSymbol(parent) + if (parentSymbolStr.isEmpty()) continue + builder.addRelationships( + Scip.Relationship.newBuilder() + .setSymbol(parentSymbolStr) + .setIsImplementation(true) + .setIsReference(supportsRefRel)) + } + + // Last write wins so newly discovered metadata takes precedence. + symbols[scipSymbolStr] = builder.build() + } + + @OptIn(SymbolInternals::class) + private fun parentOrOverriddenSymbols( + firBasedSymbol: FirBasedSymbol<*>?, + context: CheckerContext, + ): List { + return when (firBasedSymbol) { + is FirClassSymbol -> + firBasedSymbol + .resolvedSuperTypeRefs + .filter { it !is FirImplicitAnyTypeRef } + .mapNotNull { it.toClassLikeSymbol(firBasedSymbol.moduleData.session) } + .flatMap { cache[it].toList() } + is FirFunctionSymbol<*> -> + firBasedSymbol + .directOverriddenSymbolsSafe(context) + .flatMap { cache[it].toList() } + else -> emptyList() + } + } + + private fun supportsReferenceRelationship(firBasedSymbol: FirBasedSymbol<*>?): Boolean { + return when (firBasedSymbol) { + is FirClassSymbol, + is FirTypeAliasSymbol -> false + else -> true + } + } + + private fun scipRange(element: KtSourceElement): List { + val startLine = lineMap.lineNumber(element) - 1 + val startCharacter = lineMap.startCharacter(element) + val endCharacter = lineMap.endCharacter(element) + // SemanticDB visitor only emits single-line ranges, so the SCIP compact 3-int range + // form is sufficient here. + return listOf(startLine, startCharacter, endCharacter) + } + + private fun scipEnclosingRange(element: KtSourceElement): List { + val startLine = lineMap.lineNumber(element) - 1 + val startCharacter = lineMap.startCharacter(element) + val endLine = lineMap.lineNumberForOffset(element.endOffset) - 1 + val endCharacter = lineMap.columnForOffset(element.endOffset) + return if (startLine == endLine) { + listOf(startLine, startCharacter, endCharacter) + } else { + listOf(startLine, startCharacter, endLine, endCharacter) + } + } + + @OptIn(SymbolInternals::class) + private fun signatureText(firBasedSymbol: FirBasedSymbol<*>?): String { + if (firBasedSymbol == null) return "" + return try { + renderer.renderElementAsString(firBasedSymbol.fir).trimEnd() + } catch (_: Throwable) { + "" + } + } + + private fun kdocText(firBasedSymbol: FirBasedSymbol<*>?): String { + if (firBasedSymbol == null) return "" + val kdoc = + firBasedSymbol.source?.getChild(KtTokens.DOC_COMMENT)?.text?.toString() ?: return "" + return stripKDocAsterisks(kdoc) + } + + /** + * Returns the kdoc string with all leading and trailing slash/asterisk tokens removed. Naive + * implementation that can be replaced with a utility method from the compiler in the future, + * if one exists. + */ + private fun stripKDocAsterisks(kdoc: String): String { + if (kdoc.isEmpty()) return kdoc + val out = StringBuilder() + kdoc.lineSequence().forEach { line -> + if (line.isEmpty()) return@forEach + var start = 0 + while (start < line.length && line[start].isWhitespace()) { + start++ + } + if (start < line.length && line[start] == '/') { + start++ + } + while (start < line.length && line[start] == '*') { + start++ + } + var end = line.length - 1 + if (end > start && line[end] == '/') { + end-- + } + while (end > start && line[end] == '*') { + end-- + } + while (end > start && line[end].isWhitespace()) { + end-- + } + start = minOf(start, line.length - 1) + if (end > start) { + end++ + } + if (out.isNotEmpty()) out.append('\n') + out.append(line, start, end) + } + return out.toString() + } + + companion object { + // SCIP `Document.language` value; lowercased to match the SCIP convention used by + // existing aggregator code. + const val LANGUAGE_KOTLIN: String = "kotlin" + + @OptIn(SymbolInternals::class) + private fun displayName( + firBasedSymbol: FirBasedSymbol<*>?, + element: KtSourceElement, + ): String = + when (firBasedSymbol) { + null -> element.text?.toString() ?: "" + is FirClassSymbol -> firBasedSymbol.classId.shortClassName.asString() + is FirPropertyAccessorSymbol -> firBasedSymbol.fir.propertySymbol.name.asString() + is FirFunctionSymbol<*> -> firBasedSymbol.callableId.callableName.asString() + is FirPropertySymbol -> firBasedSymbol.callableId.callableName.asString() + is FirVariableSymbol<*> -> firBasedSymbol.name.asString() + else -> firBasedSymbol.toString() + } + + private fun scipRole(role: ScipRole): Int = + when (role) { + ScipRole.DEFINITION -> Scip.SymbolRole.Definition_VALUE + else -> 0 + } + + private fun scipKind(firBasedSymbol: FirBasedSymbol<*>?): Scip.SymbolInformation.Kind = + when (firBasedSymbol) { + null -> Scip.SymbolInformation.Kind.UnspecifiedKind + is FirRegularClassSymbol -> + when (firBasedSymbol.classKind) { + org.jetbrains.kotlin.descriptors.ClassKind.INTERFACE -> + Scip.SymbolInformation.Kind.Interface + org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS -> + Scip.SymbolInformation.Kind.Enum + org.jetbrains.kotlin.descriptors.ClassKind.ENUM_ENTRY -> + Scip.SymbolInformation.Kind.EnumMember + org.jetbrains.kotlin.descriptors.ClassKind.OBJECT -> + Scip.SymbolInformation.Kind.Object + org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS -> + Scip.SymbolInformation.Kind.Interface + else -> Scip.SymbolInformation.Kind.Class + } + is FirAnonymousObjectSymbol -> Scip.SymbolInformation.Kind.Object + is FirTypeAliasSymbol -> Scip.SymbolInformation.Kind.TypeAlias + is FirConstructorSymbol -> Scip.SymbolInformation.Kind.Constructor + is FirPropertyAccessorSymbol -> Scip.SymbolInformation.Kind.Method + is FirFunctionSymbol<*> -> Scip.SymbolInformation.Kind.Method + is FirPropertySymbol -> Scip.SymbolInformation.Kind.Property + is FirFieldSymbol -> Scip.SymbolInformation.Kind.Field + is FirEnumEntrySymbol -> Scip.SymbolInformation.Kind.EnumMember + is FirValueParameterSymbol -> Scip.SymbolInformation.Kind.Parameter + is FirTypeParameterSymbol -> Scip.SymbolInformation.Kind.TypeParameter + is FirVariableSymbol<*> -> Scip.SymbolInformation.Kind.Variable + else -> Scip.SymbolInformation.Kind.UnspecifiedKind + } + + // Mirrors the renderer used by SemanticdbTextDocumentBuilder for parity. We render the + // declaration as Kotlin source text — no markdown fence — and put it into + // SymbolInformation.signature_documentation.text. + private val renderer: FirRenderer + get() = + FirRenderer( + typeRenderer = ConeTypeRenderer(), + idRenderer = ConeIdShortRenderer(), + classMemberRenderer = FirNoClassMemberRenderer(), + bodyRenderer = null, + propertyAccessorRenderer = null, + callArgumentsRenderer = FirCallNoArgumentsRenderer(), + modifierRenderer = FirAllModifierRenderer(), + callableSignatureRenderer = + FirCallableSignatureRendererForReadability(), + declarationRenderer = FirDeclarationRenderer("local "), + ) + } +} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbTextDocumentBuilder.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbTextDocumentBuilder.kt deleted file mode 100644 index d37d5bee1..000000000 --- a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbTextDocumentBuilder.kt +++ /dev/null @@ -1,227 +0,0 @@ -package com.sourcegraph.semanticdb_kotlinc - -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role -import java.nio.file.Path -import java.nio.file.Paths -import java.security.MessageDigest -import kotlin.contracts.ExperimentalContracts -import org.jetbrains.kotlin.KtSourceElement -import org.jetbrains.kotlin.KtSourceFile -import org.jetbrains.kotlin.com.intellij.lang.java.JavaLanguage -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.directOverriddenSymbolsSafe -import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol -import org.jetbrains.kotlin.fir.analysis.getChild -import org.jetbrains.kotlin.fir.renderer.* -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.SymbolInternals -import org.jetbrains.kotlin.fir.symbols.impl.* -import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef -import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi -import org.jetbrains.kotlin.text - -@ExperimentalContracts -class SemanticdbTextDocumentBuilder( - private val sourceroot: Path, - private val file: KtSourceFile, - private val lineMap: LineMap, - private val cache: SymbolsCache, -) { - private val occurrences = mutableListOf() - private val symbols = mutableListOf() - private val fileText = file.getContentsAsStream().reader().readText() - private val semanticMd5 = semanticdbMD5() - - fun build() = TextDocument { - this.text = fileText - this.uri = semanticdbURI() - this.md5 = semanticMd5 - this.schema = Semanticdb.Schema.SEMANTICDB4 - this.language = Semanticdb.Language.KOTLIN - occurrences.sortWith(compareBy({ it.range.startLine }, { it.range.startCharacter })) - this.addAllOccurrences(occurrences) - this.addAllSymbols(symbols) - } - - fun emitSemanticdbData( - firBasedSymbol: FirBasedSymbol<*>?, - symbol: Symbol, - element: KtSourceElement, - role: Role, - context: CheckerContext, - enclosingSource: KtSourceElement? = null, - ) { - symbolOccurrence(symbol, element, role, enclosingSource).let { - if (!occurrences.contains(it)) { - occurrences.add(it) - } - } - val symbolInformation = symbolInformation(firBasedSymbol, symbol, element, context) - if (role == Role.DEFINITION && !symbols.contains(symbolInformation)) - symbols.add(symbolInformation) - } - - @OptIn(SymbolInternals::class) - private fun symbolInformation( - firBasedSymbol: FirBasedSymbol<*>?, - symbol: Symbol, - element: KtSourceElement, - context: CheckerContext, - ): Semanticdb.SymbolInformation { - val supers = - when (firBasedSymbol) { - is FirClassSymbol -> - firBasedSymbol - .resolvedSuperTypeRefs - .filter { it !is FirImplicitAnyTypeRef } - .map { it.toClassLikeSymbol(firBasedSymbol.moduleData.session) } - .filterNotNull() - .flatMap { cache[it] } - is FirFunctionSymbol<*> -> - firBasedSymbol.directOverriddenSymbolsSafe(context).flatMap { cache[it] } - else -> emptyList().asIterable() - } - return SymbolInformation { - this.symbol = symbol.toString() - this.displayName = - if (firBasedSymbol != null) { - displayName(firBasedSymbol) - } else { - element.text.toString() - } - this.documentation = - if (firBasedSymbol != null) { - semanticdbDocumentation(firBasedSymbol.fir) - } else { - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "" - } - } - this.addAllOverriddenSymbols(supers.map { it.toString() }) - this.language = - when (element.psi?.language ?: KotlinLanguage.INSTANCE) { - is KotlinLanguage -> Semanticdb.Language.KOTLIN - is JavaLanguage -> Semanticdb.Language.JAVA - else -> throw IllegalArgumentException("unexpected language") - } - } - } - - private fun symbolOccurrence( - symbol: Symbol, - element: KtSourceElement, - role: Role, - enclosingSource: KtSourceElement? = null, - ): Semanticdb.SymbolOccurrence { - return SymbolOccurrence { - this.symbol = symbol.toString() - this.role = role - this.range = semanticdbRange(element) - if (enclosingSource != null) { - this.enclosingRange = semanticdbEnclosingRange(enclosingSource) - } - } - } - - private fun semanticdbRange(element: KtSourceElement): Semanticdb.Range { - return Range { - startCharacter = lineMap.startCharacter(element) - startLine = lineMap.lineNumber(element) - 1 - endCharacter = lineMap.endCharacter(element) - endLine = lineMap.lineNumber(element) - 1 - } - } - - private fun semanticdbEnclosingRange(element: KtSourceElement): Semanticdb.Range { - return Range { - startLine = lineMap.lineNumber(element) - 1 - startCharacter = lineMap.startCharacter(element) - endLine = lineMap.lineNumberForOffset(element.endOffset) - 1 - endCharacter = lineMap.columnForOffset(element.endOffset) - } - } - - private fun semanticdbURI(): String { - // TODO: unix-style only - val relative = sourceroot.relativize(Paths.get(file.path)) - return relative.toString() - } - - private fun semanticdbMD5(): String = - MessageDigest.getInstance("MD5") - .digest(file.getContentsAsStream().readBytes()) - .joinToString("") { "%02X".format(it) } - - private fun semanticdbDocumentation(element: FirElement): Semanticdb.Documentation = Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - // Like FirRenderer().forReadability, but using FirAllModifierRenderer instead of FirPartialModifierRenderer - val renderer = FirRenderer( - typeRenderer = ConeTypeRenderer(), - idRenderer = ConeIdShortRenderer(), - classMemberRenderer = FirNoClassMemberRenderer(), - bodyRenderer = null, - propertyAccessorRenderer = null, - callArgumentsRenderer = FirCallNoArgumentsRenderer(), - modifierRenderer = FirAllModifierRenderer(), - callableSignatureRenderer = FirCallableSignatureRendererForReadability(), - declarationRenderer = FirDeclarationRenderer("local "), - ) - val renderOutput = renderer.renderElementAsString(element) - val kdoc = element.source?.getChild(KtTokens.DOC_COMMENT)?.text?.toString() ?: "" - message = "```kotlin\n$renderOutput\n```${stripKDocAsterisks(kdoc)}" - } - - // Returns the kdoc string with all leading and trailing "/*" tokens removed. Naive - // implementation that can - // be replaced with a utility method from the compiler in the future, if one exists. - private fun stripKDocAsterisks(kdoc: String): String { - if (kdoc.isEmpty()) return kdoc - val out = StringBuilder().append("\n\n").append("----").append("\n") - kdoc.lineSequence().forEach { line -> - if (line.isEmpty()) return@forEach - var start = 0 - while (start < line.length && line[start].isWhitespace()) { - start++ - } - if (start < line.length && line[start] == '/') { - start++ - } - while (start < line.length && line[start] == '*') { - start++ - } - var end = line.length - 1 - if (end > start && line[end] == '/') { - end-- - } - while (end > start && line[end] == '*') { - end-- - } - while (end > start && line[end].isWhitespace()) { - end-- - } - start = minOf(start, line.length - 1) - if (end > start) { - end++ - } - out.append("\n").append(line, start, end) - } - return out.toString() - } - - companion object { - @OptIn(SymbolInternals::class) - private fun displayName(firBasedSymbol: FirBasedSymbol<*>): String = - when (firBasedSymbol) { - is FirClassSymbol -> firBasedSymbol.classId.shortClassName.asString() - is FirPropertyAccessorSymbol -> firBasedSymbol.fir.propertySymbol.name.asString() - is FirFunctionSymbol -> firBasedSymbol.callableId.callableName.asString() - is FirPropertySymbol -> firBasedSymbol.callableId.callableName.asString() - is FirVariableSymbol -> firBasedSymbol.name.asString() - else -> firBasedSymbol.toString() - } - } -} diff --git a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbVisitor.kt b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbVisitor.kt index 2fa28c96f..2b4408226 100644 --- a/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbVisitor.kt +++ b/semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbVisitor.kt @@ -1,7 +1,8 @@ package com.sourcegraph.semanticdb_kotlinc -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role +import com.sourcegraph.Scip import java.nio.file.Path +import java.nio.file.Paths import kotlin.contracts.ExperimentalContracts import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.KtSourceFile @@ -13,6 +14,11 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.name.FqName +/** + * Walks the FIR analysis tree for a single Kotlin source file and builds a self-contained + * `Scip.Index` shard via [ScipTextDocumentBuilder]. The legacy SemanticDB protobuf path has been + * removed; the visitor only emits SCIP. + */ @ExperimentalContracts class SemanticdbVisitor( sourceroot: Path, @@ -22,25 +28,26 @@ class SemanticdbVisitor( locals: LocalSymbolsCache = LocalSymbolsCache() ) { private val cache = SymbolsCache(globals, locals) - private val documentBuilder = SemanticdbTextDocumentBuilder(sourceroot, file, lineMap, cache) + private val relativePath: String = computeRelativePath(sourceroot, file) + private val scipBuilder = ScipTextDocumentBuilder(file, lineMap, cache, relativePath) private data class SymbolDescriptorPair( val firBasedSymbol: FirBasedSymbol<*>?, val symbol: Symbol ) - fun build(): Semanticdb.TextDocument { - return documentBuilder.build() - } + fun buildScipIndex(): Scip.Index = scipBuilder.buildIndex() + + fun scipRelativePath(): String = relativePath private fun Sequence?.emitAll( element: KtSourceElement, - role: Role, + role: ScipRole, context: CheckerContext, enclosingSource: KtSourceElement? = null, ): List? = this?.onEach { (firBasedSymbol, symbol) -> - documentBuilder.emitSemanticdbData(firBasedSymbol, symbol, element, role, context, enclosingSource) + scipBuilder.emitScipData(firBasedSymbol, symbol, element, role, context, enclosingSource) } ?.map { it.symbol } ?.toList() @@ -49,57 +56,55 @@ class SemanticdbVisitor( this.map { SymbolDescriptorPair(firBasedSymbol, it) } fun visitPackage(pkg: FqName, element: KtSourceElement, context: CheckerContext) { - cache[pkg].with(null).emitAll(element, Role.REFERENCE, context) + cache[pkg].with(null).emitAll(element, ScipRole.REFERENCE, context) } fun visitClassReference(firClassSymbol: FirClassLikeSymbol<*>, element: KtSourceElement, context: CheckerContext) { - cache[firClassSymbol].with(firClassSymbol).emitAll(element, Role.REFERENCE, context) + cache[firClassSymbol].with(firClassSymbol).emitAll(element, ScipRole.REFERENCE, context) } fun visitCallableReference(firClassSymbol: FirCallableSymbol<*>, element: KtSourceElement, context: CheckerContext) { - cache[firClassSymbol].with(firClassSymbol).emitAll(element, Role.REFERENCE, context) + cache[firClassSymbol].with(firClassSymbol).emitAll(element, ScipRole.REFERENCE, context) } fun visitClassOrObject(firClass: FirClassLikeDeclaration, element: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firClass.symbol].with(firClass.symbol).emitAll(element, Role.DEFINITION, context, enclosingSource) + cache[firClass.symbol].with(firClass.symbol).emitAll(element, ScipRole.DEFINITION, context, enclosingSource) } fun visitPrimaryConstructor(firConstructor: FirConstructor, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - // if the constructor is not denoted by the 'constructor' keyword, we want to link it to the - // class ident - cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitSecondaryConstructor(firConstructor: FirConstructor, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitNamedFunction(firFunction: FirFunction, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firFunction.symbol].with(firFunction.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firFunction.symbol].with(firFunction.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitProperty(firProperty: FirProperty, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firProperty.symbol].with(firProperty.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firProperty.symbol].with(firProperty.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitParameter(firParameter: FirValueParameter, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firParameter.symbol].with(firParameter.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firParameter.symbol].with(firParameter.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitTypeParameter(firTypeParameter: FirTypeParameter, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { cache[firTypeParameter.symbol] .with(firTypeParameter.symbol) - .emitAll(source, Role.DEFINITION, context, enclosingSource) + .emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitTypeAlias(firTypeAlias: FirTypeAlias, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { - cache[firTypeAlias.symbol].with(firTypeAlias.symbol).emitAll(source, Role.DEFINITION, context, enclosingSource) + cache[firTypeAlias.symbol].with(firTypeAlias.symbol).emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitPropertyAccessor(firPropertyAccessor: FirPropertyAccessor, source: KtSourceElement, context: CheckerContext, enclosingSource: KtSourceElement? = null) { cache[firPropertyAccessor.symbol] .with(firPropertyAccessor.symbol) - .emitAll(source, Role.DEFINITION, context, enclosingSource) + .emitAll(source, ScipRole.DEFINITION, context, enclosingSource) } fun visitSimpleNameExpression( @@ -108,7 +113,20 @@ class SemanticdbVisitor( ) { cache[firResolvedNamedReference.resolvedSymbol] .with(firResolvedNamedReference.resolvedSymbol) - .emitAll(source, Role.REFERENCE, context) + .emitAll(source, ScipRole.REFERENCE, context) } } +/** + * Computes the SCIP `Document.relative_path` for [file] relative to [sourceroot]. Falls back to + * the raw file path if the file is not under the sourceroot (the PostAnalysisExtension warns and + * skips writing in that case, so the value is best-effort here). + */ +private fun computeRelativePath(sourceroot: Path, file: KtSourceFile): String { + val normalized = Paths.get(file.path ?: "").normalize() + return if (normalized.startsWith(sourceroot)) { + sourceroot.relativize(normalized).toString().replace('\\', '/') + } else { + normalized.toString().replace('\\', '/') + } +} diff --git a/semanticdb-kotlinc/src/main/proto/com.sourcegraph.semanticdb_kotlin/semanticdb.proto b/semanticdb-kotlinc/src/main/proto/com.sourcegraph.semanticdb_kotlin/semanticdb.proto deleted file mode 100644 index f09cf9231..000000000 --- a/semanticdb-kotlinc/src/main/proto/com.sourcegraph.semanticdb_kotlin/semanticdb.proto +++ /dev/null @@ -1,192 +0,0 @@ -// Original source: https://github.com/scalameta/scalameta/blob/cf796cf2436b40494baf2bdc266623dc65264ad5/semanticdb/semanticdb/semanticdb.proto -// Local modifications: -// - Removes unused fields to minimize the amount of generated code. -// - Adds SymbolInformation.documentation that is pending upstream approval. -// - Adds SymbolOccurrence.enclosing_range to support SCIP's enclosing_range field. - -syntax = "proto3"; - -package com.sourcegraph.semanticdb_kotlinc; - -option java_package = "com.sourcegraph.semanticdb_kotlinc"; -option java_multiple_files = false; - -enum Schema { - LEGACY = 0; - SEMANTICDB3 = 3; - SEMANTICDB4 = 4; -} - -message TextDocuments { - repeated TextDocument documents = 1; -} - -message TextDocument { - reserved 4, 8, 9; - Schema schema = 1; - string uri = 2; - string text = 3; - string md5 = 11; - Language language = 10; - repeated SymbolInformation symbols = 5; - repeated SymbolOccurrence occurrences = 6; -} - -enum Language { - UNKNOWN_LANGUAGE = 0; - SCALA = 1; - JAVA = 2; - KOTLIN = 3; -} - -message Range { - int32 start_line = 1; - int32 start_character = 2; - int32 end_line = 3; - int32 end_character = 4; -} - -message Signature { - oneof sealed_value { - ClassSignature class_signature = 1; - MethodSignature method_signature = 2; - TypeSignature type_signature = 3; - ValueSignature value_signature = 4; - } -} - -message ClassSignature { - Scope type_parameters = 1; - repeated Type parents = 2; - Scope declarations = 4; -} - -message MethodSignature { - Scope type_parameters = 1; - repeated Scope parameter_lists = 2; - Type return_type = 3; -} - -message TypeSignature { - Scope type_parameters = 1; - Type lower_bound = 2; - Type upper_bound = 3; -} - -message ValueSignature { - Type tpe = 1; -} - -message SymbolInformation { - enum Kind { - reserved 1, 2, 4, 5, 15, 16; - UNKNOWN_KIND = 0; - LOCAL = 19; - FIELD = 20; - METHOD = 3; - CONSTRUCTOR = 21; - TYPE = 7; - PARAMETER = 8; - TYPE_PARAMETER = 9; - PACKAGE = 11; - CLASS = 13; - INTERFACE = 18; - } - enum Property { - UNKNOWN_PROPERTY = 0; - reserved 0x1; - reserved 0x2; - ABSTRACT = 0x4; - FINAL = 0x8; - SEALED = 0x10; - STATIC = 0x1000; - ENUM = 0x4000; - } - reserved 2, 6, 7, 8, 9, 10, 11, 12, 14, 15; - string symbol = 1; - Language language = 16; - Kind kind = 3; - int32 properties = 4; - string display_name = 5; - Signature signature = 17; - Access access = 18; - repeated string overridden_symbols = 19; - // NOTE: this field does not exist in the upstream SemanticDB spec. - // It is added to support documentation strings (e.g., KDoc). - Documentation documentation = 20; -} - -message Access { - oneof sealed_value { - PrivateAccess private_access = 1; - PrivateWithinAccess private_within_access = 3; - ProtectedAccess protected_access = 4; - PublicAccess public_access = 7; - } -} - -message PrivateAccess {} - -message PrivateWithinAccess { - string symbol = 1; -} - -message ProtectedAccess {} - -message PublicAccess {} - -message Documentation { - enum Format { - HTML = 0; - MARKDOWN = 1; - JAVADOC = 2; - SCALADOC = 3; - KDOC = 4; - } - string message = 1; - Format format = 2; -} - -message SymbolOccurrence { - enum Role { - UNKNOWN_ROLE = 0; - REFERENCE = 1; - DEFINITION = 2; - } - Range range = 1; - string symbol = 2; - Role role = 3; - // NOTE: this field does not exist in the upstream SemanticDB spec. - // It is added to support SCIP's enclosing_range field. - // This is the range of the nearest non-trivial enclosing AST node. - optional Range enclosing_range = 4; -} - -message Scope { - repeated string symlinks = 1; - repeated SymbolInformation hardlinks = 2; -} - -message Type { - reserved 1, 3, 4, 5, 6, 11, 12, 15, 16; - oneof sealed_value { - TypeRef type_ref = 2; - ExistentialType existential_type = 9; - IntersectionType intersection_type = 17; - } -} - -message TypeRef { - string symbol = 2; - repeated Type type_arguments = 3; -} - -message IntersectionType { - repeated Type types = 1; -} - -message ExistentialType { - reserved 2; - Type tpe = 1; - Scope declarations = 3; -} diff --git a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/AnalyzerTest.kt b/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/AnalyzerTest.kt deleted file mode 100644 index 09724ed34..000000000 --- a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/AnalyzerTest.kt +++ /dev/null @@ -1,1528 +0,0 @@ -package com.sourcegraph.semanticdb_kotlinc.test - -import com.sourcegraph.semanticdb_kotlinc.* -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.Language.KOTLIN -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.TextDocument -import com.tschuchort.compiletesting.KotlinCompilation -import com.tschuchort.compiletesting.PluginOption -import com.tschuchort.compiletesting.SourceFile -import io.kotest.assertions.assertSoftly -import io.kotest.assertions.fail -import io.kotest.assertions.withClue -import io.kotest.matchers.collections.shouldContain -import io.kotest.matchers.shouldBe -import io.kotest.matchers.shouldNotBe -import java.io.File -import java.nio.file.Path -import kotlin.contracts.ExperimentalContracts -import kotlin.test.Test -import kotlin.test.assertEquals -import org.intellij.lang.annotations.Language -import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi -import org.junit.jupiter.api.io.TempDir -import java.nio.file.Paths - -@OptIn(ExperimentalCompilerApi::class) -@ExperimentalContracts -class AnalyzerTest { - fun compileSemanticdb(path: Path, @Language("kotlin") code: String): TextDocument { - val buildPath = File(path.resolve("build").toString()).apply { mkdir() } - val source = SourceFile.testKt(code) - lateinit var document: TextDocument - - val result = - KotlinCompilation() - .apply { - sources = listOf(source) - compilerPluginRegistrars = listOf(AnalyzerRegistrar { document = it }) - verbose = false - pluginOptions = - listOf( - PluginOption("semanticdb-kotlinc", "sourceroot", path.toString()), - PluginOption("semanticdb-kotlinc", "targetroot", buildPath.toString()) - ) - commandLineProcessors = listOf(AnalyzerCommandLineProcessor()) - workingDir = path.toFile() - } - .compile() - - result.exitCode shouldBe KotlinCompilation.ExitCode.OK - document shouldNotBe null - return document - } - - @Test - fun `basic test`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - class Banana { - fun foo() { } - }""" - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Banana#" - range { - startLine = 1 - startCharacter = 6 - endLine = 1 - endCharacter = 12 - } - enclosingRange { - startLine = 1 - endLine = 3 - endCharacter = 1 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Banana#foo()." - range { - startLine = 2 - startCharacter = 8 - endLine = 2 - endCharacter = 11 - } - enclosingRange { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 17 - } - }) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "sample/Banana#" - language = KOTLIN - displayName = "Banana" - documentation = - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "```kotlin\npublic final class Banana : Any\n```" - } - }, - SymbolInformation { - symbol = "sample/Banana#foo()." - language = KOTLIN - displayName = "foo" - documentation = - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "```kotlin\npublic final fun foo(): Unit\n```" - } - }) - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - @Test - fun imports(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - import kotlin.Boolean - import kotlin.Int as KInt - """ - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/" - range { - startLine = 2 - startCharacter = 7 - endLine = 2 - endCharacter = 13 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Boolean#" - range { - startLine = 2 - startCharacter = 14 - endLine = 2 - endCharacter = 21 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/" - range { - startLine = 3 - startCharacter = 7 - endLine = 3 - endCharacter = 13 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Int#" - range { - startLine = 3 - startCharacter = 14 - endLine = 3 - endCharacter = 17 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - } - - @Test - fun `local classes`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - fun foo() { - class LocalClass { - fun localClassMethod() {} - } - } - """ - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/foo()." - range { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 7 - } - enclosingRange { - startLine = 2 - endLine = 6 - endCharacter = 1 - } - }, - // LocalClass - SymbolOccurrence { - role = Role.DEFINITION - symbol = "local0" - range { - startLine = 3 - startCharacter = 8 - endLine = 3 - endCharacter = 18 - } - enclosingRange { - startLine = 3 - startCharacter = 2 - endLine = 5 - endCharacter = 3 - } - }, - // LocalClass constructor - SymbolOccurrence { - role = Role.DEFINITION - symbol = "local1" - range { - startLine = 3 - startCharacter = 8 - endLine = 3 - endCharacter = 18 - } - enclosingRange { - startLine = 3 - startCharacter = 2 - endLine = 5 - endCharacter = 3 - } - }, - // localClassMethod - SymbolOccurrence { - role = Role.DEFINITION - symbol = "local2" - range { - startLine = 4 - startCharacter = 8 - endLine = 4 - endCharacter = 24 - } - enclosingRange { - startLine = 4 - startCharacter = 4 - endLine = 4 - endCharacter = 29 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "sample/foo()." - displayName = "foo" - language = KOTLIN - documentation { - message = "```kotlin\npublic final fun foo(): Unit\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "local0" - displayName = "LocalClass" - language = KOTLIN - documentation { - message = "```kotlin\nlocal final class LocalClass : Any\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "local1" - displayName = "LocalClass" - language = KOTLIN - documentation { - message = "```kotlin\npublic constructor(): LocalClass\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "local2" - displayName = "localClassMethod" - language = KOTLIN - documentation { - message = "```kotlin\npublic final fun localClassMethod(): Unit\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - ) - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - @Test - fun overrides(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - interface Interface { - fun foo() - } - - class Class : Interface { - override fun foo() {} - } - """ - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Interface#" - range { - startLine = 2 - startCharacter = 10 - endLine = 2 - endCharacter = 19 - } - enclosingRange { - startLine = 2 - endLine = 4 - endCharacter = 1 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Interface#foo()." - range { - startLine = 3 - startCharacter = 8 - endLine = 3 - endCharacter = 11 - } - enclosingRange { - startLine = 3 - startCharacter = 4 - endLine = 3 - endCharacter = 13 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Class#" - range { - startLine = 6 - startCharacter = 6 - endLine = 6 - endCharacter = 11 - } - enclosingRange { - startLine = 6 - endLine = 8 - endCharacter = 1 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/Interface#" - range { - startLine = 6 - startCharacter = 14 - endLine = 6 - endCharacter = 23 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Class#foo()." - range { - startLine = 7 - startCharacter = 17 - endLine = 7 - endCharacter = 20 - } - enclosingRange { - startLine = 7 - startCharacter = 4 - endLine = 7 - endCharacter = 25 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "sample/Interface#" - displayName = "Interface" - language = KOTLIN - documentation { - message = "```kotlin\npublic abstract interface Interface : Any\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "sample/Interface#foo()." - displayName = "foo" - language = KOTLIN - documentation { - message = "```kotlin\npublic abstract fun foo(): Unit\n\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "sample/Class#" - displayName = "Class" - language = KOTLIN - documentation { - message = "```kotlin\npublic final class Class : Interface\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#") - }, - SymbolInformation { - symbol = "sample/Class#foo()." - displayName = "foo" - language = KOTLIN - documentation { - message = "```kotlin\npublic open override fun foo(): Unit\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#foo().") - }, - ) - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - @Test - fun `anonymous object`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - interface Interface { - fun foo() - } - - fun main() { - val a = object : Interface { - override fun foo() {} - } - val b = object : Interface { - override fun foo() {} - } - } - """ - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Interface#" - range { - startLine = 2 - startCharacter = 10 - endLine = 2 - endCharacter = 19 - } - enclosingRange { - startLine = 2 - endLine = 4 - endCharacter = 1 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Interface#foo()." - range { - startLine = 3 - startCharacter = 8 - endLine = 3 - endCharacter = 11 - } - enclosingRange { - startLine = 3 - startCharacter = 4 - endLine = 3 - endCharacter = 13 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#" - range { - startLine = 7 - startCharacter = 12 - endLine = 7 - endCharacter = 18 - } - enclosingRange { - startLine = 7 - startCharacter = 12 - endLine = 9 - endCharacter = 5 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#``()." - range { - startLine = 7 - startCharacter = 12 - endLine = 7 - endCharacter = 18 - } - enclosingRange { - startLine = 7 - startCharacter = 12 - endLine = 9 - endCharacter = 5 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/Interface#" - range { - startLine = 7 - startCharacter = 21 - endLine = 7 - endCharacter = 30 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#foo()." - range { - startLine = 8 - startCharacter = 21 - endLine = 8 - endCharacter = 24 - } - enclosingRange { - startLine = 8 - startCharacter = 8 - endLine = 8 - endCharacter = 29 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#" - range { - startLine = 10 - startCharacter = 12 - endLine = 10 - endCharacter = 18 - } - enclosingRange { - startLine = 10 - startCharacter = 12 - endLine = 12 - endCharacter = 5 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#``()." - range { - startLine = 10 - startCharacter = 12 - endLine = 10 - endCharacter = 18 - } - enclosingRange { - startLine = 10 - startCharacter = 12 - endLine = 12 - endCharacter = 5 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/Interface#" - range { - startLine = 10 - startCharacter = 21 - endLine = 10 - endCharacter = 30 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/``#foo()." - range { - startLine = 11 - startCharacter = 21 - endLine = 11 - endCharacter = 24 - } - enclosingRange { - startLine = 11 - startCharacter = 8 - endLine = 11 - endCharacter = 29 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "sample/Interface#" - displayName = "Interface" - language = KOTLIN - documentation { - message = "```kotlin\npublic abstract interface Interface : Any\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "sample/``#" - displayName = "" - language = KOTLIN - documentation { - message = "```kotlin\nobject : Interface\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#") - }, - SymbolInformation { - symbol = "sample/``#foo()." - displayName = "foo" - language = KOTLIN - documentation { - message = "```kotlin\npublic open override fun foo(): Unit\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#foo().") - }, - SymbolInformation { - symbol = "sample/``#" - displayName = "" - language = KOTLIN - documentation { - message = "```kotlin\nobject : Interface\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#") - }, - SymbolInformation { - symbol = "sample/``#foo()." - displayName = "foo" - language = KOTLIN - documentation { - message = "```kotlin\npublic open override fun foo(): Unit\n```" - format = Semanticdb.Documentation.Format.MARKDOWN - } - addOverriddenSymbols("sample/Interface#foo().") - }, - ) - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - @Test - fun `function return type`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - fun foo(arg: Int): Boolean = true - """ - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/foo()." - range { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 7 - } - enclosingRange { - startLine = 2 - endLine = 2 - endCharacter = 33 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/foo().(arg)" - range { - startLine = 2 - startCharacter = 8 - endLine = 2 - endCharacter = 11 - } - enclosingRange { - startLine = 2 - startCharacter = 8 - endLine = 2 - endCharacter = 16 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Int#" - range { - startLine = 2 - startCharacter = 13 - endLine = 2 - endCharacter = 16 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Boolean#" - range { - startLine = 2 - startCharacter = 19 - endLine = 2 - endCharacter = 26 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - } - - @Test - fun `type operators`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - - fun foo(x: Any) { - when (x) { - is Int -> true - else -> x as Float - } - } - """) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Int#" - range { - startLine = 4 - startCharacter = 11 - endLine = 4 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "kotlin/Float#" - range { - startLine = 5 - startCharacter = 21 - endLine = 5 - endCharacter = 26 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - } - - @Test - fun `exception test`(@TempDir path: Path) { - val buildPath = File(path.resolve("build").toString()).apply { mkdir() } - val result = - KotlinCompilation() - .apply { - sources = listOf(SourceFile.testKt("")) - compilerPluginRegistrars = - listOf(AnalyzerRegistrar { throw Exception("sample text") }) - verbose = false - pluginOptions = - listOf( - PluginOption("semanticdb-kotlinc", "sourceroot", path.toString()), - PluginOption("semanticdb-kotlinc", "targetroot", buildPath.toString()) - ) - commandLineProcessors = listOf(AnalyzerCommandLineProcessor()) - workingDir = path.toFile() - } - .compile() - - result.exitCode shouldBe KotlinCompilation.ExitCode.OK - } - - @Test - // shamelessly stolen code snippet from https://learnxinyminutes.com/docs/kotlin/ - fun `learn x in y test`(@TempDir path: Path) { - val buildPath = File(path.resolve("build").toString()).apply { mkdir() } - - val source = - SourceFile.testKt( - """ - @file:Suppress("UNUSED_VARIABLE", "UNUSED_PARAMETER", "NAME_SHADOWING", "ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE", "UNUSED_VALUE") - package sample - - fun main(args: Array) { - val fooVal = 10 // we cannot later reassign fooVal to something else - var fooVar = 10 - fooVar = 20 // fooVar can be reassigned - - /* - In most cases, Kotlin can determine what the type of a variable is, - so we don't have to explicitly specify it every time. - We can explicitly declare the type of a variable like so: - */ - val foo: Int = 7 - - /* - Strings can be represented in a similar way as in Java. - Escaping is done with a backslash. - */ - val fooString = "My String Is Here!" - val barString = "Printing on a new line?\nNo Problem!" - val bazString = "Do you want to add a tab?\tNo Problem!" - println(fooString) - println(barString) - println(bazString) - - /* - Strings can contain template expressions. - A template expression starts with a dollar sign (${'$'}). - */ - val fooTemplateString = "$'fooString' has ${"fooString.length"} characters" - println(fooTemplateString) // => My String Is Here! has 18 characters - - /* - For a variable to hold null it must be explicitly specified as nullable. - A variable can be specified as nullable by appending a ? to its type. - We can access a nullable variable by using the ?. operator. - We can use the ?: operator to specify an alternative value to use - if a variable is null. - */ - var fooNullable: String? = "abc" - println(fooNullable?.length) // => 3 - println(fooNullable?.length ?: -1) // => 3 - fooNullable = null - println(fooNullable?.length) // => null - println(fooNullable?.length ?: -1) // => -1 - - /* - Functions can be declared using the "fun" keyword. - Function arguments are specified in brackets after the function name. - Function arguments can optionally have a default value. - The function return type, if required, is specified after the arguments. - */ - fun hello(name: String = "world"): String { - return "Hello, $'name'!" - } - println(hello("foo")) // => Hello, foo! - println(hello(name = "bar")) // => Hello, bar! - println(hello()) // => Hello, world! - - /* - A function parameter may be marked with the "vararg" keyword - to allow a variable number of arguments to be passed to the function. - */ - fun varargExample(vararg names: Int) { - println("Argument has ${"names.size"} elements") - } - varargExample() // => Argument has 0 elements - varargExample(1) // => Argument has 1 elements - varargExample(1, 2, 3) // => Argument has 3 elements - - /* - When a function consists of a single expression then the curly brackets can - be omitted. The body is specified after the = symbol. - */ - fun odd(x: Int): Boolean = x % 2 == 1 - println(odd(6)) // => false - println(odd(7)) // => true - - // If the return type can be inferred then we don't need to specify it. - fun even(x: Int) = x % 2 == 0 - println(even(6)) // => true - println(even(7)) // => false - - // Functions can take functions as arguments and return functions. - fun not(f: (Int) -> Boolean): (Int) -> Boolean { - return {n -> !f.invoke(n)} - } - // Named functions can be specified as arguments using the :: operator. - val notOdd = not(::odd) - val notEven = not(::even) - // Lambda expressions can be specified as arguments. - val notZero = not {n -> n == 0} - /* - If a lambda has only one parameter - then its declaration can be omitted (along with the ->). - The name of the single parameter will be "it". - */ - val notPositive = not {it > 0} - for (i in 0..4) { - println("${"notOdd(i)"} ${"notEven(i)"} ${"notZero(i)"} ${"notPositive(i)"}") - } - - // The "class" keyword is used to declare classes. - class ExampleClass(val x: Int) { - fun memberFunction(y: Int): Int { - return x + y - } - - infix fun infixMemberFunction(y: Int): Int { - return x * y - } - } - /* - To create a new instance we call the constructor. - Note that Kotlin does not have a "new" keyword. - */ - val fooExampleClass = ExampleClass(7) - // Member functions can be called using dot notation. - println(fooExampleClass.memberFunction(4)) // => 11 - /* - If a function has been marked with the "infix" keyword then it can be - called using infix notation. - */ - println(fooExampleClass infixMemberFunction 4) // => 28 - - /* - Data classes are a concise way to create classes that just hold data. - The "hashCode"/"equals" and "toString" methods are automatically generated. - */ - data class DataClassExample (val x: Int, val y: Int, val z: Int) - val fooData = DataClassExample(1, 2, 4) - println(fooData) // => DataClassExample(x=1, y=2, z=4) - - // Data classes have a "copy" function. - val fooCopy = fooData.copy(y = 100) - println(fooCopy) // => DataClassExample(x=1, y=100, z=4) - - // Objects can be destructured into multiple variables. - val (a, b, c) = fooCopy - println("$'a' $'b' $'c'") // => 1 100 4 - - // destructuring in "for" loop - for ((a, b, c) in listOf(fooData)) { - println("$'a' $'b' $'c'") // => 1 2 4 - } - - val mapData = mapOf("a" to 1, "b" to 2) - // Map.Entry is destructurable as well - for ((key, value) in mapData) { - println("$'key' -> $'value'") - } - - // The "with" function is similar to the JavaScript "with" statement. - data class MutableDataClassExample (var x: Int, var y: Int, var z: Int) - val fooMutableData = MutableDataClassExample(7, 4, 9) - with (fooMutableData) { - x -= 2 - y += 2 - z-- - } - println(fooMutableData) // => MutableDataClassExample(x=5, y=6, z=8) - - /* - We can create a list using the "listOf" function. - The list will be immutable - elements cannot be added or removed. - */ - val fooList = listOf("a", "b", "c") - println(fooList.size) // => 3 - println(fooList.first()) // => a - println(fooList.last()) // => c - // Elements of a list can be accessed by their index. - println(fooList[1]) // => b - - // A mutable list can be created using the "mutableListOf" function. - val fooMutableList = mutableListOf("a", "b", "c") - fooMutableList.add("d") - println(fooMutableList.last()) // => d - println(fooMutableList.size) // => 4 - - // We can create a set using the "setOf" function. - val fooSet = setOf("a", "b", "c") - println(fooSet.contains("a")) // => true - println(fooSet.contains("z")) // => false - - // We can create a map using the "mapOf" function. - val fooMap = mapOf("a" to 8, "b" to 7, "c" to 9) - // Map values can be accessed by their key. - println(fooMap["a"]) // => 8 - - /* - Sequences represent lazily-evaluated collections. - We can create a sequence using the "generateSequence" function. - */ - val fooSequence = generateSequence(1, { it + 1 }) - val x = fooSequence.take(10).toList() - println(x) // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - - // An example of using a sequence to generate Fibonacci numbers: - fun fibonacciSequence(): Sequence { - var a = 0L - var b = 1L - - fun next(): Long { - val result = a + b - a = b - b = result - return a - } - - return generateSequence(::next) - } - val y = fibonacciSequence().take(10).toList() - println(y) // => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - - // Kotlin provides higher-order functions for working with collections. - val z = (1..9).map {it * 3} - .filter {it < 20} - .groupBy {it % 2 == 0} - .mapKeys {if (it.key) "even" else "odd"} - println(z) // => {odd=[3, 9, 15], even=[6, 12, 18]} - - // A "for" loop can be used with anything that provides an iterator. - for (c in "hello") { - println(c) - } - - // "while" loops work in the same way as other languages. - var ctr = 0 - while (ctr < 5) { - println(ctr) - ctr++ - } - do { - println(ctr) - ctr++ - } while (ctr < 10) - - /* - "if" can be used as an expression that returns a value. - For this reason the ternary ?: operator is not needed in Kotlin. - */ - val num = 5 - val message = if (num % 2 == 0) "even" else "odd" - println("$'num' is $'message'") // => 5 is odd - - // "when" can be used as an alternative to "if-else if" chains. - val i = 10 - when { - i < 7 -> println("first block") - fooString.startsWith("hello") -> println("second block") - else -> println("else block") - } - - // "when" can be used with an argument. - when (i) { - 0, 21 -> println("0 or 21") - in 1..20 -> println("in the range 1 to 20") - else -> println("none of the above") - } - - // "when" can be used as a function that returns a value. - var result = when (i) { - 0, 21 -> "0 or 21" - in 1..20 -> "in the range 1 to 20" - else -> "none of the above" - } - println(result) - - /* - We can check if an object is of a particular type by using the "is" operator. - If an object passes a type check then it can be used as that type without - explicitly casting it. - */ - fun smartCastExample(x: Any) : Boolean { - if (x is Boolean) { - // x is automatically cast to Boolean - return x - } else if (x is Int) { - // x is automatically cast to Int - return x > 0 - } else if (x is String) { - // x is automatically cast to String - return x.isNotEmpty() - } else { - return false - } - } - println(smartCastExample("Hello, world!")) // => true - println(smartCastExample("")) // => false - println(smartCastExample(5)) // => true - println(smartCastExample(0)) // => false - println(smartCastExample(true)) // => true - - // Smartcast also works with when block - fun smartCastWhenExample(x: Any) = when (x) { - is Boolean -> x - is Int -> x > 0 - is String -> x.isNotEmpty() - else -> false - } - - /* - Extensions are a way to add new functionality to a class. - This is similar to C# extension methods. - */ - fun String.remove(c: Char): String { - return this.filter {it != c} - } - println("Hello, world!".remove('l')) // => Heo, word! - } - - // Enum classes are similar to Java enum types. - enum class EnumExample { - A, B, C // Enum constants are separated with commas. - } - fun printEnum() = println(EnumExample.A) // => A - - // Since each enum is an instance of the enum class, they can be initialized as: - enum class EnumExample1(val value: Int) { - A(value = 1), - B(value = 2), - C(value = 3) - } - fun printProperty() = println(EnumExample1.A.value) // => 1 - - // Every enum has properties to obtain its name and ordinal(position) in the enum class declaration: - fun printName() = println(EnumExample1.A.name) // => A - fun printPosition() = println(EnumExample1.A.ordinal) // => 0 - - /* - The "object" keyword can be used to create singleton objects. - We cannot instantiate it but we can refer to its unique instance by its name. - This is similar to Scala singleton objects. - */ - object ObjectExample { - fun hello(): String { - return "hello" - } - - override fun toString(): String { - return "Hello, it's me, ${"ObjectExample::class.simpleName"}" - } - } - - - fun useSingletonObject() { - println(ObjectExample.hello()) // => hello - // In Kotlin, "Any" is the root of the class hierarchy, just like "Object" is in Java - val someRef: Any = ObjectExample - println(someRef) // => Hello, it's me, ObjectExample - } - - - /* The not-null assertion operator (!!) converts any value to a non-null type and - throws an exception if the value is null. - */ - var b: String? = "abc" - val l = b!!.length - - data class Counter(var value: Int) { - // overload Counter += Int - operator fun plusAssign(increment: Int) { - this.value += increment - } - - // overload Counter++ and ++Counter - operator fun inc() = Counter(value + 1) - - // overload Counter + Counter - operator fun plus(other: Counter) = Counter(this.value + other.value) - - // overload Counter * Counter - operator fun times(other: Counter) = Counter(this.value * other.value) - - // overload Counter * Int - operator fun times(value: Int) = Counter(this.value * value) - - // overload Counter in Counter - operator fun contains(other: Counter) = other.value == this.value - - // overload Counter[Int] = Int - operator fun set(index: Int, value: Int) { - this.value = index + value - } - - // overload Counter instance invocation - operator fun invoke() = println("The value of the counter is $'value'") - - } - /* You can also overload operators through extension methods */ - // overload -Counter - operator fun Counter.unaryMinus() = Counter(-this.value) - - fun operatorOverloadingDemo() { - var counter1 = Counter(0) - var counter2 = Counter(5) - counter1 += 7 - println(counter1) // => Counter(value=7) - println(counter1 + counter2) // => Counter(value=12) - println(counter1 * counter2) // => Counter(value=35) - println(counter2 * 2) // => Counter(value=10) - println(counter1 in Counter(5)) // => false - println(counter1 in Counter(7)) // => true - counter1[26] = 10 - println(counter1) // => Counter(value=36) - counter1() // => The value of the counter is 36 - println(-counter2) // => Counter(value=-5) - } - """ - ) - - val result = - KotlinCompilation() - .apply { - sources = listOf(source) - compilerPluginRegistrars = listOf(AnalyzerRegistrar()) - verbose = false - pluginOptions = - listOf( - PluginOption("semanticdb-kotlinc", "sourceroot", path.toString()), - PluginOption("semanticdb-kotlinc", "targetroot", buildPath.toString()) - ) - commandLineProcessors = listOf(AnalyzerCommandLineProcessor()) - workingDir = path.toFile() - } - .compile() - - result.exitCode shouldBe KotlinCompilation.ExitCode.OK - } - - - @Test - fun `compound package name semicolon test`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, """ - package hello.sample; - class Apple - """.trimIndent() - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "hello/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 13 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "hello/sample/" - range { - startLine = 0 - startCharacter = 14 - endLine = 0 - endCharacter = 20 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "hello/sample/Apple#" - range { - startLine = 1 - startCharacter = 6 - endLine = 1 - endCharacter = 11 - } - enclosingRange { - startLine = 1 - endLine = 1 - endCharacter = 11 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "hello/sample/Apple#``()." - range { - startLine = 1 - startCharacter = 6 - endLine = 1 - endCharacter = 11 - } - enclosingRange { - startLine = 1 - endLine = 1 - endCharacter = 11 - } - }, - ) - - assertSoftly(document.occurrencesList) { - withClue(document.occurrencesList) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "hello/sample/Apple#" - language = KOTLIN - displayName = "Apple" - documentation = - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "```kotlin\npublic final class Apple : Any\n```" - } - }) - - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - - @Test - fun `simple package name semicolon test`(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample; - class Banana { - fun foo() { } - }""" - ) - - val occurrences = - arrayOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "sample/" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Banana#" - range { - startLine = 1 - startCharacter = 6 - endLine = 1 - endCharacter = 12 - } - enclosingRange { - startLine = 1 - endLine = 3 - endCharacter = 1 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Banana#foo()." - range { - startLine = 2 - startCharacter = 8 - endLine = 2 - endCharacter = 11 - } - enclosingRange { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 17 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "sample/Banana#" - range { - startLine = 1 - startCharacter = 6 - endLine = 1 - endCharacter = 12 - } - enclosingRange { - startLine = 1 - endLine = 3 - endCharacter = 1 - } - }, - ) - assertSoftly(document.occurrencesList) { - withClue(this) { occurrences.forEach(::shouldContain) } - } - - val symbols = - arrayOf( - SymbolInformation { - symbol = "sample/Banana#" - language = KOTLIN - displayName = "Banana" - documentation = - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "```kotlin\npublic final class Banana : Any\n```" - } - }, - SymbolInformation { - symbol = "sample/Banana#foo()." - language = KOTLIN - displayName = "foo" - documentation = - Documentation { - format = Semanticdb.Documentation.Format.MARKDOWN - message = "```kotlin\npublic final fun foo(): Unit\n```" - } - }) - assertSoftly(document.symbolsList) { withClue(this) { symbols.forEach(::shouldContain) } } - } - - @Test - fun documentation(@TempDir path: Path) { - val document = - compileSemanticdb( - path, - """ - package sample - import java.io.Serializable - abstract class DocstringSuperclass - - /** Example class docstring */ - class Docstrings: DocstringSuperclass(), Serializable - - /** - * Example method docstring - * - **/ - inline fun docstrings(msg: String): Int { return msg.length } - """.trimIndent() - ) - document.assertDocumentation("sample/Docstrings#", "Example class docstring") - document.assertDocumentation("sample/docstrings().", "Example method docstring") - } - - private fun TextDocument.assertDocumentation(symbol: String, expectedDocumentation: String) { - val markdown = - this.symbolsList.find { it.symbol == symbol }?.documentation?.message - ?: fail("no documentation for symbol $symbol") - val obtainedDocumentation = markdown.split("----").last().trim() - assertEquals(expectedDocumentation, obtainedDocumentation) - } -} diff --git a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/SemanticdbSymbolsTest.kt b/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/SemanticdbSymbolsTest.kt deleted file mode 100644 index d3cef3027..000000000 --- a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/SemanticdbSymbolsTest.kt +++ /dev/null @@ -1,726 +0,0 @@ -package com.sourcegraph.semanticdb_kotlinc.test - -import com.sourcegraph.semanticdb_kotlinc.* -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.Documentation.Format -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.Language -import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role -import com.sourcegraph.semanticdb_kotlinc.test.ExpectedSymbols.SemanticdbData -import com.sourcegraph.semanticdb_kotlinc.test.ExpectedSymbols.SymbolCacheData -import com.tschuchort.compiletesting.SourceFile -import kotlin.contracts.ExperimentalContracts -import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi -import org.junit.jupiter.api.TestFactory - -@ExperimentalCompilerApi -@ExperimentalContracts -class SemanticdbSymbolsTest { - @TestFactory - fun `method disambiguator`() = - listOf( - ExpectedSymbols( - "Basic two methods", - SourceFile.testKt( - """ - |class Test { - | fun sample() {} - | fun sample(x: Int) {} - |} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf("Test#sample().".symbol(), "Test#sample(+1).".symbol()), - )), - ExpectedSymbols( - "Inline class constructor", - SourceFile.testKt( - """ - |class Test(val x: Int) - |""".trimMargin()), - symbolsCacheData = SymbolCacheData(listOf("Test#``().(x)".symbol()))), - ExpectedSymbols( - "Inline + secondary class constructors", - SourceFile.testKt( - """ - |class Test(val x: Int) { - | constructor(y: Long): this(y.toInt()) - | constructor(z: String): this(z.toInt()) - |} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf( - "Test#``().(x)".symbol(), - "Test#``(+1).(y)".symbol(), - "Test#``(+2).(z)".symbol()))), - ExpectedSymbols( - "Disambiguator number is not affected by different named methods", - SourceFile.testKt( - """ - |class Test { - | fun sample() {} - | fun test() {} - | fun test(x: Int) {} - |} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf("Test#test().".symbol(), "Test#test(+1).".symbol()))), - ExpectedSymbols( - "Top level overloaded functions", - SourceFile.testKt( - """ - |fun test() {} - |fun test(x: Int) {} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData(listOf("test().".symbol(), "test(+1).(x)".symbol()))), - ExpectedSymbols( - "Annotations incl annotation type alias", - SourceFile.testKt( - """ - |import kotlin.contracts.ExperimentalContracts - |import kotlin.test.Test - | - |@ExperimentalContracts - |class Banaan { - | @Test - | fun test() {} - |} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf( - "kotlin/contracts/ExperimentalContracts#".symbol(), - "kotlin/test/Test#".symbol()))), - // https://kotlinlang.slack.com/archives/C7L3JB43G/p1624995376114900 - /*ExpectedSymbols( - "Method call with type parameters", - SourceFile.testKt(""" - import org.junit.jupiter.api.io.TempDir - val burger = LinkedHashMap() - """), - symbolsCacheData = SymbolCacheData( - listOf("kotlin/collection/TypeAliasesKt#LinkedHashMap#``().".symbol()) - ) - )*/ - ) - .mapCheckExpectedSymbols() - - - @TestFactory - fun `check package symbols`() = - listOf( - ExpectedSymbols( - "single component package name", - SourceFile.testKt( - """ - |package main - | - |class Test - |""".trimMargin()), - symbolsCacheData = SymbolCacheData(listOf("main/Test#".symbol()), 0)), - ExpectedSymbols( - "multi component package name", - SourceFile.testKt( - """ - |package test.sample.main - | - |class Test - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData(listOf("test/sample/main/Test#".symbol()), 0)), - ExpectedSymbols( - "no package name", - SourceFile.testKt( - """ - |class Test - |""".trimMargin()), - symbolsCacheData = SymbolCacheData(listOf("Test#".symbol()), 0))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `check locals counts`() = - listOf( - ExpectedSymbols( - "simple variables", - SourceFile.testKt( - """ - |fun test() { - | val x = "hello" - | println(x) - |} - |""".trimMargin()), - symbolsCacheData = SymbolCacheData(localsCount = 1))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `builtin symbols`() = - listOf( - ExpectedSymbols( - "types", - SourceFile.testKt( - """ - |var x: Int = 1 - |lateinit var y: Unit - |lateinit var z: Any - |lateinit var w: Nothing - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf( - "kotlin/Int#".symbol(), - "kotlin/Unit#".symbol(), - "kotlin/Any#".symbol(), - "kotlin/Nothing#".symbol()))), - ExpectedSymbols( - "functions", - SourceFile.testKt( - """ - |val x = mapOf() - |fun main() { - | println() - |} - |""".trimMargin()), - symbolsCacheData = - SymbolCacheData( - listOf( - "kotlin/collections/mapOf(+2).".symbol(), - "kotlin/io/println(+10).".symbol())))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `reference expressions`() = - listOf( - ExpectedSymbols( - "dot qualified expression", - SourceFile.testKt( - """ - |import java.lang.System - | - |fun main() { - | System.err - |} - |""".trimMargin()), - symbolsCacheData = SymbolCacheData(listOf("java/lang/System#err.".symbol())))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `properties with getters-setters`() = - listOf( - ExpectedSymbols( - "top level properties - implicit", - SourceFile.testKt( - """ - |var x: Int = 5 - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "x." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "getX()." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endCharacter = 14 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "setX()." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endCharacter = 14 - } - })), - ), - ExpectedSymbols( - "top level properties - explicit getter", - SourceFile.testKt( - """ - |var x: Int = 5 - | get() = field + 10 - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "x." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endLine = 1 - endCharacter = 22 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "setX()." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endLine = 1 - endCharacter = 22 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "getX()." - range { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 7 - } - enclosingRange { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 22 - } - })), - ), - ExpectedSymbols( - "top level properties - explicit setter", - SourceFile.testKt( - """ - |var x: Int = 5 - | set(value) { field = value + 5 } - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "x." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endLine = 1 - endCharacter = 36 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "getX()." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endLine = 1 - endCharacter = 36 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "setX()." - range { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 7 - } - enclosingRange { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 36 - } - })), - ), - ExpectedSymbols( - "top level properties - explicit getter & setter", - SourceFile.testKt( - """ - |var x: Int = 5 - | get() = field + 10 - | set(value) { field = value + 10 } - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "x." - range { - startLine = 0 - startCharacter = 4 - endLine = 0 - endCharacter = 5 - } - enclosingRange { - endLine = 2 - endCharacter = 37 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "getX()." - range { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 7 - } - enclosingRange { - startLine = 1 - startCharacter = 4 - endLine = 1 - endCharacter = 22 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "setX()." - range { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 7 - } - enclosingRange { - startLine = 2 - startCharacter = 4 - endLine = 2 - endCharacter = 37 - } - })), - ), - ExpectedSymbols( - "class constructor properties", - SourceFile.testKt( - """ - |class Test(var sample: Int, text: String): Throwable(sample.toString()) { - | fun test() { - | println(sample) - | } - |} - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Test#``().(sample)" - range { - startLine = 0 - startCharacter = 15 - endLine = 0 - endCharacter = 21 - } - enclosingRange { - startCharacter = 11 - endCharacter = 26 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Test#sample." - range { - startLine = 0 - startCharacter = 15 - endLine = 0 - endCharacter = 21 - } - enclosingRange { - startCharacter = 11 - endCharacter = 26 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Test#getSample()." - range { - startLine = 0 - startCharacter = 15 - endLine = 0 - endCharacter = 21 - } - enclosingRange { - startCharacter = 11 - endCharacter = 26 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Test#setSample()." - range { - startLine = 0 - startCharacter = 15 - endLine = 0 - endCharacter = 21 - } - enclosingRange { - startCharacter = 11 - endCharacter = 26 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "Test#``().(sample)" - range { - startLine = 0 - startCharacter = 53 - endLine = 0 - endCharacter = 59 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "Test#sample." - range { - startLine = 2 - startCharacter = 16 - endLine = 2 - endCharacter = 22 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "Test#getSample()." - range { - startLine = 2 - startCharacter = 16 - endLine = 2 - endCharacter = 22 - } - }, - )))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `class constructors`() = - listOf( - ExpectedSymbols( - "implicit primary constructor", - SourceFile.testKt( - """ - |class Banana - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#" - range { - startLine = 0 - startCharacter = 6 - endLine = 0 - endCharacter = 12 - } - enclosingRange { - endCharacter = 12 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#``()." - range { - startLine = 0 - startCharacter = 6 - endLine = 0 - endCharacter = 12 - } - enclosingRange { - endCharacter = 12 - } - }, - ))), - ExpectedSymbols( - "explicit primary constructor without keyword", - SourceFile.testKt( - """ - |class Banana(size: Int) - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#" - range { - startLine = 0 - startCharacter = 6 - endLine = 0 - endCharacter = 12 - } - enclosingRange { - endCharacter = 23 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#``()." - range { - startLine = 0 - startCharacter = 6 - endLine = 0 - endCharacter = 12 - } - enclosingRange { - startCharacter = 12 - endCharacter = 23 - } - }, - ))), - ExpectedSymbols( - "explicit primary constructor with keyword", - SourceFile.testKt( - """ - |class Banana constructor(size: Int) - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#" - range { - startLine = 0 - startCharacter = 6 - endLine = 0 - endCharacter = 12 - } - enclosingRange { - endCharacter = 35 - } - }, - SymbolOccurrence { - role = Role.DEFINITION - symbol = "Banana#``()." - range { - startLine = 0 - startCharacter = 13 - endLine = 0 - endCharacter = 24 - } - enclosingRange { - startCharacter = 13 - endCharacter = 35 - } - }, - )))) - .mapCheckExpectedSymbols() - - @TestFactory - fun `Single Abstract Method interface`() = - listOf( - ExpectedSymbols( - "basic java.lang.Runnable", - SourceFile.testKt( - """ - |val x = Runnable { }.run() - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedOccurrences = - listOf( - SymbolOccurrence { - role = Role.REFERENCE - symbol = "java/lang/Runnable#" - range { - startLine = 0 - startCharacter = 8 - endLine = 0 - endCharacter = 16 - } - }, - SymbolOccurrence { - role = Role.REFERENCE - symbol = "java/lang/Runnable#run()." - range { - startLine = 0 - startCharacter = 21 - endLine = 0 - endCharacter = 24 - } - })))) - .mapCheckExpectedSymbols() - - @TestFactory - fun kdoc() = - listOf( - ExpectedSymbols( - "empty kdoc line", - SourceFile.testKt( - """ - |/** - | - |hello world - |* test content - |*/ - |val x = "" - |""".trimMargin()), - semanticdb = - SemanticdbData( - expectedSymbols = - listOf( - SymbolInformation { - symbol = "x." - displayName = "x" - language = Language.KOTLIN - documentation { - message = - "```kotlin\npublic final val x: String\n```\n\n----\n\n\nhello world\n test content\n" - format = Format.MARKDOWN - } - }, - SymbolInformation { - symbol = "getX()." - displayName = "x" - language = Language.KOTLIN - documentation { - message = - "```kotlin\npublic get(): String\n```\n\n----\n\n\nhello world\n test content\n" - format = Format.MARKDOWN - } - })))) - .mapCheckExpectedSymbols() -} diff --git a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/Utils.kt b/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/Utils.kt deleted file mode 100644 index 77ffc63d2..000000000 --- a/semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/Utils.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.sourcegraph.semanticdb_kotlinc.test - -import com.sourcegraph.semanticdb_kotlinc.* -import com.sourcegraph.semanticdb_kotlinc.AnalyzerCheckers.Companion.visitors -import com.tschuchort.compiletesting.KotlinCompilation -import com.tschuchort.compiletesting.SourceFile -import io.kotest.assertions.assertSoftly -import io.kotest.assertions.throwables.shouldNotThrowAny -import io.kotest.matchers.collections.shouldContainInOrder -import io.kotest.matchers.shouldBe -import java.nio.file.Path -import java.nio.file.Paths -import kotlin.contracts.ExperimentalContracts -import org.intellij.lang.annotations.Language -import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar -import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.diagnostics.DiagnosticReporter -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind -import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirFileChecker -import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar -import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter -import org.junit.jupiter.api.Assumptions.assumeFalse -import org.junit.jupiter.api.DynamicTest -import org.junit.jupiter.api.DynamicTest.dynamicTest - -data class ExpectedSymbols( - val testName: String, - val source: SourceFile, - val symbolsCacheData: SymbolCacheData? = null, - val semanticdb: SemanticdbData? = null -) { - data class SemanticdbData( - val expectedOccurrences: List? = null, - val expectedSymbols: List? = null - ) - - data class SymbolCacheData( - val expectedGlobals: List? = null, - val localsCount: Int? = null - ) -} - -fun SourceFile.Companion.testKt(@Language("kotlin") contents: String): SourceFile = - kotlin("Test.kt", contents) - -@ExperimentalCompilerApi -@ExperimentalContracts -fun List.mapCheckExpectedSymbols(): List = - this.flatMap { (testName, source, symbolsData, semanticdbData) -> - val globals = GlobalSymbolsCache(testing = true) - val locals = LocalSymbolsCache() - lateinit var document: Semanticdb.TextDocument - val compilation = configureTestCompiler(source, globals, locals) { document = it } - listOf( - dynamicTest("$testName - compilation") { - val result = shouldNotThrowAny { compilation.compile() } - result.exitCode shouldBe KotlinCompilation.ExitCode.OK - }, - dynamicTest("$testName - symbols") { - symbolsData?.apply { - println( - "checking symbols: ${expectedGlobals?.size ?: 0} globals and presence of $localsCount locals") - checkContainsExpectedSymbols(globals, locals, expectedGlobals, localsCount) - } - ?: assumeFalse(true) - }, - dynamicTest("$testName - semanticdb") { - semanticdbData?.apply { - println( - "checking semanticdb: ${expectedOccurrences?.size ?: 0} occurrences and ${expectedSymbols?.size ?: 0} symbols") - checkContainsExpectedSemanticdb(document, expectedOccurrences, expectedSymbols) - } - ?: assumeFalse(true) - }) - } - -@ExperimentalContracts -fun checkContainsExpectedSymbols( - globals: GlobalSymbolsCache, - locals: LocalSymbolsCache, - expectedGlobals: List?, - localsCount: Int? = null -) { - assertSoftly(globals) { expectedGlobals?.let { this.shouldContainInOrder(it) } } - localsCount?.also { locals.size shouldBe it } -} - -@ExperimentalContracts -fun checkContainsExpectedSemanticdb( - document: Semanticdb.TextDocument, - expectedOccurrences: List?, - expectedSymbols: List? -) { - assertSoftly(document.occurrencesList) { - expectedOccurrences?.let { this.shouldContainInOrder(it) } - } - assertSoftly(document.symbolsList) { expectedSymbols?.let { this.shouldContainInOrder(it) } } -} - -@OptIn(ExperimentalCompilerApi::class) -@ExperimentalContracts -private fun configureTestCompiler( - source: SourceFile, - globals: GlobalSymbolsCache, - locals: LocalSymbolsCache, - hook: (Semanticdb.TextDocument) -> Unit = {} -): KotlinCompilation { - val compilation = - KotlinCompilation().apply { - sources = listOf(source) - inheritClassPath = true - verbose = false - } - - val analyzer = semanticdbVisitorAnalyzer(globals, locals, compilation.workingDir.toPath(), hook) - compilation.apply { compilerPluginRegistrars = listOf(analyzer) } - return compilation -} - -@OptIn(ExperimentalContracts::class) -private class TestAnalyzerDeclarationCheckers( - globals: GlobalSymbolsCache, - locals: LocalSymbolsCache, - sourceRoot: Path -) : AnalyzerCheckers.AnalyzerDeclarationCheckers(sourceRoot) { - override val fileCheckers: Set = - setOf( - object : FirFileChecker(MppCheckerKind.Common) { - context(context: CheckerContext, reporter: DiagnosticReporter) - override fun check(declaration: FirFile) { - val ktFile = declaration.sourceFile ?: return - val lineMap = LineMap(declaration) - val visitor = SemanticdbVisitor(sourceRoot, ktFile, lineMap, globals, locals) - visitors[ktFile] = visitor - } - }, - AnalyzerCheckers.SemanticImportsChecker()) -} - -private class TestAnalyzerCheckers(session: FirSession) : AnalyzerCheckers(session) { - @OptIn(ExperimentalContracts::class) - override val declarationCheckers: DeclarationCheckers - get() = - TestAnalyzerDeclarationCheckers( - session.testAnalyzerParamsProvider.globals, - session.testAnalyzerParamsProvider.locals, - session.testAnalyzerParamsProvider.sourceroot - ) -} - -@OptIn(ExperimentalContracts::class) -class TestAnalyzerParamsProvider( - session: FirSession, - var globals: GlobalSymbolsCache, - var locals: LocalSymbolsCache, - sourceroot: Path, -) : AnalyzerParamsProvider(session, sourceroot) { - companion object { - fun getFactory( - globals: GlobalSymbolsCache, - locals: LocalSymbolsCache, - sourceroot: Path, - ): Factory { - return Factory { TestAnalyzerParamsProvider(it, globals, locals, sourceroot) } - } - } -} - -val FirSession.testAnalyzerParamsProvider: TestAnalyzerParamsProvider by FirSession - .sessionComponentAccessor() - -@OptIn(ExperimentalCompilerApi::class) -@ExperimentalContracts -fun semanticdbVisitorAnalyzer( - globals: GlobalSymbolsCache, - locals: LocalSymbolsCache, - sourceroot: Path, - hook: (Semanticdb.TextDocument) -> Unit = {} -): CompilerPluginRegistrar { - return object : CompilerPluginRegistrar() { - override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) { - FirExtensionRegistrarAdapter.registerExtension( - object : FirExtensionRegistrar() { - override fun ExtensionRegistrarContext.configurePlugin() { - +TestAnalyzerParamsProvider.getFactory(globals, locals, sourceroot) - +::TestAnalyzerCheckers - } - }) - IrGenerationExtension.registerExtension( - PostAnalysisExtension( - sourceRoot = sourceroot, targetRoot = Paths.get(""), callback = hook)) - } - - override val supportsK2: Boolean - get() = true - } -} diff --git a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala index 45b12f5fd..f50f602a3 100644 --- a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala @@ -54,9 +54,12 @@ abstract class BaseBuildToolSuite extends MopedSuite(ScipJava.app) { } } - private val semanticdbPattern = FileSystems + // Matches per-source SCIP shards produced by the Java/Kotlin compiler plug-ins. The + // historical parameter names still say "Semanticdb" for backwards compatibility with the + // callers; renaming them is deferred to a follow-up rename PR. + private val scipShardPattern = FileSystems .getDefault - .getPathMatcher("glob:**.semanticdb") + .getPathMatcher("glob:**/META-INF/scip/**.scip") def checkBuild( options: TestOptions, @@ -123,17 +126,17 @@ abstract class BaseBuildToolSuite extends MopedSuite(ScipJava.app) { case None => assertEquals(exit, 0, clues(app.capturedOutput)) } - val semanticdbFiles = + val scipShards = if (!Files.isDirectory(targetroot)) Nil else FileIO .listAllFilesRecursively(AbsolutePath(targetroot)) - .filter(p => semanticdbPattern.matches(p.toNIO)) - if (semanticdbFiles.length != expectedSemanticdbFiles) { + .filter(p => scipShardPattern.matches(p.toNIO)) + if (scipShards.length != expectedSemanticdbFiles) { fail( - s"Expected $expectedSemanticdbFiles SemanticDB file(s) to be generated.", - clues(semanticdbFiles, app.capturedOutput) + s"Expected $expectedSemanticdbFiles SCIP shard file(s) to be generated.", + clues(scipShards, app.capturedOutput) ) } if (expectedPackages.nonEmpty) { diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AbstractClasses.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AbstractClasses.java index ac2e74c31..fc494c4ac 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AbstractClasses.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AbstractClasses.java @@ -1,34 +1,34 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses# +//⌄ enclosing_range_start scip-java maven . . minimized/AbstractClasses# public abstract class AbstractClasses { -// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses# +// ^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AbstractClasses# // display_name AbstractClasses // signature_documentation java public abstract class AbstractClasses // kind Class -// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#``(). +// ^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AbstractClasses#``(). // display_name // signature_documentation java public AbstractClasses() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses#defaultImplementation(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AbstractClasses#defaultImplementation(). public String defaultImplementation() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#defaultImplementation(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AbstractClasses#defaultImplementation(). // display_name defaultImplementation // signature_documentation java public String defaultImplementation() // kind Method return ""; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses#defaultImplementation(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AbstractClasses#defaultImplementation(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses#abstractImplementation(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AbstractClasses#abstractImplementation(). public abstract String abstractImplementation(); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#abstractImplementation(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AbstractClasses#abstractImplementation(). // display_name abstractImplementation // signature_documentation java public abstract String abstractImplementation() // kind AbstractMethod -// relationship is_reference is_implementation semanticdb maven . . minimized/SubClasses#abstractImplementation(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses#abstractImplementation(). +// relationship is_reference is_implementation scip-java maven . . minimized/SubClasses#abstractImplementation(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AbstractClasses#abstractImplementation(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses# +//⌃ enclosing_range_end scip-java maven . . minimized/AbstractClasses# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationParameters.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationParameters.java index dbfff8af2..8a9e5d38b 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationParameters.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationParameters.java @@ -1,154 +1,154 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Bar# +//⌄ enclosing_range_start scip-java maven . . minimized/Bar# @interface Bar { -// ^^^ definition semanticdb maven . . minimized/Bar# +// ^^^ definition scip-java maven . . minimized/Bar# // display_name Bar -// signature_documentation java @interface Bar +// signature_documentation java abstract @interface Bar implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Bar#value(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/Bar#value(). double value(); -// ^^^^^ definition semanticdb maven . . minimized/Bar#value(). +// ^^^^^ definition scip-java maven . . minimized/Bar#value(). // display_name value // signature_documentation java public abstract double value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Bar#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Bar#value(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Bar# +//⌃ enclosing_range_end scip-java maven . . minimized/Bar# -//⌄ enclosing_range_start semanticdb maven . . minimized/BarB# +//⌄ enclosing_range_start scip-java maven . . minimized/BarB# @interface BarB { -// ^^^^ definition semanticdb maven . . minimized/BarB# +// ^^^^ definition scip-java maven . . minimized/BarB# // display_name BarB -// signature_documentation java @interface BarB +// signature_documentation java abstract @interface BarB implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/BarB#value(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/BarB#value(). boolean value(); -// ^^^^^ definition semanticdb maven . . minimized/BarB#value(). +// ^^^^^ definition scip-java maven . . minimized/BarB#value(). // display_name value // signature_documentation java public abstract boolean value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/BarB#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/BarB#value(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/BarB# +//⌃ enclosing_range_end scip-java maven . . minimized/BarB# -//⌄ enclosing_range_start semanticdb maven . . minimized/Nullable# +//⌄ enclosing_range_start scip-java maven . . minimized/Nullable# @interface Nullable { -// ^^^^^^^^ definition semanticdb maven . . minimized/Nullable# +// ^^^^^^^^ definition scip-java maven . . minimized/Nullable# // display_name Nullable -// signature_documentation java @interface Nullable +// signature_documentation java abstract @interface Nullable implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Nullable#value(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/Nullable#value(). String value() default ""; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^ definition semanticdb maven . . minimized/Nullable#value(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^ definition scip-java maven . . minimized/Nullable#value(). // display_name value // signature_documentation java public abstract String value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Nullable#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Nullable#value(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Nullable# +//⌃ enclosing_range_end scip-java maven . . minimized/Nullable# -//⌄ enclosing_range_start semanticdb maven . . minimized/BarRef# +//⌄ enclosing_range_start scip-java maven . . minimized/BarRef# @interface BarRef{ -// ^^^^^^ definition semanticdb maven . . minimized/BarRef# +// ^^^^^^ definition scip-java maven . . minimized/BarRef# // display_name BarRef -// signature_documentation java @interface BarRef +// signature_documentation java abstract @interface BarRef implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/BarRef#value(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/BarRef#value(). SuppressWarnings value(); -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -// ^^^^^ definition semanticdb maven . . minimized/BarRef#value(). +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^ definition scip-java maven . . minimized/BarRef#value(). // display_name value // signature_documentation java public abstract SuppressWarnings value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/BarRef#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/BarRef#value(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/BarRef# +//⌃ enclosing_range_end scip-java maven . . minimized/BarRef# -//⌄ enclosing_range_start semanticdb maven . . minimized/Foo# +//⌄ enclosing_range_start scip-java maven . . minimized/Foo# interface Foo { -// ^^^ definition semanticdb maven . . minimized/Foo# +// ^^^ definition scip-java maven . . minimized/Foo# // display_name Foo -// signature_documentation java interface Foo +// signature_documentation java abstract interface Foo // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Foo#test(). @Bar(-1d) -// ^^^ reference semanticdb maven . . minimized/Bar# +// ^^^ reference scip-java maven . . minimized/Bar# double test(); -// ^^^^ definition semanticdb maven . . minimized/Foo#test(). +// ^^^^ definition scip-java maven . . minimized/Foo#test(). // display_name test -// signature_documentation java @Bar(-1.0)\npublic abstract double test() +// signature_documentation java @Bar\npublic abstract double test() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Foo#test(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test2(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Foo#test2(). @Bar(~5) -// ^^^ reference semanticdb maven . . minimized/Bar# +// ^^^ reference scip-java maven . . minimized/Bar# @SuppressWarnings(value = "unchecked") -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -// ^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#value(). +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings#value(). double test2(); -// ^^^^^ definition semanticdb maven . . minimized/Foo#test2(). +// ^^^^^ definition scip-java maven . . minimized/Foo#test2(). // display_name test2 -// signature_documentation java @Bar(~5)\n@SuppressWarnings("unchecked")\npublic abstract double test2() +// signature_documentation java @Bar\n@SuppressWarnings\npublic abstract double test2() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test2(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Foo#test2(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test3(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Foo#test3(). @BarB(!true) -// ^^^^ reference semanticdb maven . . minimized/BarB# +// ^^^^ reference scip-java maven . . minimized/BarB# double test3(); -// ^^^^^ definition semanticdb maven . . minimized/Foo#test3(). +// ^^^^^ definition scip-java maven . . minimized/Foo#test3(). // display_name test3 -// signature_documentation java @BarB(!true)\npublic abstract double test3() +// signature_documentation java @BarB\npublic abstract double test3() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test3(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Foo#test3(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test4(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Foo#test4(). @Nullable(("what")) -// ^^^^^^^^ reference semanticdb maven . . minimized/Nullable# +// ^^^^^^^^ reference scip-java maven . . minimized/Nullable# Foo test4(); -// ^^^ reference semanticdb maven . . minimized/Foo# -// ^^^^^ definition semanticdb maven . . minimized/Foo#test4(). +// ^^^ reference scip-java maven . . minimized/Foo# +// ^^^^^ definition scip-java maven . . minimized/Foo#test4(). // display_name test4 -// signature_documentation java @Nullable("what")\npublic abstract Foo test4() +// signature_documentation java @Nullable\npublic abstract Foo test4() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test4(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Foo#test4(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#testCast(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Foo#testCast(). @Bar((double) -1) -// ^^^ reference semanticdb maven . . minimized/Bar# +// ^^^ reference scip-java maven . . minimized/Bar# double testCast(); -// ^^^^^^^^ definition semanticdb maven . . minimized/Foo#testCast(). +// ^^^^^^^^ definition scip-java maven . . minimized/Foo#testCast(). // display_name testCast -// signature_documentation java @Bar((double) -1)\npublic abstract double testCast() +// signature_documentation java @Bar\npublic abstract double testCast() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#testCast(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Foo#testCast(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Foo# +//⌃ enclosing_range_end scip-java maven . . minimized/Foo# -//⌄ enclosing_range_start semanticdb maven . . minimized/TestRef# +//⌄ enclosing_range_start scip-java maven . . minimized/TestRef# interface TestRef { -// ^^^^^^^ definition semanticdb maven . . minimized/TestRef# +// ^^^^^^^ definition scip-java maven . . minimized/TestRef# // display_name TestRef -// signature_documentation java interface TestRef +// signature_documentation java abstract interface TestRef // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/TestRef#testCase(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TestRef#testCase(). @BarRef(@SuppressWarnings(value = "unchecked")) -// ^^^^^^ reference semanticdb maven . . minimized/BarRef# -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -// ^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#value(). +// ^^^^^^ reference scip-java maven . . minimized/BarRef# +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings#value(). abstract double testCase(); -// ^^^^^^^^ definition semanticdb maven . . minimized/TestRef#testCase(). +// ^^^^^^^^ definition scip-java maven . . minimized/TestRef#testCase(). // display_name testCase -// signature_documentation java @BarRef(@SuppressWarnings("unchecked"))\npublic abstract double testCase() +// signature_documentation java @BarRef\npublic abstract double testCase() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/TestRef#testCase(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TestRef#testCase(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/TestRef# +//⌃ enclosing_range_end scip-java maven . . minimized/TestRef# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Annotations.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Annotations.java index 1a6ace917..061c9a401 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Annotations.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Annotations.java @@ -1,79 +1,79 @@ package minimized; import java.lang.annotation.Documented; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Documented# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Documented# import java.lang.annotation.Retention; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Retention# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Retention# import java.lang.annotation.RetentionPolicy; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/RetentionPolicy# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/RetentionPolicy# import java.lang.annotation.Target; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Target# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Target# import static java.lang.annotation.ElementType.*; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType# -//⌄ enclosing_range_start semanticdb maven . . minimized/Annotations# +//⌄ enclosing_range_start scip-java maven . . minimized/Annotations# @Documented -// ^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Documented# +// ^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Documented# @Retention(RetentionPolicy.RUNTIME) -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/RetentionPolicy# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/RetentionPolicy#RUNTIME. +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Retention# +// ^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/RetentionPolicy# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/RetentionPolicy#RUNTIME. @Target(value = {CONSTRUCTOR, -// ^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Target# -// ^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Target#value(). -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#CONSTRUCTOR. +// ^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Target# +// ^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Target#value(). +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#CONSTRUCTOR. FIELD, -// ^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#FIELD. +// ^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#FIELD. LOCAL_VARIABLE, -// ^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#LOCAL_VARIABLE. +// ^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#LOCAL_VARIABLE. METHOD, -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#METHOD. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#METHOD. PACKAGE, -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#PACKAGE. +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#PACKAGE. PARAMETER, -// ^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#PARAMETER. +// ^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#PARAMETER. TYPE} -// ^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#TYPE. +// ^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#TYPE. ) public @interface Annotations { -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/Annotations# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/Annotations# // display_name Annotations -// signature_documentation java @Documented\n@Retention(RetentionPolicy.RUNTIME)\n@Target({CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})\npublic @interface Annotations +// signature_documentation java @Documented\n@Retention\n@Target\npublic abstract @interface Annotations implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Annotations#value(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Annotations#value(). String value() default ""; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^ definition semanticdb maven . . minimized/Annotations#value(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^ definition scip-java maven . . minimized/Annotations#value(). // display_name value // signature_documentation java public abstract String value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Annotations#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Annotations#value(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Annotations#format(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Annotations#format(). String format() default ""; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ definition semanticdb maven . . minimized/Annotations#format(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ definition scip-java maven . . minimized/Annotations#format(). // display_name format // signature_documentation java public abstract String format() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Annotations#format(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Annotations#format(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Annotations# +//⌃ enclosing_range_end scip-java maven . . minimized/Annotations# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationsOnParameterizedTypes.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationsOnParameterizedTypes.java index 926380b42..4465c89df 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationsOnParameterizedTypes.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnnotationsOnParameterizedTypes.java @@ -1,238 +1,290 @@ package minimized; import java.lang.reflect.Constructor; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^ reference semanticdb maven . . java/lang/reflect/ -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^ reference scip-java maven . . java/lang/reflect/ +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/Constructor# import java.lang.reflect.InvocationHandler; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^ reference semanticdb maven . . java/lang/reflect/ -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^ reference scip-java maven . . java/lang/reflect/ +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/InvocationHandler# import java.util.concurrent.ConcurrentHashMap; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^^^ reference semanticdb maven . . java/util/concurrent/ -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentHashMap# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^^^ reference scip-java maven . . java/util/concurrent/ +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/concurrent/ConcurrentHashMap# import java.util.concurrent.ConcurrentMap; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^^^ reference semanticdb maven . . java/util/concurrent/ -// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^^^ reference scip-java maven . . java/util/concurrent/ +// ^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/concurrent/ConcurrentMap# import java.util.function.Function; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^ reference semanticdb maven . . java/util/function/ -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^ reference scip-java maven . . java/util/function/ +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# -//⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# +//⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypes# public interface AnnotationsOnParameterizedTypes { -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypes# // display_name AnnotationsOnParameterizedTypes -// signature_documentation java public interface AnnotationsOnParameterizedTypes +// signature_documentation java public abstract interface AnnotationsOnParameterizedTypes // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). public static AnnotationsOnParameterizedTypes getInstance() { -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). // display_name getInstance // signature_documentation java public static AnnotationsOnParameterizedTypes getInstance() // kind StaticMethod return new AnnotationsOnParameterizedTypesImpl(); -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#``(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#``(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypes#getInstance(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] // ⌄ enclosing_range_start local 0 // ⌄ enclosing_range_start local 1 Function adapter(Class contract, Class wrappedClass); -// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] +// ^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] // display_name C // signature_documentation java C // kind TypeParameter -// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] +// ^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] // display_name W // signature_documentation java W // kind TypeParameter -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] -// ^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] +// ^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). // display_name adapter // signature_documentation java public abstract Function adapter(Class contract, Class wrappedClass) // kind AbstractMethod -// relationship is_reference is_implementation semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] +// relationship is_reference is_implementation scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] // ^^^^^^^^ definition local 0 // display_name contract // signature_documentation java Class contract -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// kind Parameter +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] // ^^^^^^^^^^^^ definition local 1 // display_name wrappedClass // signature_documentation java Class wrappedClass -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// kind Parameter // ⌃ enclosing_range_end local 0 // ⌃ enclosing_range_end local 1 -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[C] +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter().[W] } -//⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# +//⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypes# -//⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl# +//⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl# class AnnotationsOnParameterizedTypesImpl implements AnnotationsOnParameterizedTypes { -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl# // display_name AnnotationsOnParameterizedTypesImpl -// signature_documentation java class AnnotationsOnParameterizedTypesImpl +// signature_documentation java class AnnotationsOnParameterizedTypesImpl implements AnnotationsOnParameterizedTypes // kind Class -// relationship is_implementation semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#``(). +// relationship is_implementation scip-java maven . . minimized/AnnotationsOnParameterizedTypes# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#``(). // display_name // signature_documentation java AnnotationsOnParameterizedTypesImpl() // kind Constructor -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes# -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypes# +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. private ConcurrentMap, Constructor> proxyConstructors = new ConcurrentHashMap<>(); -// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap# -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor# -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. +// ^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/concurrent/ConcurrentMap# +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/Constructor# +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. // display_name proxyConstructors // signature_documentation java private ConcurrentMap, Constructor> proxyConstructors // kind Field -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentHashMap#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/concurrent/ConcurrentHashMap#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# // ⌄ enclosing_range_start local 2 +// ⌄ enclosing_range_start local 0 // ⌄ enclosing_range_start local 3 +// ⌄ enclosing_range_start local 1 public Function adapter(Class contract, Class wrappedClass) { -// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] // display_name C // signature_documentation java C // kind TypeParameter -// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] +// ^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] // display_name W // signature_documentation java W // kind TypeParameter -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] -// ^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). // display_name adapter // signature_documentation java @Override\npublic Function adapter(Class contract, Class wrappedClass) // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] -// ^^^^^^^^ definition local 2 +// relationship is_reference is_implementation scip-java maven . . minimized/AnnotationsOnParameterizedTypes#adapter(). +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ^^^^^^^^ definition local 0 // display_name contract // signature_documentation java Class contract -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] -// ^^^^^^^^^^^^ definition local 3 +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// kind Parameter +// ^^^^^^^^ definition local 2 +// display_name constructor +// signature_documentation java Function constructor +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// kind Variable +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] +// ^^^^^^^^^^^^ definition local 1 // display_name wrappedClass // signature_documentation java Class wrappedClass -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// kind Parameter +// ^^^^^^^^^^^^ definition local 3 +// display_name contract +// signature_documentation java Class contract +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Parameter // ⌃ enclosing_range_end local 2 +// ⌃ enclosing_range_end local 0 // ⌃ enclosing_range_end local 3 +// ⌃ enclosing_range_end local 1 // ⌄ enclosing_range_start local 4 +// ⌄ enclosing_range_start local 2 Function constructor = getConstructor(contract); -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] -// ^^^^^^^^^^^ definition local 4 +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/InvocationHandler# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ^^^^^^^^^^^ definition local 2 // display_name constructor // signature_documentation java Function constructor -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). // kind Variable -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ^^^^^^^^^^^ definition local 4 +// display_name constructor +// signature_documentation java @SuppressWarnings\nConstructor constructor +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Variable +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ^^^^^^^^ reference local 0 // ^^^^^^^^ reference local 2 // ⌃ enclosing_range_end local 4 +// ⌃ enclosing_range_end local 2 System.out.println(constructor); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^^^^^^^ reference local 2 // ^^^^^^^^^^^ reference local 4 return null; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C] +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] // ⌄ enclosing_range_start local 5 +// ⌄ enclosing_range_start local 3 private Function getConstructor(Class contract) { -// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] // display_name T // signature_documentation java T // kind TypeParameter -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/InvocationHandler# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). // display_name getConstructor // signature_documentation java private Function getConstructor(Class contract) // kind Method -// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] -// ^^^^^^^^ definition local 5 +// ^^^^^ reference scip-java maven jdk 11 java/lang/Class# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^^^^^^^^ definition local 3 // display_name contract // signature_documentation java Class contract -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Parameter +// ^^^^^^^^ definition local 5 +// display_name c +// signature_documentation java Class c +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Parameter // ⌃ enclosing_range_end local 5 +// ⌃ enclosing_range_end local 3 // ⌄ enclosing_range_start local 6 +// ⌄ enclosing_range_start local 4 @SuppressWarnings("unchecked") -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# // ⌄ enclosing_range_start local 7 +// ⌄ enclosing_range_start local 5 Constructor constructor = (Constructor) proxyConstructors.computeIfAbsent(contract, c -> { -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/Constructor# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^^^^^^^^^^^ definition local 4 +// display_name constructor +// signature_documentation java @SuppressWarnings\nConstructor constructor +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Variable // ^^^^^^^^^^^ definition local 6 // display_name constructor // signature_documentation java @SuppressWarnings\nConstructor constructor -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). // kind Variable -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor# -// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. -// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap#computeIfAbsent(). +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/reflect/Constructor# +// ^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors. +// ^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/concurrent/ConcurrentMap#computeIfAbsent(). +// ^^^^^^^^ reference local 3 // ^^^^^^^^ reference local 5 +// ^ definition local 5 +// display_name c +// signature_documentation java Class c +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Parameter // ^ definition local 7 // display_name c // signature_documentation java Class c -// enclosing_symbol semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// enclosing_symbol scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// kind Parameter // ⌃ enclosing_range_end local 7 +// ⌃ enclosing_range_end local 5 return null; }); // ⌃ enclosing_range_end local 6 +// ⌃ enclosing_range_end local 4 System.out.println(constructor); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^^^^^^^ reference local 4 // ^^^^^^^^^^^ reference local 6 return null; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). - }//⌃ enclosing_range_end semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl# +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T] + }//⌃ enclosing_range_end scip-java maven . . minimized/AnnotationsOnParameterizedTypesImpl# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnonymousClasses.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnonymousClasses.java index 5b997a6b4..7d7687db8 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnonymousClasses.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/AnonymousClasses.java @@ -1,66 +1,68 @@ package minimized; import java.util.function.Function; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^ reference semanticdb maven . . java/util/function/ -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^ reference scip-java maven . . java/util/function/ +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# -//⌄ enclosing_range_start semanticdb maven . . minimized/AnonymousClasses# +//⌄ enclosing_range_start scip-java maven . . minimized/AnonymousClasses# @SuppressWarnings("ALL") -// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# public class AnonymousClasses { -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnonymousClasses# +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnonymousClasses# // display_name AnonymousClasses -// signature_documentation java @SuppressWarnings("ALL")\npublic class AnonymousClasses +// signature_documentation java @SuppressWarnings\npublic class AnonymousClasses // kind Class -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnonymousClasses#``(). +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/AnonymousClasses#``(). // display_name // signature_documentation java public AnonymousClasses() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/AnonymousClasses#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/AnonymousClasses#app(). // ⌄ enclosing_range_start local 0 public static int app(int n) { -// ^^^ definition semanticdb maven . . minimized/AnonymousClasses#app(). +// ^^^ definition scip-java maven . . minimized/AnonymousClasses#app(). // display_name app // signature_documentation java public static int app(int n) // kind StaticMethod // ^ definition local 0 // display_name n // signature_documentation java int n -// enclosing_symbol semanticdb maven . . minimized/AnonymousClasses#app(). +// enclosing_symbol scip-java maven . . minimized/AnonymousClasses#app(). +// kind Parameter // ⌃ enclosing_range_end local 0 // ⌄ enclosing_range_start local 1 Function fn = -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ^^ definition local 1 // display_name fn // signature_documentation java Function fn -// enclosing_symbol semanticdb maven . . minimized/AnonymousClasses#app(). +// enclosing_symbol scip-java maven . . minimized/AnonymousClasses#app(). // kind Variable new Function() { -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/function/Function# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ⌄ enclosing_range_start local 3 @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# // ⌄ enclosing_range_start local 4 public Integer apply(Integer integer) { -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ^^^^^ definition local 3 // display_name apply // signature_documentation java @Override\npublic Integer apply(Integer integer) // enclosing_symbol local 2 // kind Method -// relationship is_reference is_implementation semanticdb maven jdk 11 java/util/function/Function#apply(). -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// relationship is_reference is_implementation scip-java maven jdk 11 java/util/function/Function#apply(). +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ^^^^^^^ definition local 4 // display_name integer // signature_documentation java Integer integer // enclosing_symbol local 3 +// kind Parameter // ⌃ enclosing_range_end local 4 return integer + n; // ^^^^^^^ reference local 4 @@ -72,9 +74,9 @@ public Integer apply(Integer integer) { return fn.apply(n); // ^^ reference local 1 -// ^^^^^ reference semanticdb maven jdk 11 java/util/function/Function#apply(). +// ^^^^^ reference scip-java maven jdk 11 java/util/function/Function#apply(). // ^ reference local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/AnonymousClasses#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/AnonymousClasses#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/AnonymousClasses# +//⌃ enclosing_range_end scip-java maven . . minimized/AnonymousClasses# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Arrays.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Arrays.java index e3a05bc9a..b788cf026 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Arrays.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Arrays.java @@ -1,19 +1,19 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Arrays# +//⌄ enclosing_range_start scip-java maven . . minimized/Arrays# public class Arrays { -// ^^^^^^ definition semanticdb maven . . minimized/Arrays# +// ^^^^^^ definition scip-java maven . . minimized/Arrays# // display_name Arrays // signature_documentation java public class Arrays // kind Class -// ^^^^^^ definition semanticdb maven . . minimized/Arrays#``(). +// ^^^^^^ definition scip-java maven . . minimized/Arrays#``(). // display_name // signature_documentation java public Arrays() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Arrays#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Arrays#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Arrays#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Arrays#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod @@ -22,16 +22,16 @@ public static String app() { // ^ definition local 0 // display_name a // signature_documentation java int[] a -// enclosing_symbol semanticdb maven . . minimized/Arrays#app(). +// enclosing_symbol scip-java maven . . minimized/Arrays#app(). // kind Variable // ⌃ enclosing_range_end local 0 // ⌄ enclosing_range_start local 1 String[] b = {"1", "2", "3"}; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 1 // display_name b // signature_documentation java String[] b -// enclosing_symbol semanticdb maven . . minimized/Arrays#app(). +// enclosing_symbol scip-java maven . . minimized/Arrays#app(). // kind Variable // ⌃ enclosing_range_end local 1 // ⌄ enclosing_range_start local 2 @@ -39,16 +39,16 @@ public static String app() { // ^ definition local 2 // display_name c // signature_documentation java int[][] c -// enclosing_symbol semanticdb maven . . minimized/Arrays#app(). +// enclosing_symbol scip-java maven . . minimized/Arrays#app(). // kind Variable // ⌃ enclosing_range_end local 2 // ⌄ enclosing_range_start local 3 String[][] d = {{"1"}, {"2"}, {"3"}}; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 3 // display_name d // signature_documentation java String[][] d -// enclosing_symbol semanticdb maven . . minimized/Arrays#app(). +// enclosing_symbol scip-java maven . . minimized/Arrays#app(). // kind Variable // ⌃ enclosing_range_end local 3 return b[0] + a[0] + c[1][0] + d[1][0]; @@ -57,6 +57,6 @@ public static String app() { // ^ reference local 2 // ^ reference local 3 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Arrays#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Arrays#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Arrays# +//⌃ enclosing_range_end scip-java maven . . minimized/Arrays# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ClassOf.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ClassOf.java index b5d2a0718..e69bec052 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ClassOf.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ClassOf.java @@ -1,27 +1,27 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/ClassOf# +//⌄ enclosing_range_start scip-java maven . . minimized/ClassOf# public class ClassOf { -// ^^^^^^^ definition semanticdb maven . . minimized/ClassOf# +// ^^^^^^^ definition scip-java maven . . minimized/ClassOf# // display_name ClassOf // signature_documentation java public class ClassOf // kind Class -// ^^^^^^^ definition semanticdb maven . . minimized/ClassOf#``(). +// ^^^^^^^ definition scip-java maven . . minimized/ClassOf#``(). // display_name // signature_documentation java public ClassOf() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/ClassOf#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ClassOf#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/ClassOf#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/ClassOf#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod return ClassOf.class.getName(); -// ^^^^^^^ reference semanticdb maven . . minimized/ClassOf# -// ^^^^^ reference semanticdb maven . . minimized/ClassOf#class. -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Class#getName(). +// ^^^^^^^ reference scip-java maven . . minimized/ClassOf# +// ^^^^^ reference scip-java maven . . minimized/ClassOf#class. +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Class#getName(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/ClassOf#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ClassOf#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/ClassOf# +//⌃ enclosing_range_end scip-java maven . . minimized/ClassOf# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Docstrings.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Docstrings.java index db59496fc..f5476a4d5 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Docstrings.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Docstrings.java @@ -1,43 +1,43 @@ package minimized; /** Example class docstring. */ -//⌄ enclosing_range_start semanticdb maven . . minimized/Docstrings# +//⌄ enclosing_range_start scip-java maven . . minimized/Docstrings# public class Docstrings { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/Docstrings# +// ^^^^^^^^^^ definition scip-java maven . . minimized/Docstrings# // display_name Docstrings // signature_documentation java public class Docstrings // kind Class // documentation Example class docstring. -// ^^^^^^^^^^ definition semanticdb maven . . minimized/Docstrings#``(). +// ^^^^^^^^^^ definition scip-java maven . . minimized/Docstrings#``(). // display_name // signature_documentation java public Docstrings() // kind Constructor /** Example field docstring. */ -// ⌄ enclosing_range_start semanticdb maven . . minimized/Docstrings#field. +// ⌄ enclosing_range_start scip-java maven . . minimized/Docstrings#field. public static int field = 42; -// ^^^^^ definition semanticdb maven . . minimized/Docstrings#field. +// ^^^^^ definition scip-java maven . . minimized/Docstrings#field. // display_name field // signature_documentation java public static int field // kind StaticField // documentation Example field docstring. -// ⌃ enclosing_range_end semanticdb maven . . minimized/Docstrings#field. +// ⌃ enclosing_range_end scip-java maven . . minimized/Docstrings#field. /** * Example method docstring. * * @return 42. */ -// ⌄ enclosing_range_start semanticdb maven . . minimized/Docstrings#method(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Docstrings#method(). public static int method() { -// ^^^^^^ definition semanticdb maven . . minimized/Docstrings#method(). +// ^^^^^^ definition scip-java maven . . minimized/Docstrings#method(). // display_name method // signature_documentation java public static int method() // kind StaticMethod // documentation Example method docstring.\n\n @return 42.\n return 42; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Docstrings#method(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Docstrings#method(). /** * Example method parameter docstring. @@ -45,10 +45,10 @@ public static int method() { * @param n The parameter. * @return The number + 42. */ -// ⌄ enclosing_range_start semanticdb maven . . minimized/Docstrings#methodParameter(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Docstrings#methodParameter(). // ⌄ enclosing_range_start local 0 public static int methodParameter(int n) { -// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Docstrings#methodParameter(). +// ^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Docstrings#methodParameter(). // display_name methodParameter // signature_documentation java public static int methodParameter(int n) // kind StaticMethod @@ -56,27 +56,28 @@ public static int methodParameter(int n) { // ^ definition local 0 // display_name n // signature_documentation java int n -// enclosing_symbol semanticdb maven . . minimized/Docstrings#methodParameter(). +// enclosing_symbol scip-java maven . . minimized/Docstrings#methodParameter(). +// kind Parameter // ⌃ enclosing_range_end local 0 return n + 42; // ^ reference local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Docstrings#methodParameter(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Docstrings#methodParameter(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Docstrings#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Docstrings#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Docstrings#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Docstrings#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod return String.format("%s%s%s", field, method(), methodParameter(42)); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#format(). -// ^^^^^ reference semanticdb maven . . minimized/Docstrings#field. -// ^^^^^^ reference semanticdb maven . . minimized/Docstrings#method(). -// ^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Docstrings#methodParameter(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String#format(). +// ^^^^^ reference scip-java maven . . minimized/Docstrings#field. +// ^^^^^^ reference scip-java maven . . minimized/Docstrings#method(). +// ^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Docstrings#methodParameter(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Docstrings#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Docstrings#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Docstrings# +//⌃ enclosing_range_end scip-java maven . . minimized/Docstrings# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Enums.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Enums.java index 2e8cf63ca..ee255d00f 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Enums.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Enums.java @@ -1,123 +1,129 @@ package minimized; import java.util.Arrays; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Arrays# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^ reference scip-java maven jdk 11 java/util/Arrays# import java.util.stream.Collectors; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^ reference semanticdb maven . . java/util/stream/ -// ^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/stream/Collectors# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^ reference scip-java maven . . java/util/stream/ +// ^^^^^^^^^^ reference scip-java maven jdk 11 java/util/stream/Collectors# -//⌄ enclosing_range_start semanticdb maven . . minimized/Enums# +//⌄ enclosing_range_start scip-java maven . . minimized/Enums# enum Enums { -// ^^^^^ definition semanticdb maven . . minimized/Enums# +// ^^^^^ definition scip-java maven . . minimized/Enums# // display_name Enums -// signature_documentation java enum Enums +// signature_documentation java final enum Enums extends Enum // kind Enum -// relationship is_implementation semanticdb maven jdk 11 java/io/Serializable# -// relationship is_implementation semanticdb maven jdk 11 java/lang/Comparable# -// relationship is_implementation semanticdb maven jdk 11 java/lang/Enum# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#A. +// relationship is_implementation scip-java maven jdk 11 java/io/Serializable# +// relationship is_implementation scip-java maven jdk 11 java/lang/Comparable# +// relationship is_implementation scip-java maven jdk 11 java/lang/Enum# +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#A. A("A", 420), -// ^ definition semanticdb maven . . minimized/Enums#A. +// ^ definition scip-java maven . . minimized/Enums#A. // display_name A("A", 420) -// signature_documentation java Enums.A("A", 420) /* ordinal 0 */ -// ^ reference semanticdb maven . . minimized/Enums#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#A. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#B. +// signature_documentation java public static final A +// kind EnumMember +// ^ reference scip-java maven . . minimized/Enums#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#A. +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#B. B("B", 1), -// ^ definition semanticdb maven . . minimized/Enums#B. +// ^ definition scip-java maven . . minimized/Enums#B. // display_name B("B", 1) -// signature_documentation java Enums.B("B", 1) /* ordinal 1 */ -// ^ reference semanticdb maven . . minimized/Enums#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#B. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#C. +// signature_documentation java public static final B +// kind EnumMember +// ^ reference scip-java maven . . minimized/Enums#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#B. +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#C. C("C", 5); -// ^ definition semanticdb maven . . minimized/Enums#C. +// ^ definition scip-java maven . . minimized/Enums#C. // display_name C("C", 5) -// signature_documentation java Enums.C("C", 5) /* ordinal 2 */ -// ^ reference semanticdb maven . . minimized/Enums#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#C. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#value. +// signature_documentation java public static final C +// kind EnumMember +// ^ reference scip-java maven . . minimized/Enums#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#C. +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#value. public String value; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^ definition semanticdb maven . . minimized/Enums#value. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^ definition scip-java maven . . minimized/Enums#value. // display_name value // signature_documentation java public String value // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#value. +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#value. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#``(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#``(). // ⌄ enclosing_range_start local 0 // ⌄ enclosing_range_start local 1 Enums(String value, int a) { -// ^^^^^ definition semanticdb maven . . minimized/Enums#``(). +// ^^^^^ definition scip-java maven . . minimized/Enums#``(). // display_name // signature_documentation java private Enums(String value, int a) // kind Constructor -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^ definition local 0 // display_name value // signature_documentation java String value -// enclosing_symbol semanticdb maven . . minimized/Enums#``(). +// enclosing_symbol scip-java maven . . minimized/Enums#``(). +// kind Parameter // ^ definition local 1 // display_name a // signature_documentation java int a -// enclosing_symbol semanticdb maven . . minimized/Enums#``(). +// enclosing_symbol scip-java maven . . minimized/Enums#``(). +// kind Parameter // ⌃ enclosing_range_end local 0 // ⌃ enclosing_range_end local 1 this.value = value; -// ^^^^^ reference semanticdb maven . . minimized/Enums#value. +// ^^^^^ reference scip-java maven . . minimized/Enums#value. // ^^^^^ reference local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#``(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Enums#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Enums#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Enums#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Enums#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod // ⌄ enclosing_range_start local 2 // ⌄ enclosing_range_start local 3 String all = Arrays.stream(values()).map(e -> e.value).map(Enums::valueOf).collect(Collectors.toList()).toString(); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^ definition local 2 // display_name all // signature_documentation java String all -// enclosing_symbol semanticdb maven . . minimized/Enums#app(). +// enclosing_symbol scip-java maven . . minimized/Enums#app(). // kind Variable -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Arrays# -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Arrays#stream(). -// ^^^^^^ reference semanticdb maven . . minimized/Enums#values(). -// ^^^ reference semanticdb maven jdk 11 java/util/stream/Stream#map(). +// ^^^^^^ reference scip-java maven jdk 11 java/util/Arrays# +// ^^^^^^ reference scip-java maven jdk 11 java/util/Arrays#stream(). +// ^^^^^^ reference scip-java maven . . minimized/Enums#values(). +// ^^^ reference scip-java maven jdk 11 java/util/stream/Stream#map(). // ^ definition local 3 // display_name e // signature_documentation java Enums e -// enclosing_symbol semanticdb maven . . minimized/Enums#app(). +// enclosing_symbol scip-java maven . . minimized/Enums#app(). +// kind Parameter // ^ reference local 3 -// ^^^^^ reference semanticdb maven . . minimized/Enums#value. -// ^^^ reference semanticdb maven jdk 11 java/util/stream/Stream#map(). -// ^^^^^ reference semanticdb maven . . minimized/Enums# -// ^^^^^^^ reference semanticdb maven . . minimized/Enums#valueOf(). -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/stream/Stream#collect(+1). -// ^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/stream/Collectors# -// ^^^^^^ reference semanticdb maven jdk 11 java/util/stream/Collectors#toList(). -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Object#toString(). +// ^^^^^ reference scip-java maven . . minimized/Enums#value. +// ^^^ reference scip-java maven jdk 11 java/util/stream/Stream#map(). +// ^^^^^ reference scip-java maven . . minimized/Enums# +// ^^^^^^^ reference scip-java maven . . minimized/Enums#valueOf(). +// ^^^^^^^ reference scip-java maven jdk 11 java/util/stream/Stream#collect(+1). +// ^^^^^^^^^^ reference scip-java maven jdk 11 java/util/stream/Collectors# +// ^^^^^^ reference scip-java maven jdk 11 java/util/stream/Collectors#toList(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Object#toString(). // ⌃ enclosing_range_end local 3 // ⌃ enclosing_range_end local 2 return all + A.value + B.value + C.value; // ^^^ reference local 2 -// ^ reference semanticdb maven . . minimized/Enums#A. -// ^^^^^ reference semanticdb maven . . minimized/Enums#value. -// ^ reference semanticdb maven . . minimized/Enums#B. -// ^^^^^ reference semanticdb maven . . minimized/Enums#value. -// ^ reference semanticdb maven . . minimized/Enums#C. -// ^^^^^ reference semanticdb maven . . minimized/Enums#value. +// ^ reference scip-java maven . . minimized/Enums#A. +// ^^^^^ reference scip-java maven . . minimized/Enums#value. +// ^ reference scip-java maven . . minimized/Enums#B. +// ^^^^^ reference scip-java maven . . minimized/Enums#value. +// ^ reference scip-java maven . . minimized/Enums#C. +// ^^^^^ reference scip-java maven . . minimized/Enums#value. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Enums#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Enums#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Enums# +//⌃ enclosing_range_end scip-java maven . . minimized/Enums# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Fields.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Fields.java index 3a9236e2e..903159eb0 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Fields.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Fields.java @@ -1,171 +1,171 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Fields# +//⌄ enclosing_range_start scip-java maven . . minimized/Fields# public class Fields { -// ^^^^^^ definition semanticdb maven . . minimized/Fields# +// ^^^^^^ definition scip-java maven . . minimized/Fields# // display_name Fields // signature_documentation java public class Fields // kind Class -// ^^^^^^ definition semanticdb maven . . minimized/Fields#``(). +// ^^^^^^ definition scip-java maven . . minimized/Fields#``(). // display_name // signature_documentation java public Fields() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#privateField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#privateField. private final int privateField = 0; -// ^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#privateField. +// ^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#privateField. // display_name privateField // signature_documentation java private final int privateField // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#privateField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#protectedField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#privateField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#protectedField. protected int protectedField = 0; -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#protectedField. +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#protectedField. // display_name protectedField // signature_documentation java protected int protectedField // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#protectedField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#publicField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#protectedField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#publicField. public int publicField = 0; -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#publicField. +// ^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#publicField. // display_name publicField // signature_documentation java public int publicField // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#publicField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#staticPrivateField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#publicField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#staticPrivateField. private static final int staticPrivateField = 0; -// ^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#staticPrivateField. +// ^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#staticPrivateField. // display_name staticPrivateField // signature_documentation java private static final int staticPrivateField // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#staticPrivateField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#staticProtectedFields. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#staticPrivateField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#staticProtectedFields. protected static int staticProtectedFields = 0; -// ^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#staticProtectedFields. +// ^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#staticProtectedFields. // display_name staticProtectedFields // signature_documentation java protected static int staticProtectedFields // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#staticProtectedFields. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#staticPublicField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#staticProtectedFields. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#staticPublicField. public static int staticPublicField = 0; -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#staticPublicField. +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#staticPublicField. // display_name staticPublicField // signature_documentation java public static int staticPublicField // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#staticPublicField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#staticPublicField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#InnerFields# +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#InnerFields# public class InnerFields { -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerFields# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerFields# // display_name InnerFields // signature_documentation java public class InnerFields // kind Class -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerFields#``(). +// ^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerFields#``(). // display_name // signature_documentation java public InnerFields() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#InnerFields#publicInnerField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#InnerFields#publicInnerField. public int publicInnerField = publicField; -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerFields#publicInnerField. +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerFields#publicInnerField. // display_name publicInnerField // signature_documentation java public int publicInnerField // kind Field -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#publicField. -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#InnerFields#publicInnerField. +// ^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#publicField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#InnerFields#publicInnerField. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#InnerFields# +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#InnerFields# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#InnerStaticFields# +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#InnerStaticFields# public static class InnerStaticFields { -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerStaticFields# +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerStaticFields# // display_name InnerStaticFields // signature_documentation java public static class InnerStaticFields // kind Class -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerStaticFields#``(). +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerStaticFields#``(). // display_name // signature_documentation java public InnerStaticFields() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. public int publicNonStaticInnerField = 0; -// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. // display_name publicNonStaticInnerField // signature_documentation java public int publicNonStaticInnerField // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. public static int publicStaticInnerField = 0; -// ^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. +// ^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. // display_name publicStaticInnerField // signature_documentation java public static int publicStaticInnerField // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#InnerStaticFields# +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#InnerStaticFields# -// ⌄ enclosing_range_start semanticdb maven . . minimized/Fields#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Fields#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Fields#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Fields#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod // ⌄ enclosing_range_start local 0 Fields fields = new Fields(); -// ^^^^^^ reference semanticdb maven . . minimized/Fields# +// ^^^^^^ reference scip-java maven . . minimized/Fields# // ^^^^^^ definition local 0 // display_name fields // signature_documentation java Fields fields -// enclosing_symbol semanticdb maven . . minimized/Fields#app(). +// enclosing_symbol scip-java maven . . minimized/Fields#app(). // kind Variable -// ^^^^^^ reference semanticdb maven . . minimized/Fields#``(). +// ^^^^^^ reference scip-java maven . . minimized/Fields#``(). // ⌃ enclosing_range_end local 0 // ⌄ enclosing_range_start local 1 InnerFields innerFields = fields.new InnerFields(); -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerFields# +// ^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerFields# // ^^^^^^^^^^^ definition local 1 // display_name innerFields // signature_documentation java InnerFields innerFields -// enclosing_symbol semanticdb maven . . minimized/Fields#app(). +// enclosing_symbol scip-java maven . . minimized/Fields#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerFields#``(). +// ^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerFields#``(). // ⌃ enclosing_range_end local 1 // ⌄ enclosing_range_start local 2 InnerStaticFields innerStaticFields = new InnerStaticFields(); -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerStaticFields# +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerStaticFields# // ^^^^^^^^^^^^^^^^^ definition local 2 // display_name innerStaticFields // signature_documentation java InnerStaticFields innerStaticFields -// enclosing_symbol semanticdb maven . . minimized/Fields#app(). +// enclosing_symbol scip-java maven . . minimized/Fields#app(). // kind Variable -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerStaticFields#``(). +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerStaticFields#``(). // ⌃ enclosing_range_end local 2 return String.valueOf(fields.privateField) -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/String#valueOf(+5). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/String#valueOf(+5). // ^^^^^^ reference local 0 -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#privateField. +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#privateField. + fields.protectedField // ^^^^^^ reference local 0 -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#protectedField. +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#protectedField. + fields.publicField // ^^^^^^ reference local 0 -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#publicField. +// ^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#publicField. + staticPrivateField -// ^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#staticPrivateField. +// ^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#staticPrivateField. + staticProtectedFields -// ^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#staticProtectedFields. +// ^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#staticProtectedFields. + staticPublicField -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#staticPublicField. +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#staticPublicField. + innerFields.publicInnerField // ^^^^^^^^^^^ reference local 1 -// ^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerFields#publicInnerField. +// ^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerFields#publicInnerField. + InnerStaticFields.publicStaticInnerField -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerStaticFields# -// ^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerStaticFields# +// ^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerStaticFields#publicStaticInnerField. + innerStaticFields.publicNonStaticInnerField; // ^^^^^^^^^^^^^^^^^ reference local 2 -// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Fields#InnerStaticFields#publicNonStaticInnerField. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Fields#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Fields#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Fields# +//⌃ enclosing_range_end scip-java maven . . minimized/Fields# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ForComprehensions.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ForComprehensions.java index c1164a5c3..18cc6bcb7 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ForComprehensions.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ForComprehensions.java @@ -1,47 +1,48 @@ package minimized; import java.util.Collections; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections# import java.util.List; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^ reference semanticdb maven jdk 11 java/util/List# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^ reference scip-java maven jdk 11 java/util/List# -//⌄ enclosing_range_start semanticdb maven . . minimized/ForComprehensions# +//⌄ enclosing_range_start scip-java maven . . minimized/ForComprehensions# public class ForComprehensions { -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ForComprehensions# +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ForComprehensions# // display_name ForComprehensions // signature_documentation java public class ForComprehensions // kind Class -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ForComprehensions#``(). +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ForComprehensions#``(). // display_name // signature_documentation java public ForComprehensions() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/ForComprehensions#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ForComprehensions#app(). // ⌄ enclosing_range_start local 0 public static int app(int n) { -// ^^^ definition semanticdb maven . . minimized/ForComprehensions#app(). +// ^^^ definition scip-java maven . . minimized/ForComprehensions#app(). // display_name app // signature_documentation java public static int app(int n) // kind StaticMethod // ^ definition local 0 // display_name n // signature_documentation java int n -// enclosing_symbol semanticdb maven . . minimized/ForComprehensions#app(). +// enclosing_symbol scip-java maven . . minimized/ForComprehensions#app(). +// kind Parameter // ⌃ enclosing_range_end local 0 // ⌄ enclosing_range_start local 1 List integers = Collections.singletonList(n); -// ^^^^ reference semanticdb maven jdk 11 java/util/List# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// ^^^^ reference scip-java maven jdk 11 java/util/List# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ^^^^^^^^ definition local 1 // display_name integers // signature_documentation java List integers -// enclosing_symbol semanticdb maven . . minimized/ForComprehensions#app(). +// enclosing_symbol scip-java maven . . minimized/ForComprehensions#app(). // kind Variable -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections# -// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections#singletonList(). +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections# +// ^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections#singletonList(). // ^ reference local 0 // ⌃ enclosing_range_end local 1 // ⌄ enclosing_range_start local 2 @@ -49,7 +50,7 @@ public static int app(int n) { // ^^^^^^ definition local 2 // display_name result // signature_documentation java int result -// enclosing_symbol semanticdb maven . . minimized/ForComprehensions#app(). +// enclosing_symbol scip-java maven . . minimized/ForComprehensions#app(). // kind Variable // ⌃ enclosing_range_end local 2 // ⌄ enclosing_range_start local 3 @@ -57,7 +58,7 @@ public static int app(int n) { // ^ definition local 3 // display_name i // signature_documentation java int i -// enclosing_symbol semanticdb maven . . minimized/ForComprehensions#app(). +// enclosing_symbol scip-java maven . . minimized/ForComprehensions#app(). // kind Variable // ^^^^^^^^ reference local 1 // ⌃ enclosing_range_end local 3 @@ -68,6 +69,6 @@ public static int app(int n) { return result; // ^^^^^^ reference local 2 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/ForComprehensions#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ForComprehensions#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/ForComprehensions# +//⌃ enclosing_range_end scip-java maven . . minimized/ForComprehensions# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/InnerClasses.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/InnerClasses.java index 90779baed..5a300f7b6 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/InnerClasses.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/InnerClasses.java @@ -1,399 +1,410 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses# +//⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses# public class InnerClasses { -// ^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses# +// ^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses# // display_name InnerClasses // signature_documentation java public class InnerClasses // kind Class -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#exampleField. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#exampleField. private final int exampleField; -// ^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#exampleField. +// ^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#exampleField. // display_name exampleField // signature_documentation java private final int exampleField // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#exampleField. +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#exampleField. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#STRING. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#STRING. private static final String STRING = "asdf"; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ definition semanticdb maven . . minimized/InnerClasses#STRING. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ definition scip-java maven . . minimized/InnerClasses#STRING. // display_name STRING // signature_documentation java private static final String STRING // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#STRING. +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#STRING. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#top. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#top. private static final int top = 5; -// ^^^ definition semanticdb maven . . minimized/InnerClasses#top. +// ^^^ definition scip-java maven . . minimized/InnerClasses#top. // display_name top // signature_documentation java private static final int top // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#top. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#bottom. +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#top. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#bottom. private static final int bottom = 10; -// ^^^^^^ definition semanticdb maven . . minimized/InnerClasses#bottom. +// ^^^^^^ definition scip-java maven . . minimized/InnerClasses#bottom. // display_name bottom // signature_documentation java private static final int bottom // kind StaticField -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#bottom. +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#bottom. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#``(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#``(). // ⌄ enclosing_range_start local 0 public InnerClasses(int exampleField) { -// ^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#``(). +// ^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#``(). // display_name // signature_documentation java public InnerClasses(int exampleField) // kind Constructor // ^^^^^^^^^^^^ definition local 0 // display_name exampleField // signature_documentation java int exampleField -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#``(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#``(). +// kind Parameter // ⌃ enclosing_range_end local 0 this.exampleField = exampleField; -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#exampleField. +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#exampleField. // ^^^^^^^^^^^^ reference local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#``(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerEnum# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerEnum# public enum InnerEnum { -// ^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerEnum# +// ^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerEnum# // display_name InnerEnum -// signature_documentation java public enum InnerEnum +// signature_documentation java public static final enum InnerEnum extends Enum // kind Enum -// relationship is_implementation semanticdb maven jdk 11 java/io/Serializable# -// relationship is_implementation semanticdb maven jdk 11 java/lang/Comparable# -// relationship is_implementation semanticdb maven jdk 11 java/lang/Enum# -// ^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerEnum#``(). +// relationship is_implementation scip-java maven jdk 11 java/io/Serializable# +// relationship is_implementation scip-java maven jdk 11 java/lang/Comparable# +// relationship is_implementation scip-java maven jdk 11 java/lang/Enum# +// ^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerEnum#``(). // display_name // signature_documentation java private InnerEnum() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerEnum#A. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerEnum#A. A, -// ^ definition semanticdb maven . . minimized/InnerClasses#InnerEnum#A. +// ^ definition scip-java maven . . minimized/InnerClasses#InnerEnum#A. // display_name A -// signature_documentation java InnerEnum.A /* ordinal 0 */ -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerEnum#A. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerEnum#B. +// signature_documentation java public static final A +// kind EnumMember +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerEnum#A. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerEnum#B. B, -// ^ definition semanticdb maven . . minimized/InnerClasses#InnerEnum#B. +// ^ definition scip-java maven . . minimized/InnerClasses#InnerEnum#B. // display_name B -// signature_documentation java InnerEnum.B /* ordinal 1 */ -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerEnum#B. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerEnum#C. +// signature_documentation java public static final B +// kind EnumMember +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerEnum#B. +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerEnum#C. C -// ^ definition semanticdb maven . . minimized/InnerClasses#InnerEnum#C. +// ^ definition scip-java maven . . minimized/InnerClasses#InnerEnum#C. // display_name C -// signature_documentation java InnerEnum.C /* ordinal 2 */ -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerEnum#C. +// signature_documentation java public static final C +// kind EnumMember +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerEnum#C. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerEnum# +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerEnum# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerInterface#[A] -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerInterface#[B] +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerInterface# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerInterface#[A] +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerInterface#[B] public interface InnerInterface { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerInterface# +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerInterface# // display_name InnerInterface -// signature_documentation java public interface InnerInterface +// signature_documentation java public abstract static interface InnerInterface // kind Interface -// ^ definition semanticdb maven . . minimized/InnerClasses#InnerInterface#[A] +// ^ definition scip-java maven . . minimized/InnerClasses#InnerInterface#[A] // display_name A // signature_documentation java A // kind TypeParameter -// ^ definition semanticdb maven . . minimized/InnerClasses#InnerInterface#[B] +// ^ definition scip-java maven . . minimized/InnerClasses#InnerInterface#[B] // display_name B // signature_documentation java B // kind TypeParameter -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). // ⌄ enclosing_range_start local 1 B apply(A a); -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface#[B] -// ^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// ^ reference scip-java maven . . minimized/InnerClasses#InnerInterface#[B] +// ^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). // display_name apply // signature_documentation java public abstract B apply(A a) // kind AbstractMethod -// relationship is_reference is_implementation semanticdb maven . . minimized/InnerClasses#InnerClass#apply(). -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface#[A] +// relationship is_reference is_implementation scip-java maven . . minimized/InnerClasses#InnerClass#apply(). +// ^ reference scip-java maven . . minimized/InnerClasses#InnerInterface#[A] // ^ definition local 1 // display_name a // signature_documentation java A a -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). +// kind Parameter // ⌃ enclosing_range_end local 1 -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerInterface#[A] -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerInterface#[B] +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerInterface# +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerInterface#[A] +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerInterface#[B] -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerAnnotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerAnnotation# public @interface InnerAnnotation { -// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerAnnotation# +// ^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerAnnotation# // display_name InnerAnnotation -// signature_documentation java public @interface InnerAnnotation +// signature_documentation java public abstract static @interface InnerAnnotation implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerAnnotation#value(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerAnnotation#value(). int value(); -// ^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerAnnotation#value(). +// ^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerAnnotation#value(). // display_name value // signature_documentation java public abstract int value() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerAnnotation#value(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerAnnotation#value(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerAnnotation# +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerAnnotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerStaticClass# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerStaticClass# @SuppressWarnings(STRING + " ") -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -// ^^^^^^ reference semanticdb maven . . minimized/InnerClasses#STRING. +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^^ reference scip-java maven . . minimized/InnerClasses#STRING. @InnerAnnotation(top / bottom) -// ^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerAnnotation# -// ^^^ reference semanticdb maven . . minimized/InnerClasses#top. -// ^^^^^^ reference semanticdb maven . . minimized/InnerClasses#bottom. +// ^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerAnnotation# +// ^^^ reference scip-java maven . . minimized/InnerClasses#top. +// ^^^^^^ reference scip-java maven . . minimized/InnerClasses#bottom. public static class InnerStaticClass { -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerStaticClass# +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerStaticClass# // display_name InnerStaticClass -// signature_documentation java @SuppressWarnings(STRING + " ")\n@InnerAnnotation(top / bottom)\npublic static class InnerStaticClass +// signature_documentation java @SuppressWarnings\n@InnerAnnotation\npublic static class InnerStaticClass // kind Class -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerStaticClass#``(). +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerStaticClass#``(). // display_name // signature_documentation java public InnerStaticClass() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). public static void innerStaticMethod() {} -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). // display_name innerStaticMethod // signature_documentation java public static void innerStaticMethod() // kind StaticMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerStaticClass# +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerStaticClass# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerClass# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerClass# public class InnerClass implements InnerInterface { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerClass# +// ^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerClass# // display_name InnerClass -// signature_documentation java public class InnerClass +// signature_documentation java public class InnerClass implements InnerInterface // kind Class -// relationship is_implementation semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerClass#field. +// relationship is_implementation scip-java maven . . minimized/InnerClasses#InnerInterface# +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerClass#field. private final int field; -// ^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerClass#field. +// ^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerClass#field. // display_name field // signature_documentation java private final int field // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerClass#field. +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerClass#field. -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerClass#``(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerClass#``(). // ⌄ enclosing_range_start local 2 public InnerClass(int field) { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerClass#``(). +// ^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerClass#``(). // display_name // signature_documentation java public InnerClass(int field) // kind Constructor // ^^^^^ definition local 2 // display_name field // signature_documentation java int field -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#InnerClass#``(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#InnerClass#``(). +// kind Parameter // ⌃ enclosing_range_end local 2 this.field = field; -// ^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass#field. +// ^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass#field. // ^^^^^ reference local 2 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerClass#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerClass#``(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerClass#innerMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerClass#innerMethod(). public void innerMethod() { -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerClass#innerMethod(). +// ^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerClass#innerMethod(). // display_name innerMethod // signature_documentation java public void innerMethod() // kind Method System.out.println(field + exampleField); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+3). -// ^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass#field. -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#exampleField. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+3). +// ^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass#field. +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#exampleField. } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerClass#innerMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerClass#innerMethod(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#InnerClass#apply(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#InnerClass#apply(). @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# // ⌄ enclosing_range_start local 3 public Integer apply(Integer integer) { -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^ definition semanticdb maven . . minimized/InnerClasses#InnerClass#apply(). +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^ definition scip-java maven . . minimized/InnerClasses#InnerClass#apply(). // display_name apply // signature_documentation java @Override\npublic Integer apply(Integer integer) // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# +// relationship is_reference is_implementation scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# // ^^^^^^^ definition local 3 // display_name integer // signature_documentation java Integer integer -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#InnerClass#apply(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#InnerClass#apply(). +// kind Parameter // ⌃ enclosing_range_end local 3 return field * integer; -// ^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass#field. +// ^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass#field. // ^^^^^^^ reference local 3 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerClass#apply(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerClass#apply(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#InnerClass# +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#InnerClass# -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#runInnerInterface().[A] -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#runInnerInterface().[B] -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#runInnerInterface(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#runInnerInterface(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#runInnerInterface().[A] +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#runInnerInterface().[B] // ⌄ enclosing_range_start local 4 // ⌄ enclosing_range_start local 5 private static B runInnerInterface(InnerInterface fn, A a) { -// ^ definition semanticdb maven . . minimized/InnerClasses#runInnerInterface().[A] +// ^ definition scip-java maven . . minimized/InnerClasses#runInnerInterface().[A] // display_name A // signature_documentation java A // kind TypeParameter -// ^ definition semanticdb maven . . minimized/InnerClasses#runInnerInterface().[B] +// ^ definition scip-java maven . . minimized/InnerClasses#runInnerInterface().[B] // display_name B // signature_documentation java B // kind TypeParameter -// ^ reference semanticdb maven . . minimized/InnerClasses#runInnerInterface().[B] -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#runInnerInterface(). +// ^ reference scip-java maven . . minimized/InnerClasses#runInnerInterface().[B] +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#runInnerInterface(). // display_name runInnerInterface // signature_documentation java private static B runInnerInterface(InnerInterface fn, A a) // kind StaticMethod -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ^ reference semanticdb maven . . minimized/InnerClasses#runInnerInterface().[A] -// ^ reference semanticdb maven . . minimized/InnerClasses#runInnerInterface().[B] +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface# +// ^ reference scip-java maven . . minimized/InnerClasses#runInnerInterface().[A] +// ^ reference scip-java maven . . minimized/InnerClasses#runInnerInterface().[B] // ^^ definition local 4 // display_name fn // signature_documentation java InnerInterface fn -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#runInnerInterface(). -// ^ reference semanticdb maven . . minimized/InnerClasses#runInnerInterface().[A] +// enclosing_symbol scip-java maven . . minimized/InnerClasses#runInnerInterface(). +// kind Parameter +// ^ reference scip-java maven . . minimized/InnerClasses#runInnerInterface().[A] // ^ definition local 5 // display_name a // signature_documentation java A a -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#runInnerInterface(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#runInnerInterface(). +// kind Parameter // ⌃ enclosing_range_end local 4 // ⌃ enclosing_range_end local 5 return fn.apply(a); // ^^ reference local 4 -// ^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// ^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). // ^ reference local 5 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#runInnerInterface().[A] -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#runInnerInterface().[B] -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#runInnerInterface(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#runInnerInterface(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#runInnerInterface().[A] +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#runInnerInterface().[B] -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#testEnum(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#testEnum(). // ⌄ enclosing_range_start local 6 public static void testEnum(InnerEnum magicEnum) { -// ^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#testEnum(). +// ^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#testEnum(). // display_name testEnum // signature_documentation java public static void testEnum(InnerEnum magicEnum) // kind StaticMethod -// ^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum# +// ^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerEnum# // ^^^^^^^^^ definition local 6 // display_name magicEnum // signature_documentation java InnerEnum magicEnum -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#testEnum(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#testEnum(). +// kind Parameter // ⌃ enclosing_range_end local 6 if (System.nanoTime() > System.currentTimeMillis()) { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/System#nanoTime(). -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/System#currentTimeMillis(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/System#nanoTime(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/System#currentTimeMillis(). magicEnum = InnerEnum.B; // ^^^^^^^^^ reference local 6 -// ^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum# -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#B. +// ^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerEnum# +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#B. } switch (magicEnum) { // ^^^^^^^^^ reference local 6 case B: -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#B. +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#B. System.out.println("b"); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). break; case A: -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#A. +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#A. System.out.println("a"); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). break; default: break; } if (magicEnum == InnerEnum.A) System.out.println("a"); // ^^^^^^^^^ reference local 6 -// ^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum# -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#A. -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerEnum# +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#A. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). else if (magicEnum == InnerEnum.C) System.out.println("b"); // ^^^^^^^^^ reference local 6 -// ^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum# -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#C. -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerEnum# +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#C. +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). else System.out.println("c"); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#testEnum(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#testEnum(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#testAnon(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#testAnon(). public static void testAnon() { -// ^^^^^^^^ definition semanticdb maven . . minimized/InnerClasses#testAnon(). +// ^^^^^^^^ definition scip-java maven . . minimized/InnerClasses#testAnon(). // display_name testAnon // signature_documentation java public static void testAnon() // kind StaticMethod // ⌄ enclosing_range_start local 7 InnerInterface fn = -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^ definition local 7 // display_name fn // signature_documentation java InnerInterface fn -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#testAnon(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#testAnon(). // kind Variable new InnerInterface() { -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ⌄ enclosing_range_start local 9 @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# // ⌄ enclosing_range_start local 10 public String apply(String s) { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^ definition local 9 // display_name apply // signature_documentation java @Override\npublic String apply(String s) // enclosing_symbol local 8 // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// relationship is_reference is_implementation scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 10 // display_name s // signature_documentation java String s // enclosing_symbol local 9 +// kind Parameter // ⌃ enclosing_range_end local 10 return s + "b"; // ^ reference local 10 @@ -402,18 +413,18 @@ public String apply(String s) { }; // ⌃ enclosing_range_end local 7 System.out.println(fn.apply("a")); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). // ^^ reference local 7 -// ^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerInterface#apply(). +// ^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerInterface#apply(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#testAnon(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#testAnon(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/InnerClasses#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/InnerClasses#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/InnerClasses#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/InnerClasses#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod @@ -422,53 +433,53 @@ public static String app() { // ^ definition local 11 // display_name a // signature_documentation java int a -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#app(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#app(). // kind Variable // ⌃ enclosing_range_end local 11 InnerStaticClass.innerStaticMethod(); -// ^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerStaticClass# -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). +// ^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerStaticClass# +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerStaticClass#innerStaticMethod(). // ⌄ enclosing_range_start local 12 InnerClasses innerClasses = new InnerClasses(a); -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses# +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses# // ^^^^^^^^^^^^ definition local 12 // display_name innerClasses // signature_documentation java InnerClasses innerClasses -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#app(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#app(). // kind Variable -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#``(). +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#``(). // ^ reference local 11 // ⌃ enclosing_range_end local 12 // ⌄ enclosing_range_start local 13 InnerClass innerClass = innerClasses.new InnerClass(a); -// ^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass# +// ^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass# // ^^^^^^^^^^ definition local 13 // display_name innerClass // signature_documentation java InnerClass innerClass -// enclosing_symbol semanticdb maven . . minimized/InnerClasses#app(). +// enclosing_symbol scip-java maven . . minimized/InnerClasses#app(). // kind Variable // ^^^^^^^^^^^^ reference local 12 -// ^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass#``(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass#``(). // ^ reference local 11 // ⌃ enclosing_range_end local 13 innerClass.innerMethod(); // ^^^^^^^^^^ reference local 13 -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerClass#innerMethod(). +// ^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerClass#innerMethod(). System.out.println(runInnerInterface(innerClass, a)); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9). -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#runInnerInterface(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+9). +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#runInnerInterface(). // ^^^^^^^^^^ reference local 13 // ^ reference local 11 testEnum(InnerEnum.A); -// ^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#testEnum(). -// ^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum# -// ^ reference semanticdb maven . . minimized/InnerClasses#InnerEnum#A. +// ^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#testEnum(). +// ^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#InnerEnum# +// ^ reference scip-java maven . . minimized/InnerClasses#InnerEnum#A. testAnon(); -// ^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses#testAnon(). +// ^^^^^^^^ reference scip-java maven . . minimized/InnerClasses#testAnon(). return ""; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/InnerClasses# +//⌃ enclosing_range_end scip-java maven . . minimized/InnerClasses# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Interfaces.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Interfaces.java index 544af797d..a4ade2095 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Interfaces.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Interfaces.java @@ -1,83 +1,83 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Interfaces# +//⌄ enclosing_range_start scip-java maven . . minimized/Interfaces# public interface Interfaces { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/Interfaces# +// ^^^^^^^^^^ definition scip-java maven . . minimized/Interfaces# // display_name Interfaces -// signature_documentation java public interface Interfaces +// signature_documentation java public abstract interface Interfaces // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/Interfaces#staticInterfaceMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Interfaces#staticInterfaceMethod(). static void staticInterfaceMethod() {} -// ^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Interfaces#staticInterfaceMethod(). +// ^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Interfaces#staticInterfaceMethod(). // display_name staticInterfaceMethod // signature_documentation java public static void staticInterfaceMethod() // kind StaticMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Interfaces#staticInterfaceMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Interfaces#staticInterfaceMethod(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Interfaces#abstractInterfaceMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Interfaces#abstractInterfaceMethod(). String abstractInterfaceMethod(); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Interfaces#abstractInterfaceMethod(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Interfaces#abstractInterfaceMethod(). // display_name abstractInterfaceMethod // signature_documentation java public abstract String abstractInterfaceMethod() // kind AbstractMethod -// relationship is_reference is_implementation semanticdb maven . . minimized/SubClasses#abstractInterfaceMethod(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Interfaces#abstractInterfaceMethod(). +// relationship is_reference is_implementation scip-java maven . . minimized/SubClasses#abstractInterfaceMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Interfaces#abstractInterfaceMethod(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Interfaces#defaultInterfaceMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Interfaces#defaultInterfaceMethod(). default String defaultInterfaceMethod() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Interfaces#defaultInterfaceMethod(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Interfaces#defaultInterfaceMethod(). // display_name defaultInterfaceMethod // signature_documentation java public default String defaultInterfaceMethod() // kind Method return "default"; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Interfaces#defaultInterfaceMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Interfaces#defaultInterfaceMethod(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Interfaces# +//⌃ enclosing_range_end scip-java maven . . minimized/Interfaces# -//⌄ enclosing_range_start semanticdb maven . . minimized/BookService# +//⌄ enclosing_range_start scip-java maven . . minimized/BookService# interface BookService { -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/BookService# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/BookService# // display_name BookService -// signature_documentation java interface BookService +// signature_documentation java abstract interface BookService // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/BookService#checkPages(). +// ⌄ enclosing_range_start scip-java maven . . minimized/BookService#checkPages(). void checkPages(); -// ^^^^^^^^^^ definition semanticdb maven . . minimized/BookService#checkPages(). +// ^^^^^^^^^^ definition scip-java maven . . minimized/BookService#checkPages(). // display_name checkPages // signature_documentation java public abstract void checkPages() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/BookService#checkPages(). +// ⌃ enclosing_range_end scip-java maven . . minimized/BookService#checkPages(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/BookService# +//⌃ enclosing_range_end scip-java maven . . minimized/BookService# -//⌄ enclosing_range_start semanticdb maven . . minimized/MyService# +//⌄ enclosing_range_start scip-java maven . . minimized/MyService# interface MyService { -// ^^^^^^^^^ definition semanticdb maven . . minimized/MyService# +// ^^^^^^^^^ definition scip-java maven . . minimized/MyService# // display_name MyService -// signature_documentation java interface MyService +// signature_documentation java abstract interface MyService // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/MyService#bookService(). +// ⌄ enclosing_range_start scip-java maven . . minimized/MyService#bookService(). BookService bookService(); -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/BookService# -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/MyService#bookService(). +// ^^^^^^^^^^^ reference scip-java maven . . minimized/BookService# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/MyService#bookService(). // display_name bookService // signature_documentation java public abstract BookService bookService() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/MyService#bookService(). +// ⌃ enclosing_range_end scip-java maven . . minimized/MyService#bookService(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/MyService#example(). +// ⌄ enclosing_range_start scip-java maven . . minimized/MyService#example(). default void example() { -// ^^^^^^^ definition semanticdb maven . . minimized/MyService#example(). +// ^^^^^^^ definition scip-java maven . . minimized/MyService#example(). // display_name example // signature_documentation java public default void example() // kind Method bookService().checkPages(); -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/MyService#bookService(). -// ^^^^^^^^^^ reference semanticdb maven . . minimized/BookService#checkPages(). +// ^^^^^^^^^^^ reference scip-java maven . . minimized/MyService#bookService(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/BookService#checkPages(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/MyService#example(). +// ⌃ enclosing_range_end scip-java maven . . minimized/MyService#example(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/MyService# +//⌃ enclosing_range_end scip-java maven . . minimized/MyService# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/LombokBuilder.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/LombokBuilder.java index 20e09be4a..37279344a 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/LombokBuilder.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/LombokBuilder.java @@ -1,131 +1,99 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder#build(). -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#builder(). -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder#toString(). -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder# -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder#``(). -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello# -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#``(). +//⌄ enclosing_range_start scip-java maven . . minimized/Hello# +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#``(). //⌄ enclosing_range_start local 0 -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder#message. -//⌄ enclosing_range_start semanticdb maven . . minimized/Hello#HelloBuilder#message(). +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder# +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder#message. +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder#``(). +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder#message(). //⌄ enclosing_range_start local 1 +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder#build(). +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#HelloBuilder#toString(). +//⌄ enclosing_range_start scip-java maven . . minimized/Hello#builder(). @lombok.Builder //^^^^^^^^^^^^^^^ reference local 0 //^^^^^^^^^^^^^^^ reference local 1 -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . java/lang/ -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello# -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello# -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello# -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#HelloBuilder# -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#HelloBuilder# -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#HelloBuilder#message. -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#HelloBuilder#message. -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#HelloBuilder#message. -//^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Hello#message. -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#value(). -//^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#value(). -// ^^^^^ reference semanticdb maven . . lombok/ -// ^^^^^^^ reference semanticdb maven . . lombok/Builder# -// definition semanticdb maven . . minimized/Hello#HelloBuilder#build(). 1:4 +//^^^^^^^^^^^^^^^ reference scip-java maven . . java/ +//^^^^^^^^^^^^^^^ reference scip-java maven . . java/lang/ +//^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Hello# +//^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Hello#HelloBuilder# +//^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Hello#HelloBuilder#message. +//^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Hello#message. +//^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# +//^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/String# +//^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# +//^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings#value(). +// ^^^^^ reference scip-java maven . . lombok/ +// ^^^^^^^ reference scip-java maven . . lombok/Builder# +// definition scip-java maven . . minimized/Hello#HelloBuilder#build(). 1:4 // display_name build -// signature_documentation java @SuppressWarnings("all")\npublic Hello build() +// signature_documentation java @SuppressWarnings\npublic Hello build() // kind Method -// definition semanticdb maven . . minimized/Hello#builder(). 1:6 +// definition scip-java maven . . minimized/Hello#builder(). 1:6 // display_name builder -// signature_documentation java @SuppressWarnings("all")\npublic static HelloBuilder builder() +// signature_documentation java @SuppressWarnings\npublic static HelloBuilder builder() // kind StaticMethod -// definition semanticdb maven . . minimized/Hello#HelloBuilder#toString(). 1:7 +// definition scip-java maven . . minimized/Hello#HelloBuilder#toString(). 1:7 // display_name toString -// signature_documentation java @Override\n@SuppressWarnings("all")\npublic String toString() +// signature_documentation java @Override\n@SuppressWarnings\npublic String toString() // kind Method -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/Object#toString(). -// definition semanticdb maven . . minimized/Hello#HelloBuilder# 1:11 +// relationship is_reference is_implementation scip-java maven jdk 11 java/lang/Object#toString(). +// definition scip-java maven . . minimized/Hello#HelloBuilder# 1:11 // display_name HelloBuilder -// signature_documentation java @SuppressWarnings("all")\npublic static class HelloBuilder +// signature_documentation java @SuppressWarnings\npublic static class HelloBuilder // kind Class -// definition semanticdb maven . . minimized/Hello#HelloBuilder#``(). 1:11 +// definition scip-java maven . . minimized/Hello#HelloBuilder#``(). 1:11 // display_name -// signature_documentation java @SuppressWarnings("all")\nHelloBuilder() +// signature_documentation java @SuppressWarnings\nHelloBuilder() // kind Constructor -// reference semanticdb maven . . minimized/Hello#HelloBuilder#``(). 1:11 -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder#build(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#builder(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder#toString(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder# -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder#``(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#``(). +// reference scip-java maven . . minimized/Hello#HelloBuilder#``(). 1:11 +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#``(). // ⌃ enclosing_range_end local 0 -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder#message. -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#HelloBuilder#message(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder# +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder#message. +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder#message(). // ⌃ enclosing_range_end local 1 +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder#build(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#HelloBuilder#toString(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#builder(). class Hello { -// ^^^^^ definition semanticdb maven . . minimized/Hello# +// ^^^^^ definition scip-java maven . . minimized/Hello# // display_name Hello // signature_documentation java @Builder\nclass Hello // kind Class -// ^^^^^ definition semanticdb maven . . minimized/Hello#``(). +// ^^^^^ definition scip-java maven . . minimized/Hello#``(). // display_name -// signature_documentation java @SuppressWarnings("all")\nHello(String message) +// signature_documentation java @SuppressWarnings\nHello(String message) // kind Constructor -// ^^^^^ reference semanticdb maven . . minimized/Hello#``(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Hello#message. +// ^^^^^ reference scip-java maven . . minimized/Hello#``(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Hello#message. private String message; -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^^^ definition local 0 // display_name message // signature_documentation java final String message -// enclosing_symbol semanticdb maven . . minimized/Hello#``(). +// enclosing_symbol scip-java maven . . minimized/Hello#``(). +// kind Parameter // ^^^^^^^ definition local 1 // display_name message // signature_documentation java final String message -// enclosing_symbol semanticdb maven . . minimized/Hello#HelloBuilder#message(). -// ^^^^^^^ definition semanticdb maven . . minimized/Hello#HelloBuilder#message(). +// enclosing_symbol scip-java maven . . minimized/Hello#HelloBuilder#message(). +// kind Parameter +// ^^^^^^^ definition scip-java maven . . minimized/Hello#HelloBuilder#message(). // display_name message -// signature_documentation java @SuppressWarnings("all")\npublic HelloBuilder message(String message) +// signature_documentation java @SuppressWarnings\npublic HelloBuilder message(String message) // kind Method // documentation @return {@code this}. -// ^^^^^^^ definition semanticdb maven . . minimized/Hello#HelloBuilder#message. +// ^^^^^^^ definition scip-java maven . . minimized/Hello#HelloBuilder#message. // display_name message -// signature_documentation java @SuppressWarnings("all")\nprivate String message +// signature_documentation java @SuppressWarnings\nprivate String message // kind Field -// ^^^^^^^ definition semanticdb maven . . minimized/Hello#message. +// ^^^^^^^ definition scip-java maven . . minimized/Hello#message. // display_name message // signature_documentation java private String message // kind Field -// ⌃ enclosing_range_end semanticdb maven . . minimized/Hello#message. +// ⌃ enclosing_range_end scip-java maven . . minimized/Hello#message. } -//⌃ enclosing_range_end semanticdb maven . . minimized/Hello# +//⌃ enclosing_range_end scip-java maven . . minimized/Hello# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Methods.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Methods.java index a7c2528aa..ec5bfefaf 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Methods.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Methods.java @@ -1,138 +1,144 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/Methods# +//⌄ enclosing_range_start scip-java maven . . minimized/Methods# public class Methods { -// ^^^^^^^ definition semanticdb maven . . minimized/Methods# +// ^^^^^^^ definition scip-java maven . . minimized/Methods# // display_name Methods // signature_documentation java public class Methods // kind Class -// ^^^^^^^ definition semanticdb maven . . minimized/Methods#``(). +// ^^^^^^^ definition scip-java maven . . minimized/Methods#``(). // display_name // signature_documentation java public Methods() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Methods#overload(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Methods#overload(). // ⌄ enclosing_range_start local 0 private int overload(int value) { -// ^^^^^^^^ definition semanticdb maven . . minimized/Methods#overload(). +// ^^^^^^^^ definition scip-java maven . . minimized/Methods#overload(). // display_name overload // signature_documentation java private int overload(int value) // kind Method // ^^^^^ definition local 0 // display_name value // signature_documentation java int value -// enclosing_symbol semanticdb maven . . minimized/Methods#overload(). +// enclosing_symbol scip-java maven . . minimized/Methods#overload(). +// kind Parameter // ⌃ enclosing_range_end local 0 return value + 1; // ^^^^^ reference local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Methods#overload(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Methods#overload(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Methods#overload(+1). +// ⌄ enclosing_range_start scip-java maven . . minimized/Methods#overload(+1). // ⌄ enclosing_range_start local 1 private String overload(String value) { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^ definition semanticdb maven . . minimized/Methods#overload(+1). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^ definition scip-java maven . . minimized/Methods#overload(+1). // display_name overload // signature_documentation java private String overload(String value) // kind Method -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^ definition local 1 // display_name value // signature_documentation java String value -// enclosing_symbol semanticdb maven . . minimized/Methods#overload(+1). +// enclosing_symbol scip-java maven . . minimized/Methods#overload(+1). +// kind Parameter // ⌃ enclosing_range_end local 1 return value + "1"; // ^^^^^ reference local 1 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Methods#overload(+1). +// ⌃ enclosing_range_end scip-java maven . . minimized/Methods#overload(+1). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Methods#staticOverload(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Methods#staticOverload(). // ⌄ enclosing_range_start local 2 private static int staticOverload(int value) { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Methods#staticOverload(). +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Methods#staticOverload(). // display_name staticOverload // signature_documentation java private static int staticOverload(int value) // kind StaticMethod // ^^^^^ definition local 2 // display_name value // signature_documentation java int value -// enclosing_symbol semanticdb maven . . minimized/Methods#staticOverload(). +// enclosing_symbol scip-java maven . . minimized/Methods#staticOverload(). +// kind Parameter // ⌃ enclosing_range_end local 2 return value + 1; // ^^^^^ reference local 2 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Methods#staticOverload(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Methods#staticOverload(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Methods#staticOverload(+1). +// ⌄ enclosing_range_start scip-java maven . . minimized/Methods#staticOverload(+1). // ⌄ enclosing_range_start local 3 private static String staticOverload(String value) { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/Methods#staticOverload(+1). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/Methods#staticOverload(+1). // display_name staticOverload // signature_documentation java private static String staticOverload(String value) // kind StaticMethod -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^ definition local 3 // display_name value // signature_documentation java String value -// enclosing_symbol semanticdb maven . . minimized/Methods#staticOverload(+1). +// enclosing_symbol scip-java maven . . minimized/Methods#staticOverload(+1). +// kind Parameter // ⌃ enclosing_range_end local 3 return value + "1"; // ^^^^^ reference local 3 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Methods#staticOverload(+1). +// ⌃ enclosing_range_end scip-java maven . . minimized/Methods#staticOverload(+1). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Methods#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Methods#app(). // ⌄ enclosing_range_start local 4 // ⌄ enclosing_range_start local 5 public static String app(int n, String m) throws RuntimeException, IndexOutOfBoundsException { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Methods#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Methods#app(). // display_name app // signature_documentation java public static String app(int n, String m) throws RuntimeException, IndexOutOfBoundsException // kind StaticMethod // ^ definition local 4 // display_name n // signature_documentation java int n -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// enclosing_symbol scip-java maven . . minimized/Methods#app(). +// kind Parameter +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 5 // display_name m // signature_documentation java String m -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/RuntimeException# -// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/IndexOutOfBoundsException# +// enclosing_symbol scip-java maven . . minimized/Methods#app(). +// kind Parameter +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/RuntimeException# +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/IndexOutOfBoundsException# // ⌃ enclosing_range_end local 4 // ⌃ enclosing_range_end local 5 // ⌄ enclosing_range_start local 6 Methods methods = new Methods(); -// ^^^^^^^ reference semanticdb maven . . minimized/Methods# +// ^^^^^^^ reference scip-java maven . . minimized/Methods# // ^^^^^^^ definition local 6 // display_name methods // signature_documentation java Methods methods -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). +// enclosing_symbol scip-java maven . . minimized/Methods#app(). // kind Variable -// ^^^^^^^ reference semanticdb maven . . minimized/Methods#``(). +// ^^^^^^^ reference scip-java maven . . minimized/Methods#``(). // ⌃ enclosing_range_end local 6 // ⌄ enclosing_range_start local 7 int a = staticOverload(n); // ^ definition local 7 // display_name a // signature_documentation java int a -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). +// enclosing_symbol scip-java maven . . minimized/Methods#app(). // kind Variable -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Methods#staticOverload(). +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Methods#staticOverload(). // ^ reference local 4 // ⌃ enclosing_range_end local 7 // ⌄ enclosing_range_start local 8 String b = staticOverload(m); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 8 // display_name b // signature_documentation java String b -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). +// enclosing_symbol scip-java maven . . minimized/Methods#app(). // kind Variable -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Methods#staticOverload(+1). +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Methods#staticOverload(+1). // ^ reference local 5 // ⌃ enclosing_range_end local 8 // ⌄ enclosing_range_start local 9 @@ -140,22 +146,22 @@ public static String app(int n, String m) throws RuntimeException, IndexOutOfBou // ^ definition local 9 // display_name c // signature_documentation java int c -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). +// enclosing_symbol scip-java maven . . minimized/Methods#app(). // kind Variable // ^^^^^^^ reference local 6 -// ^^^^^^^^ reference semanticdb maven . . minimized/Methods#overload(). +// ^^^^^^^^ reference scip-java maven . . minimized/Methods#overload(). // ^ reference local 4 // ⌃ enclosing_range_end local 9 // ⌄ enclosing_range_start local 10 String d = methods.overload(m); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 10 // display_name d // signature_documentation java String d -// enclosing_symbol semanticdb maven . . minimized/Methods#app(). +// enclosing_symbol scip-java maven . . minimized/Methods#app(). // kind Variable // ^^^^^^^ reference local 6 -// ^^^^^^^^ reference semanticdb maven . . minimized/Methods#overload(+1). +// ^^^^^^^^ reference scip-java maven . . minimized/Methods#overload(+1). // ^ reference local 5 // ⌃ enclosing_range_end local 10 return b + a + c + d; @@ -164,6 +170,6 @@ public static String app(int n, String m) throws RuntimeException, IndexOutOfBou // ^ reference local 9 // ^ reference local 10 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Methods#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Methods#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Methods# +//⌃ enclosing_range_end scip-java maven . . minimized/Methods# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/MinimizedJavaMain.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/MinimizedJavaMain.java index c6d47949f..bcb98b329 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/MinimizedJavaMain.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/MinimizedJavaMain.java @@ -1,81 +1,82 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/MinimizedJavaMain# +//⌄ enclosing_range_start scip-java maven . . minimized/MinimizedJavaMain# @Annotations(value = "value", format = "format") -// ^^^^^^^^^^ reference semanticdb maven . . minimized/Annotations# -// ^^^^^ reference semanticdb maven . . minimized/Annotations#value(). -// ^^^^^^ reference semanticdb maven . . minimized/Annotations#format(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/Annotations# +// ^^^^^ reference scip-java maven . . minimized/Annotations#value(). +// ^^^^^^ reference scip-java maven . . minimized/Annotations#format(). public class MinimizedJavaMain { -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/MinimizedJavaMain# +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/MinimizedJavaMain# // display_name MinimizedJavaMain -// signature_documentation java @Annotations(value = "value", format = "format")\npublic class MinimizedJavaMain +// signature_documentation java @Annotations\npublic class MinimizedJavaMain // kind Class -// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/MinimizedJavaMain#``(). +// ^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/MinimizedJavaMain#``(). // display_name // signature_documentation java public MinimizedJavaMain() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/MinimizedJavaMain#main(). +// ⌄ enclosing_range_start scip-java maven . . minimized/MinimizedJavaMain#main(). // ⌄ enclosing_range_start local 0 public static void main(String[] args) { -// ^^^^ definition semanticdb maven . . minimized/MinimizedJavaMain#main(). +// ^^^^ definition scip-java maven . . minimized/MinimizedJavaMain#main(). // display_name main // signature_documentation java public static void main(String[] args) // kind StaticMethod -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^ definition local 0 // display_name args // signature_documentation java String[] args -// enclosing_symbol semanticdb maven . . minimized/MinimizedJavaMain#main(). +// enclosing_symbol scip-java maven . . minimized/MinimizedJavaMain#main(). +// kind Parameter // ⌃ enclosing_range_end local 0 TypeVariables.app(new TypeVariables.CT()); -// ^^^^^^^^^^^^^ reference semanticdb maven . . minimized/TypeVariables# -// ^^^ reference semanticdb maven . . minimized/TypeVariables#app(). -// ^^^^^^^^^^^^^ reference semanticdb maven . . minimized/TypeVariables# -// ^^ reference semanticdb maven . . minimized/TypeVariables#CT#``(). +// ^^^^^^^^^^^^^ reference scip-java maven . . minimized/TypeVariables# +// ^^^ reference scip-java maven . . minimized/TypeVariables#app(). +// ^^^^^^^^^^^^^ reference scip-java maven . . minimized/TypeVariables# +// ^^ reference scip-java maven . . minimized/TypeVariables#CT#``(). System.out.println( -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^ reference semanticdb maven jdk 11 java/lang/System#out. -// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+8). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^ reference scip-java maven jdk 11 java/lang/System#out. +// ^^^^^^^ reference scip-java maven jdk 11 java/io/PrintStream#println(+8). Methods.app(42, "42") -// ^^^^^^^ reference semanticdb maven . . minimized/Methods# -// ^^^ reference semanticdb maven . . minimized/Methods#app(). +// ^^^^^^^ reference scip-java maven . . minimized/Methods# +// ^^^ reference scip-java maven . . minimized/Methods#app(). + Enums.app() -// ^^^^^ reference semanticdb maven . . minimized/Enums# -// ^^^ reference semanticdb maven . . minimized/Enums#app(). +// ^^^^^ reference scip-java maven . . minimized/Enums# +// ^^^ reference scip-java maven . . minimized/Enums#app(). + Docstrings.app() -// ^^^^^^^^^^ reference semanticdb maven . . minimized/Docstrings# -// ^^^ reference semanticdb maven . . minimized/Docstrings#app(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/Docstrings# +// ^^^ reference scip-java maven . . minimized/Docstrings#app(). + InnerClasses.app() -// ^^^^^^^^^^^^ reference semanticdb maven . . minimized/InnerClasses# -// ^^^ reference semanticdb maven . . minimized/InnerClasses#app(). +// ^^^^^^^^^^^^ reference scip-java maven . . minimized/InnerClasses# +// ^^^ reference scip-java maven . . minimized/InnerClasses#app(). + ForComprehensions.app(42) -// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/ForComprehensions# -// ^^^ reference semanticdb maven . . minimized/ForComprehensions#app(). +// ^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/ForComprehensions# +// ^^^ reference scip-java maven . . minimized/ForComprehensions#app(). + AnonymousClasses.app(42) -// ^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnonymousClasses# -// ^^^ reference semanticdb maven . . minimized/AnonymousClasses#app(). +// ^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AnonymousClasses# +// ^^^ reference scip-java maven . . minimized/AnonymousClasses#app(). + Primitives.app() -// ^^^^^^^^^^ reference semanticdb maven . . minimized/Primitives# -// ^^^ reference semanticdb maven . . minimized/Primitives#app(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/Primitives# +// ^^^ reference scip-java maven . . minimized/Primitives#app(). + new ParameterizedTypes().app(42, "42") -// ^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/ParameterizedTypes#``(). -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ reference semanticdb maven . . minimized/ParameterizedTypes#app(). +// ^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/ParameterizedTypes#``(). +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ reference scip-java maven . . minimized/ParameterizedTypes#app(). + RawTypes.x.toString() -// ^^^^^^^^ reference semanticdb maven . . minimized/RawTypes# -// ^ reference semanticdb maven . . minimized/RawTypes#x. -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Object#toString(). +// ^^^^^^^^ reference scip-java maven . . minimized/RawTypes# +// ^ reference scip-java maven . . minimized/RawTypes#x. +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Object#toString(). + ClassOf.app() -// ^^^^^^^ reference semanticdb maven . . minimized/ClassOf# -// ^^^ reference semanticdb maven . . minimized/ClassOf#app(). +// ^^^^^^^ reference scip-java maven . . minimized/ClassOf# +// ^^^ reference scip-java maven . . minimized/ClassOf#app(). + SubClasses.app() -// ^^^^^^^^^^ reference semanticdb maven . . minimized/SubClasses# -// ^^^ reference semanticdb maven . . minimized/SubClasses#app(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/SubClasses# +// ^^^ reference scip-java maven . . minimized/SubClasses#app(). + Fields.app()); -// ^^^^^^ reference semanticdb maven . . minimized/Fields# -// ^^^ reference semanticdb maven . . minimized/Fields#app(). +// ^^^^^^ reference scip-java maven . . minimized/Fields# +// ^^^ reference scip-java maven . . minimized/Fields#app(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/MinimizedJavaMain#main(). +// ⌃ enclosing_range_end scip-java maven . . minimized/MinimizedJavaMain#main(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/MinimizedJavaMain# +//⌃ enclosing_range_end scip-java maven . . minimized/MinimizedJavaMain# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ParameterizedTypes.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ParameterizedTypes.java index 1dbe55c0d..27a2254cc 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ParameterizedTypes.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/ParameterizedTypes.java @@ -1,155 +1,158 @@ package minimized; import java.util.HashMap; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/HashMap# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^ reference scip-java maven jdk 11 java/util/HashMap# import java.util.Iterator; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/Iterator# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/Iterator# import java.util.List; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^ reference semanticdb maven jdk 11 java/util/List# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^ reference scip-java maven jdk 11 java/util/List# import java.util.Map; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^ reference semanticdb maven jdk 11 java/util/Map# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^ reference scip-java maven jdk 11 java/util/Map# -//⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes# -//⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#[A] -//⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#[B] +//⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes# +//⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#[A] +//⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#[B] public class ParameterizedTypes { -// ^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes# +// ^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes# // display_name ParameterizedTypes // signature_documentation java public class ParameterizedTypes // kind Class -// ^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#``(). +// ^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#``(). // display_name // signature_documentation java public ParameterizedTypes() // kind Constructor -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#[A] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#[A] // display_name A // signature_documentation java A // kind TypeParameter -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#[B] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#[B] // display_name B // signature_documentation java B extends String // kind TypeParameter -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#iteratorable().[T] -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#iteratorable(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#iteratorable(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#iteratorable().[T] // ⌄ enclosing_range_start local 0 public & Iterator> void iteratorable(List list) {} -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#iteratorable().[T] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#iteratorable().[T] // display_name T // signature_documentation java T extends Iterable & Iterator // kind TypeParameter -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Iterable# -// ^ reference semanticdb maven . . minimized/ParameterizedTypes#[A] -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/Iterator# -// ^ reference semanticdb maven . . minimized/ParameterizedTypes#[B] -// ^^^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#iteratorable(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Iterable# +// ^ reference scip-java maven . . minimized/ParameterizedTypes#[A] +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/Iterator# +// ^ reference scip-java maven . . minimized/ParameterizedTypes#[B] +// ^^^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#iteratorable(). // display_name iteratorable // signature_documentation java public & Iterator> void iteratorable(List list) // kind Method -// ^^^^ reference semanticdb maven jdk 11 java/util/List# -// ^ reference semanticdb maven . . minimized/ParameterizedTypes#iteratorable().[T] +// ^^^^ reference scip-java maven jdk 11 java/util/List# +// ^ reference scip-java maven . . minimized/ParameterizedTypes#iteratorable().[T] // ^^^^ definition local 0 // display_name list // signature_documentation java List list -// enclosing_symbol semanticdb maven . . minimized/ParameterizedTypes#iteratorable(). +// enclosing_symbol scip-java maven . . minimized/ParameterizedTypes#iteratorable(). +// kind Parameter // ⌃ enclosing_range_end local 0 -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#iteratorable().[T] -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#iteratorable(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#iteratorable(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#iteratorable().[T] -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#app(). // ⌄ enclosing_range_start local 1 // ⌄ enclosing_range_start local 2 public String app(A a, B b) { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/ParameterizedTypes#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/ParameterizedTypes#app(). // display_name app // signature_documentation java public String app(A a, B b) // kind Method -// ^ reference semanticdb maven . . minimized/ParameterizedTypes#[A] +// ^ reference scip-java maven . . minimized/ParameterizedTypes#[A] // ^ definition local 1 // display_name a // signature_documentation java A a -// enclosing_symbol semanticdb maven . . minimized/ParameterizedTypes#app(). -// ^ reference semanticdb maven . . minimized/ParameterizedTypes#[B] +// enclosing_symbol scip-java maven . . minimized/ParameterizedTypes#app(). +// kind Parameter +// ^ reference scip-java maven . . minimized/ParameterizedTypes#[B] // ^ definition local 2 // display_name b // signature_documentation java B b -// enclosing_symbol semanticdb maven . . minimized/ParameterizedTypes#app(). +// enclosing_symbol scip-java maven . . minimized/ParameterizedTypes#app(). +// kind Parameter // ⌃ enclosing_range_end local 1 // ⌃ enclosing_range_end local 2 return a.toString() + b; // ^ reference local 1 -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Object#toString(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Object#toString(). // ^ reference local 2 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#app(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#doStuff(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#doStuff(). public Map doStuff() { return null; } -// ^^^ reference semanticdb maven jdk 11 java/util/Map# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#doStuff(). +// ^^^ reference scip-java maven jdk 11 java/util/Map# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#doStuff(). // display_name doStuff // signature_documentation java public Map doStuff() // kind Method -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#doStuff(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#doStuff(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#createQuadruplet(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#createQuadruplet(). public Quadruplet createQuadruplet() { return null; } -// ^^^^^^^^^^ reference semanticdb maven . . minimized/ParameterizedTypes#Quadruplet# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/Object# -// ^^^^^^^ reference semanticdb maven jdk 11 java/lang/Integer# -// ^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#createQuadruplet(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/ParameterizedTypes#Quadruplet# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/Object# +// ^^^^^^^ reference scip-java maven jdk 11 java/lang/Integer# +// ^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#createQuadruplet(). // display_name createQuadruplet // signature_documentation java public Quadruplet createQuadruplet() // kind Method -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#createQuadruplet(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#createQuadruplet(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#Quadruplet# -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[T] -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[S] -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[X] -// ⌄ enclosing_range_start semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[Y] +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#Quadruplet# +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[T] +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[S] +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[X] +// ⌄ enclosing_range_start scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[Y] public static class Quadruplet {} -// ^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet# +// ^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet# // display_name Quadruplet // signature_documentation java public static class Quadruplet // kind Class -// ^^^^^^^^^^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#``(). +// ^^^^^^^^^^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet#``(). // display_name // signature_documentation java public Quadruplet() // kind Constructor -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[T] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[T] // display_name T // signature_documentation java T // kind TypeParameter -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[S] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[S] // display_name S // signature_documentation java S // kind TypeParameter -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[X] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[X] // display_name X // signature_documentation java X // kind TypeParameter -// ^ definition semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[Y] +// ^ definition scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[Y] // display_name Y // signature_documentation java Y // kind TypeParameter -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#Quadruplet# -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[T] -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[S] -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[X] -// ⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#Quadruplet#[Y] +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#Quadruplet# +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[T] +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[S] +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[X] +// ⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#Quadruplet#[Y] } -//⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes# -//⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#[A] -//⌃ enclosing_range_end semanticdb maven . . minimized/ParameterizedTypes#[B] +//⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes# +//⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#[A] +//⌃ enclosing_range_end scip-java maven . . minimized/ParameterizedTypes#[B] diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Primitives.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Primitives.java index d1fb9899f..83e5de549 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Primitives.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Primitives.java @@ -1,116 +1,116 @@ package minimized; import java.util.Random; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Random# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^ reference scip-java maven jdk 11 java/util/Random# -//⌄ enclosing_range_start semanticdb maven . . minimized/Primitives# +//⌄ enclosing_range_start scip-java maven . . minimized/Primitives# public class Primitives { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/Primitives# +// ^^^^^^^^^^ definition scip-java maven . . minimized/Primitives# // display_name Primitives // signature_documentation java public class Primitives // kind Class -// ^^^^^^^^^^ definition semanticdb maven . . minimized/Primitives#``(). +// ^^^^^^^^^^ definition scip-java maven . . minimized/Primitives#``(). // display_name // signature_documentation java public Primitives() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/Primitives#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Primitives#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/Primitives#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/Primitives#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod // ⌄ enclosing_range_start local 0 Random random = new Random(); -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Random# +// ^^^^^^ reference scip-java maven jdk 11 java/util/Random# // ^^^^^^ definition local 0 // display_name random // signature_documentation java Random random -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable -// ^^^^^^ reference semanticdb maven jdk 11 java/util/Random#``(). +// ^^^^^^ reference scip-java maven jdk 11 java/util/Random#``(). // ⌃ enclosing_range_end local 0 // ⌄ enclosing_range_start local 1 byte a = (byte) random.nextInt(); // ^ definition local 1 // display_name a // signature_documentation java byte a -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextInt(). +// ^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextInt(). // ⌃ enclosing_range_end local 1 // ⌄ enclosing_range_start local 2 short b = (short) random.nextInt(); // ^ definition local 2 // display_name b // signature_documentation java short b -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextInt(). +// ^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextInt(). // ⌃ enclosing_range_end local 2 // ⌄ enclosing_range_start local 3 int c = random.nextInt(); // ^ definition local 3 // display_name c // signature_documentation java int c -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextInt(). +// ^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextInt(). // ⌃ enclosing_range_end local 3 // ⌄ enclosing_range_start local 4 long d = random.nextLong(); // ^ definition local 4 // display_name d // signature_documentation java long d -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextLong(). +// ^^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextLong(). // ⌃ enclosing_range_end local 4 // ⌄ enclosing_range_start local 5 char e = (char) random.nextInt(); // ^ definition local 5 // display_name e // signature_documentation java char e -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextInt(). +// ^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextInt(). // ⌃ enclosing_range_end local 5 // ⌄ enclosing_range_start local 6 float f = (float) random.nextDouble(); // ^ definition local 6 // display_name f // signature_documentation java float f -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextDouble(). +// ^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextDouble(). // ⌃ enclosing_range_end local 6 // ⌄ enclosing_range_start local 7 double g = (double) random.nextDouble(); // ^ definition local 7 // display_name g // signature_documentation java double g -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextDouble(). +// ^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextDouble(). // ⌃ enclosing_range_end local 7 // ⌄ enclosing_range_start local 8 boolean h = random.nextBoolean(); // ^ definition local 8 // display_name h // signature_documentation java boolean h -// enclosing_symbol semanticdb maven . . minimized/Primitives#app(). +// enclosing_symbol scip-java maven . . minimized/Primitives#app(). // kind Variable // ^^^^^^ reference local 0 -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Random#nextBoolean(). +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Random#nextBoolean(). // ⌃ enclosing_range_end local 8 return "" + a + b + c + d + e + f + g + h; // ^ reference local 1 @@ -122,14 +122,14 @@ public static String app() { // ^ reference local 7 // ^ reference local 8 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/Primitives#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Primitives#app(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/Primitives#test(). +// ⌄ enclosing_range_start scip-java maven . . minimized/Primitives#test(). public static void test() {} -// ^^^^ definition semanticdb maven . . minimized/Primitives#test(). +// ^^^^ definition scip-java maven . . minimized/Primitives#test(). // display_name test // signature_documentation java public static void test() // kind StaticMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/Primitives#test(). +// ⌃ enclosing_range_end scip-java maven . . minimized/Primitives#test(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/Primitives# +//⌃ enclosing_range_end scip-java maven . . minimized/Primitives# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/RawTypes.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/RawTypes.java index ac6262b9d..4bb3b6aef 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/RawTypes.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/RawTypes.java @@ -1,35 +1,35 @@ package minimized; import java.util.Collections; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections# import java.util.List; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/util/ -// ^^^^ reference semanticdb maven jdk 11 java/util/List# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/util/ +// ^^^^ reference scip-java maven jdk 11 java/util/List# -//⌄ enclosing_range_start semanticdb maven . . minimized/RawTypes# +//⌄ enclosing_range_start scip-java maven . . minimized/RawTypes# @SuppressWarnings("ALL") -// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings# +// ^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/SuppressWarnings# public class RawTypes { -// ^^^^^^^^ definition semanticdb maven . . minimized/RawTypes# +// ^^^^^^^^ definition scip-java maven . . minimized/RawTypes# // display_name RawTypes -// signature_documentation java @SuppressWarnings("ALL")\npublic class RawTypes +// signature_documentation java @SuppressWarnings\npublic class RawTypes // kind Class -// ^^^^^^^^ definition semanticdb maven . . minimized/RawTypes#``(). +// ^^^^^^^^ definition scip-java maven . . minimized/RawTypes#``(). // display_name // signature_documentation java public RawTypes() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/RawTypes#x. +// ⌄ enclosing_range_start scip-java maven . . minimized/RawTypes#x. public static final List x = Collections.singletonList(42); -// ^^^^ reference semanticdb maven jdk 11 java/util/List# -// ^ definition semanticdb maven . . minimized/RawTypes#x. +// ^^^^ reference scip-java maven jdk 11 java/util/List# +// ^ definition scip-java maven . . minimized/RawTypes#x. // display_name x // signature_documentation java public static final List x // kind StaticField -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections# -// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/Collections#singletonList(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/RawTypes#x. +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections# +// ^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/util/Collections#singletonList(). +// ⌃ enclosing_range_end scip-java maven . . minimized/RawTypes#x. } -//⌃ enclosing_range_end semanticdb maven . . minimized/RawTypes# +//⌃ enclosing_range_end scip-java maven . . minimized/RawTypes# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/SubClasses.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/SubClasses.java index 4e99f292f..cb9210521 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/SubClasses.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/SubClasses.java @@ -1,78 +1,78 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/SubClasses# +//⌄ enclosing_range_start scip-java maven . . minimized/SubClasses# public class SubClasses extends AbstractClasses implements Interfaces { -// ^^^^^^^^^^ definition semanticdb maven . . minimized/SubClasses# +// ^^^^^^^^^^ definition scip-java maven . . minimized/SubClasses# // display_name SubClasses -// signature_documentation java public class SubClasses +// signature_documentation java public class SubClasses extends AbstractClasses implements Interfaces // kind Class -// relationship is_implementation semanticdb maven . . minimized/AbstractClasses# -// relationship is_implementation semanticdb maven . . minimized/Interfaces# -// ^^^^^^^^^^ definition semanticdb maven . . minimized/SubClasses#``(). +// relationship is_implementation scip-java maven . . minimized/AbstractClasses# +// relationship is_implementation scip-java maven . . minimized/Interfaces# +// ^^^^^^^^^^ definition scip-java maven . . minimized/SubClasses#``(). // display_name // signature_documentation java public SubClasses() // kind Constructor -// ^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AbstractClasses# -// ^^^^^^^^^^ reference semanticdb maven . . minimized/Interfaces# +// ^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AbstractClasses# +// ^^^^^^^^^^ reference scip-java maven . . minimized/Interfaces# -// ⌄ enclosing_range_start semanticdb maven . . minimized/SubClasses#abstractImplementation(). +// ⌄ enclosing_range_start scip-java maven . . minimized/SubClasses#abstractImplementation(). @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# public String abstractImplementation() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/SubClasses#abstractImplementation(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/SubClasses#abstractImplementation(). // display_name abstractImplementation // signature_documentation java @Override\npublic String abstractImplementation() // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/AbstractClasses#abstractImplementation(). +// relationship is_reference is_implementation scip-java maven . . minimized/AbstractClasses#abstractImplementation(). return "abstract"; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/SubClasses#abstractImplementation(). +// ⌃ enclosing_range_end scip-java maven . . minimized/SubClasses#abstractImplementation(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/SubClasses#abstractInterfaceMethod(). +// ⌄ enclosing_range_start scip-java maven . . minimized/SubClasses#abstractInterfaceMethod(). @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# public String abstractInterfaceMethod() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/SubClasses#abstractInterfaceMethod(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/SubClasses#abstractInterfaceMethod(). // display_name abstractInterfaceMethod // signature_documentation java @Override\npublic String abstractInterfaceMethod() // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/Interfaces#abstractInterfaceMethod(). +// relationship is_reference is_implementation scip-java maven . . minimized/Interfaces#abstractInterfaceMethod(). return "abstractInterface"; } -// ⌃ enclosing_range_end semanticdb maven . . minimized/SubClasses#abstractInterfaceMethod(). +// ⌃ enclosing_range_end scip-java maven . . minimized/SubClasses#abstractInterfaceMethod(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/SubClasses#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/SubClasses#app(). public static String app() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^ definition semanticdb maven . . minimized/SubClasses#app(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^ definition scip-java maven . . minimized/SubClasses#app(). // display_name app // signature_documentation java public static String app() // kind StaticMethod // ⌄ enclosing_range_start local 0 SubClasses s = new SubClasses(); -// ^^^^^^^^^^ reference semanticdb maven . . minimized/SubClasses# +// ^^^^^^^^^^ reference scip-java maven . . minimized/SubClasses# // ^ definition local 0 // display_name s // signature_documentation java SubClasses s -// enclosing_symbol semanticdb maven . . minimized/SubClasses#app(). +// enclosing_symbol scip-java maven . . minimized/SubClasses#app(). // kind Variable -// ^^^^^^^^^^ reference semanticdb maven . . minimized/SubClasses#``(). +// ^^^^^^^^^^ reference scip-java maven . . minimized/SubClasses#``(). // ⌃ enclosing_range_end local 0 return s.abstractImplementation() // ^ reference local 0 -// ^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/SubClasses#abstractImplementation(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/SubClasses#abstractImplementation(). + s.defaultImplementation() // ^ reference local 0 -// ^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AbstractClasses#defaultImplementation(). +// ^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/AbstractClasses#defaultImplementation(). + s.abstractInterfaceMethod() // ^ reference local 0 -// ^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/SubClasses#abstractInterfaceMethod(). +// ^^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/SubClasses#abstractInterfaceMethod(). + s.defaultInterfaceMethod(); // ^ reference local 0 -// ^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/Interfaces#defaultInterfaceMethod(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference scip-java maven . . minimized/Interfaces#defaultInterfaceMethod(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/SubClasses#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/SubClasses#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/SubClasses# +//⌃ enclosing_range_end scip-java maven . . minimized/SubClasses# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TabIndented.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TabIndented.java index 3af5743c3..0ed6f003d 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TabIndented.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TabIndented.java @@ -1,33 +1,33 @@ package minimized; -//⌄ enclosing_range_start semanticdb maven . . minimized/TabIndented# +//⌄ enclosing_range_start scip-java maven . . minimized/TabIndented# public class TabIndented { -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/TabIndented# +// ^^^^^^^^^^^ definition scip-java maven . . minimized/TabIndented# // display_name TabIndented // signature_documentation java public class TabIndented // kind Class -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/TabIndented#``(). +// ^^^^^^^^^^^ definition scip-java maven . . minimized/TabIndented#``(). // display_name // signature_documentation java public TabIndented() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/TabIndented#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TabIndented#app(). public void app() { -// ^^^ definition semanticdb maven . . minimized/TabIndented#app(). +// ^^^ definition scip-java maven . . minimized/TabIndented#app(). // display_name app // signature_documentation java public void app() // kind Method // ⌄ enclosing_range_start local 0 Object o = new Object() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/Object# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/Object# // ^ definition local 0 // display_name o // signature_documentation java Object o -// enclosing_symbol semanticdb maven . . minimized/TabIndented#app(). +// enclosing_symbol scip-java maven . . minimized/TabIndented#app(). // kind Variable -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/Object# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/Object# // ⌄ enclosing_range_start local 2 @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# // ⌄ enclosing_range_start local 3 public boolean equals(Object other) { // ^^^^^^ definition local 2 @@ -35,12 +35,13 @@ public boolean equals(Object other) { // signature_documentation java @Override\npublic boolean equals(Object other) // enclosing_symbol local 1 // kind Method -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/Object#equals(). -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/Object# +// relationship is_reference is_implementation scip-java maven jdk 11 java/lang/Object#equals(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/Object# // ^^^^^ definition local 3 // display_name other // signature_documentation java Object other // enclosing_symbol local 2 +// kind Parameter // ⌃ enclosing_range_end local 3 return false; } @@ -48,37 +49,37 @@ public boolean equals(Object other) { // ⌄ enclosing_range_start local 4 @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# public int hashCode() { // ^^^^^^^^ definition local 4 // display_name hashCode // signature_documentation java @Override\npublic int hashCode() // enclosing_symbol local 1 // kind Method -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/Object#hashCode(). +// relationship is_reference is_implementation scip-java maven jdk 11 java/lang/Object#hashCode(). return System.identityHashCode(this); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System# -// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/System#identityHashCode(). +// ^^^^^^ reference scip-java maven jdk 11 java/lang/System# +// ^^^^^^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/System#identityHashCode(). } // ⌃ enclosing_range_end local 4 // ⌄ enclosing_range_start local 5 @Override -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/Override# public String toString() { -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^^^^^^^^ definition local 5 // display_name toString // signature_documentation java @Override\npublic String toString() // enclosing_symbol local 1 // kind Method -// relationship is_reference is_implementation semanticdb maven jdk 11 java/lang/Object#toString(). +// relationship is_reference is_implementation scip-java maven jdk 11 java/lang/Object#toString(). return ""; } // ⌃ enclosing_range_end local 5 }; // ⌃ enclosing_range_end local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/TabIndented#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TabIndented#app(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/TabIndented# +//⌃ enclosing_range_end scip-java maven . . minimized/TabIndented# diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeAnnotations.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeAnnotations.java index c23c63560..17e660b7d 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeAnnotations.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeAnnotations.java @@ -1,72 +1,72 @@ package minimized; import java.lang.annotation.ElementType; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType# import java.lang.annotation.Target; -// ^^^^ reference semanticdb maven . . java/ -// ^^^^ reference semanticdb maven . . java/lang/ -// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/ -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Target# +// ^^^^ reference scip-java maven . . java/ +// ^^^^ reference scip-java maven . . java/lang/ +// ^^^^^^^^^^ reference scip-java maven . . java/lang/annotation/ +// ^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Target# -//⌄ enclosing_range_start semanticdb maven . . minimized/TypeAnnotation# +//⌄ enclosing_range_start scip-java maven . . minimized/TypeAnnotation# @Target({ ElementType.TYPE_USE }) -// ^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Target# -// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType# -// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#TYPE_USE. +// ^^^^^ reference scip-java maven jdk 11 java/lang/annotation/Target# +// ^^^^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType# +// ^^^^^^^^ reference scip-java maven jdk 11 java/lang/annotation/ElementType#TYPE_USE. @interface TypeAnnotation { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/TypeAnnotation# +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/TypeAnnotation# // display_name TypeAnnotation -// signature_documentation java @Target({ElementType.TYPE_USE})\n@interface TypeAnnotation +// signature_documentation java @Target\nabstract @interface TypeAnnotation implements Annotation // kind Interface -// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation# -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeAnnotation#integer(). +// relationship is_implementation scip-java maven jdk 11 java/lang/annotation/Annotation# +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeAnnotation#integer(). int integer() default 1; -// ^^^^^^^ definition semanticdb maven . . minimized/TypeAnnotation#integer(). +// ^^^^^^^ definition scip-java maven . . minimized/TypeAnnotation#integer(). // display_name integer // signature_documentation java public abstract int integer() // kind AbstractMethod -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeAnnotation#integer(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeAnnotation#integer(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/TypeAnnotation# +//⌃ enclosing_range_end scip-java maven . . minimized/TypeAnnotation# // FIXME(issue: GRAPH-1122): Definition range for T below is incorrect -//⌄ enclosing_range_start semanticdb maven . . minimized/ClassProcessed# -//⌄ enclosing_range_start semanticdb maven . . minimized/ClassProcessed#[T] +//⌄ enclosing_range_start scip-java maven . . minimized/ClassProcessed# +//⌄ enclosing_range_start scip-java maven . . minimized/ClassProcessed#[T] class ClassProcessed<@TypeAnnotation T extends Number> { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ClassProcessed# +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ClassProcessed# // display_name ClassProcessed // signature_documentation java class ClassProcessed // kind Class -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ClassProcessed#[T] +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ClassProcessed#[T] // display_name T // signature_documentation java T extends Number // kind TypeParameter -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/TypeAnnotation# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/Number# +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/TypeAnnotation# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/Number# -// ⌄ enclosing_range_start semanticdb maven . . minimized/ClassProcessed#``(). +// ⌄ enclosing_range_start scip-java maven . . minimized/ClassProcessed#``(). public ClassProcessed() { -// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/ClassProcessed#``(). +// ^^^^^^^^^^^^^^ definition scip-java maven . . minimized/ClassProcessed#``(). // display_name // signature_documentation java public ClassProcessed() // kind Constructor // ⌄ enclosing_range_start local 0 String s = new @TypeAnnotation String(); -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# // ^ definition local 0 // display_name s // signature_documentation java String s -// enclosing_symbol semanticdb maven . . minimized/ClassProcessed#``(). +// enclosing_symbol scip-java maven . . minimized/ClassProcessed#``(). // kind Variable -// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/TypeAnnotation# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# -// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#``(). +// ^^^^^^^^^^^^^^ reference scip-java maven . . minimized/TypeAnnotation# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# +// ^^^^^^ reference scip-java maven jdk 11 java/lang/String#``(). // ⌃ enclosing_range_end local 0 } -// ⌃ enclosing_range_end semanticdb maven . . minimized/ClassProcessed#``(). +// ⌃ enclosing_range_end scip-java maven . . minimized/ClassProcessed#``(). } -//⌃ enclosing_range_end semanticdb maven . . minimized/ClassProcessed# -//⌃ enclosing_range_end semanticdb maven . . minimized/ClassProcessed#[T] +//⌃ enclosing_range_end scip-java maven . . minimized/ClassProcessed# +//⌃ enclosing_range_end scip-java maven . . minimized/ClassProcessed#[T] diff --git a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeVariables.java b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeVariables.java index bda109668..9079ee038 100644 --- a/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeVariables.java +++ b/tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/TypeVariables.java @@ -1,129 +1,130 @@ package minimized; /** Example from https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.4 */ -//⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables# +//⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables# public class TypeVariables { -// ^^^^^^^^^^^^^ definition semanticdb maven . . minimized/TypeVariables# +// ^^^^^^^^^^^^^ definition scip-java maven . . minimized/TypeVariables# // display_name TypeVariables // signature_documentation java public class TypeVariables // kind Class // documentation Example from https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.4 -// ^^^^^^^^^^^^^ definition semanticdb maven . . minimized/TypeVariables#``(). +// ^^^^^^^^^^^^^ definition scip-java maven . . minimized/TypeVariables#``(). // display_name // signature_documentation java public TypeVariables() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#C# +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#C# static class C { -// ^ definition semanticdb maven . . minimized/TypeVariables#C# +// ^ definition scip-java maven . . minimized/TypeVariables#C# // display_name C // signature_documentation java static class C // kind Class -// ^ definition semanticdb maven . . minimized/TypeVariables#C#``(). +// ^ definition scip-java maven . . minimized/TypeVariables#C#``(). // display_name // signature_documentation java C() // kind Constructor -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#C#mCPublic(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#C#mCPublic(). public void mCPublic() {} -// ^^^^^^^^ definition semanticdb maven . . minimized/TypeVariables#C#mCPublic(). +// ^^^^^^^^ definition scip-java maven . . minimized/TypeVariables#C#mCPublic(). // display_name mCPublic // signature_documentation java public void mCPublic() // kind Method -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#C#mCPublic(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#C#mCPublic(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#C#mCProtected(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#C#mCProtected(). protected void mCProtected() {} -// ^^^^^^^^^^^ definition semanticdb maven . . minimized/TypeVariables#C#mCProtected(). +// ^^^^^^^^^^^ definition scip-java maven . . minimized/TypeVariables#C#mCProtected(). // display_name mCProtected // signature_documentation java protected void mCProtected() // kind Method -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#C#mCProtected(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#C#mCProtected(). -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#C#mCPackage(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#C#mCPackage(). void mCPackage() {} -// ^^^^^^^^^ definition semanticdb maven . . minimized/TypeVariables#C#mCPackage(). +// ^^^^^^^^^ definition scip-java maven . . minimized/TypeVariables#C#mCPackage(). // display_name mCPackage // signature_documentation java void mCPackage() // kind Method -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#C#mCPackage(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#C#mCPackage(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#C# +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#C# -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#I# +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#I# interface I { -// ^ definition semanticdb maven . . minimized/TypeVariables#I# +// ^ definition scip-java maven . . minimized/TypeVariables#I# // display_name I -// signature_documentation java interface I +// signature_documentation java abstract static interface I // kind Interface -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#I#mI(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#I#mI(). void mI(); -// ^^ definition semanticdb maven . . minimized/TypeVariables#I#mI(). +// ^^ definition scip-java maven . . minimized/TypeVariables#I#mI(). // display_name mI // signature_documentation java public abstract void mI() // kind AbstractMethod -// relationship is_reference is_implementation semanticdb maven . . minimized/TypeVariables#CT#mI(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#I#mI(). +// relationship is_reference is_implementation scip-java maven . . minimized/TypeVariables#CT#mI(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#I#mI(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#I# +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#I# -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#CT# +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#CT# static class CT extends C implements I { -// ^^ definition semanticdb maven . . minimized/TypeVariables#CT# +// ^^ definition scip-java maven . . minimized/TypeVariables#CT# // display_name CT -// signature_documentation java static class CT +// signature_documentation java static class CT extends C implements I // kind Class -// relationship is_implementation semanticdb maven . . minimized/TypeVariables#C# -// relationship is_implementation semanticdb maven . . minimized/TypeVariables#I# -// ^^ definition semanticdb maven . . minimized/TypeVariables#CT#``(). +// relationship is_implementation scip-java maven . . minimized/TypeVariables#C# +// relationship is_implementation scip-java maven . . minimized/TypeVariables#I# +// ^^ definition scip-java maven . . minimized/TypeVariables#CT#``(). // display_name // signature_documentation java CT() // kind Constructor -// ^ reference semanticdb maven . . minimized/TypeVariables#C# -// ^ reference semanticdb maven . . minimized/TypeVariables#I# -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#CT#mI(). +// ^ reference scip-java maven . . minimized/TypeVariables#C# +// ^ reference scip-java maven . . minimized/TypeVariables#I# +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#CT#mI(). public void mI() {} -// ^^ definition semanticdb maven . . minimized/TypeVariables#CT#mI(). +// ^^ definition scip-java maven . . minimized/TypeVariables#CT#mI(). // display_name mI // signature_documentation java public void mI() // kind Method -// relationship is_reference is_implementation semanticdb maven . . minimized/TypeVariables#I#mI(). -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#CT#mI(). +// relationship is_reference is_implementation scip-java maven . . minimized/TypeVariables#I#mI(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#CT#mI(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#CT# +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#CT# -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#app().[T] -// ⌄ enclosing_range_start semanticdb maven . . minimized/TypeVariables#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#app(). +// ⌄ enclosing_range_start scip-java maven . . minimized/TypeVariables#app().[T] // ⌄ enclosing_range_start local 0 public static void app(T t) { -// ^ definition semanticdb maven . . minimized/TypeVariables#app().[T] +// ^ definition scip-java maven . . minimized/TypeVariables#app().[T] // display_name T // signature_documentation java T extends C & I // kind TypeParameter -// ^ reference semanticdb maven . . minimized/TypeVariables#C# -// ^ reference semanticdb maven . . minimized/TypeVariables#I# -// ^^^ definition semanticdb maven . . minimized/TypeVariables#app(). +// ^ reference scip-java maven . . minimized/TypeVariables#C# +// ^ reference scip-java maven . . minimized/TypeVariables#I# +// ^^^ definition scip-java maven . . minimized/TypeVariables#app(). // display_name app // signature_documentation java public static void app(T t) // kind StaticMethod -// ^ reference semanticdb maven . . minimized/TypeVariables#app().[T] +// ^ reference scip-java maven . . minimized/TypeVariables#app().[T] // ^ definition local 0 // display_name t // signature_documentation java T t -// enclosing_symbol semanticdb maven . . minimized/TypeVariables#app(). +// enclosing_symbol scip-java maven . . minimized/TypeVariables#app(). +// kind Parameter // ⌃ enclosing_range_end local 0 t.mI(); // ^ reference local 0 -// ^^ reference semanticdb maven . . minimized/TypeVariables#I#mI(). +// ^^ reference scip-java maven . . minimized/TypeVariables#I#mI(). t.mCPublic(); // ^ reference local 0 -// ^^^^^^^^ reference semanticdb maven . . minimized/TypeVariables#C#mCPublic(). +// ^^^^^^^^ reference scip-java maven . . minimized/TypeVariables#C#mCPublic(). t.mCProtected(); // ^ reference local 0 -// ^^^^^^^^^^^ reference semanticdb maven . . minimized/TypeVariables#C#mCProtected(). +// ^^^^^^^^^^^ reference scip-java maven . . minimized/TypeVariables#C#mCProtected(). t.mCPackage(); // ^ reference local 0 -// ^^^^^^^^^ reference semanticdb maven . . minimized/TypeVariables#C#mCPackage(). +// ^^^^^^^^^ reference scip-java maven . . minimized/TypeVariables#C#mCPackage(). } -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#app().[T] -// ⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#app(). +// ⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables#app().[T] } -//⌃ enclosing_range_end semanticdb maven . . minimized/TypeVariables# +//⌃ enclosing_range_end scip-java maven . . minimized/TypeVariables# diff --git a/tests/snapshots/src/main/scala/tests/SemanticdbFile.scala b/tests/snapshots/src/main/scala/tests/SemanticdbFile.scala deleted file mode 100644 index 0ba4dbd9a..000000000 --- a/tests/snapshots/src/main/scala/tests/SemanticdbFile.scala +++ /dev/null @@ -1,49 +0,0 @@ -package tests - -import java.nio.file.Files - -import scala.meta.internal.io.FileIO -import scala.meta.io.AbsolutePath -import scala.meta.io.RelativePath - -import com.sourcegraph.semanticdb_javac.Semanticdb.TextDocument -import com.sourcegraph.semanticdb_javac.Semanticdb.TextDocuments - -case class SemanticdbFile( - sourceroot: AbsolutePath, - relativePath: RelativePath, - sourceDirectory: AbsolutePath, - targetroot: AbsolutePath -) { - def javaPath: AbsolutePath = sourceroot.resolve(relativePath) - def semanticdbPath: AbsolutePath = targetroot - .resolve("META-INF") - .resolve("semanticdb") - .resolve(relativePath.toString() + ".semanticdb") - def textDocument: TextDocument = { - val docs = TextDocuments.parseFrom(Files.readAllBytes(semanticdbPath.toNIO)) - if (docs.getDocumentsCount == 0) - TextDocument.newBuilder().build() - else - docs.getDocuments(0) - } -} - -object SemanticdbFile { - def fromDirectory( - sourceDirectory: AbsolutePath, - sourceroot: AbsolutePath, - targetroot: AbsolutePath - ): Seq[SemanticdbFile] = { - FileIO - .listAllFilesRecursively(sourceDirectory) - .map { file => - SemanticdbFile( - sourceroot, - file.toRelative(sourceroot), - sourceDirectory, - targetroot - ) - } - } -} diff --git a/tests/unit/src/main/scala/tests/CompileResult.scala b/tests/unit/src/main/scala/tests/CompileResult.scala index 5c582337f..000b20a28 100644 --- a/tests/unit/src/main/scala/tests/CompileResult.scala +++ b/tests/unit/src/main/scala/tests/CompileResult.scala @@ -1,28 +1,22 @@ package tests -import com.sourcegraph.semanticdb_javac.Semanticdb +import scala.jdk.CollectionConverters._ + +import com.sourcegraph.Scip case class CompileResult( byteCode: Array[Byte], stdout: String, - textDocuments: Semanticdb.TextDocuments, + documents: List[Scip.Document], isSuccess: Boolean ) { - def textDocument: Option[Semanticdb.TextDocument] = { - Option.when(textDocuments.getDocumentsCount() > 0) { - textDocuments.getDocuments(0) - } - } + def document: Option[Scip.Document] = documents.headOption def merge(other: CompileResult): CompileResult = { copy( byteCode = this.byteCode ++ other.byteCode, stdout = this.stdout ++ other.stdout, - textDocuments = this - .textDocuments - .toBuilder - .addAllDocuments(other.textDocuments.getDocumentsList) - .build(), + documents = this.documents ++ other.documents, isSuccess = this.isSuccess && other.isSuccess ) } @@ -32,7 +26,15 @@ object CompileResult { val empty: CompileResult = CompileResult( Array.emptyByteArray, "", - Semanticdb.TextDocuments.getDefaultInstance, + Nil, isSuccess = true ) + + /** + * Parses a `*.scip` shard from disk and returns its documents. Shards always + * have a single document per source file, but we expose the list to keep the + * call sites uniform when callers compile multiple inputs. + */ + def documentsFromShard(bytes: Array[Byte]): List[Scip.Document] = + Scip.Index.parseFrom(bytes).getDocumentsList.asScala.toList } diff --git a/tests/unit/src/main/scala/tests/TestCompiler.scala b/tests/unit/src/main/scala/tests/TestCompiler.scala index 37c4e86b6..58d60ac80 100644 --- a/tests/unit/src/main/scala/tests/TestCompiler.scala +++ b/tests/unit/src/main/scala/tests/TestCompiler.scala @@ -13,8 +13,6 @@ import scala.meta.Input import scala.meta.internal.io.FileIO import scala.meta.io.AbsolutePath -import com.sourcegraph.semanticdb_javac.Semanticdb - object TestCompiler { val PROCESSOR_PATH = System.getProperty("java.class.path") } @@ -23,7 +21,7 @@ class TestCompiler( val classpath: String, val javacOptions: List[String], val targetroot: Path, - val sourceroot: Path = Files.createTempDirectory("semanticdb-javac") + val sourceroot: Path = Files.createTempDirectory("scip-javac") ) { private val compiler = ToolProvider.getSystemJavaCompiler @@ -37,10 +35,19 @@ class TestCompiler( this(TestCompiler.PROCESSOR_PATH, Nil, targetroot) } + /** + * Compiles every `*.java` file under [[dir]] with the SCIP shard plugin attached + * to javac. The resulting shards are read back from disk and exposed through + * [[CompileResult.documents]]. + */ def compileSemanticdbDirectory(dir: Path): CompileResult = { compileSemanticdb(inputsFromDirectory(dir)) } + /** + * Compiles the given inputs with the SCIP shard plugin attached to javac and + * reads the produced `*.scip` shards back from disk. + */ def compileSemanticdb(inputs: Seq[Input.VirtualFile]): CompileResult = { compile( inputs, @@ -94,23 +101,19 @@ class TestCompiler( var bytecode = new Array[Byte](0) if (!fileManager.compiled.isEmpty) bytecode = fileManager.compiled.iterator.next.getCompiledBinaries - val textDocuments = Semanticdb.TextDocuments.newBuilder - inputs.map { input => - val outputPath = targetroot + val documents = ListBuffer.empty[com.sourcegraph.Scip.Document] + inputs.foreach { input => + val shardPath = targetroot .resolve("META-INF") - .resolve("semanticdb") - .resolve(input.path + ".semanticdb") - if (Files.isRegularFile(outputPath)) { - textDocuments.addAllDocuments( - Semanticdb - .TextDocuments - .parseFrom(Files.readAllBytes(outputPath)) - .getDocumentsList - ) + .resolve("scip") + .resolve(input.path + ".scip") + if (Files.isRegularFile(shardPath)) { + documents ++= + CompileResult.documentsFromShard(Files.readAllBytes(shardPath)) } } val stdout = output.toString - CompileResult(bytecode, stdout, textDocuments.build(), isSuccess) + CompileResult(bytecode, stdout, documents.toList, isSuccess) } private def inputsFromDirectory(dir: Path): Seq[Input.VirtualFile] = { diff --git a/tests/unit/src/test/scala/tests/GeneratedConstructorSuite.scala b/tests/unit/src/test/scala/tests/GeneratedConstructorSuite.scala index 6862c7d56..a4a68260f 100644 --- a/tests/unit/src/test/scala/tests/GeneratedConstructorSuite.scala +++ b/tests/unit/src/test/scala/tests/GeneratedConstructorSuite.scala @@ -2,7 +2,7 @@ package tests import scala.meta.inputs.Input -import com.sourcegraph.semanticdb_javac.Semanticdb.TextDocument +import com.sourcegraph.Scip import munit.FunSuite import munit.TestOptions @@ -15,7 +15,7 @@ class GeneratedConstructorSuite extends FunSuite with TempDirectories { def doSomething( options: TestOptions, original: String, - fn: (TextDocument, List[String]) => Unit, + fn: (Scip.Document, List[String]) => Unit, qualifiedClassName: String = "example.Test" )(implicit loc: munit.Location): Unit = { test(options) { diff --git a/tests/unit/src/test/scala/tests/JavacClassesDirectorySuite.scala b/tests/unit/src/test/scala/tests/JavacClassesDirectorySuite.scala index 4a3d51155..6674ba015 100644 --- a/tests/unit/src/test/scala/tests/JavacClassesDirectorySuite.scala +++ b/tests/unit/src/test/scala/tests/JavacClassesDirectorySuite.scala @@ -36,12 +36,12 @@ class JavacClassesDirectorySuite extends FunSuite with TempDirectories { ) ) assert(clue(compileResult).isSuccess) - val semanticdbPath = Paths + val shardPath = Paths .get("META-INF") - .resolve("semanticdb") + .resolve("scip") .resolve("example") - .resolve("Example.java.semanticdb") - assert(Files.isRegularFile(clue(sourceroot().resolve(semanticdbPath)))) + .resolve("Example.java.scip") + assert(Files.isRegularFile(clue(sourceroot().resolve(shardPath)))) } } diff --git a/tests/unit/src/test/scala/tests/OverridesSuite.scala b/tests/unit/src/test/scala/tests/OverridesSuite.scala index 15b069aff..a252b4e93 100644 --- a/tests/unit/src/test/scala/tests/OverridesSuite.scala +++ b/tests/unit/src/test/scala/tests/OverridesSuite.scala @@ -1,10 +1,9 @@ package tests -import java.util.stream.Collectors - +import scala.jdk.CollectionConverters._ import scala.meta.Input -import com.sourcegraph.scip_semanticdb.Symtab +import com.sourcegraph.semanticdb_javac.ScipSymbols import munit.FunSuite import munit.TestOptions @@ -26,16 +25,37 @@ class OverridesSuite extends FunSuite with TempDirectories { val relativePath = "example.Parent".replace('.', '/') + ".java" val input = Input.VirtualFile(relativePath, source) val result = compiler.compileSemanticdb(List(input)) - val symtab = new Symtab(result.textDocument.orNull) + val document = result.document.getOrElse(fail("no SCIP document emitted")) + + val placeholderSymbol = ScipSymbols.PLACEHOLDER_PREFIX + extractSymbol + val info = document + .getSymbolsList + .asScala + .find(_.getSymbol == placeholderSymbol) + .getOrElse( + fail( + s"symbol $extractSymbol not found in document; symbols = " + + document + .getSymbolsList + .asScala + .map(_.getSymbol) + .mkString("\n ", "\n ", "") + ) + ) + val obtainedSymbols = info + .getRelationshipsList + .asScala + .filter(_.getIsImplementation) + .map(_.getSymbol) + .map { sym => + if (sym.startsWith(ScipSymbols.PLACEHOLDER_PREFIX)) + sym.substring(ScipSymbols.PLACEHOLDER_PREFIX.length) + else + sym + } val expectedSyms = expectedSymbols.mkString("\n") - val syms = symtab - .symbols - .get(extractSymbol) - .getOverriddenSymbolsList - .stream - .collect(Collectors.joining("\n")) - assertNoDiff(syms, expectedSyms) + assertNoDiff(obtainedSymbols.mkString("\n"), expectedSyms) } } diff --git a/tests/unit/src/test/scala/tests/ScipAggregationSuite.scala b/tests/unit/src/test/scala/tests/ScipAggregationSuite.scala new file mode 100644 index 000000000..000f5d11b --- /dev/null +++ b/tests/unit/src/test/scala/tests/ScipAggregationSuite.scala @@ -0,0 +1,103 @@ +package tests + +import java.nio.file.Files +import java.util.Collections + +import scala.jdk.CollectionConverters._ +import scala.meta.Input + +import com.sourcegraph.Scip +import com.sourcegraph.scip_semanticdb.{ + ScipOutputFormat, + ScipSemanticdbOptions, + ScipSemanticdbReporter, + ScipShardAggregator +} +import munit.FunSuite + +// End-to-end test for the SCIP shard aggregation pipeline: compile Java with +// the default shard emission, run ScipShardAggregator over the produced +// META-INF/scip shards, and assert the final index.scip is well-formed and +// uses the scip-java symbol scheme. +class ScipAggregationSuite extends FunSuite { + + private val source = + Input.VirtualFile( + "example/Foo.java", + """package example; + | + |public class Foo { + | public int bar() { return 1; } + |} + |""".stripMargin + ) + + test("aggregator produces a scip-java index from compiler shards") { + val targetroot = Files.createTempDirectory("scip-agg-target-") + val sourceroot = Files.createTempDirectory("scip-agg-source-") + val compiler = + new TestCompiler(TestCompiler.PROCESSOR_PATH, Nil, targetroot, sourceroot) + val result = + compiler.compile( + Seq(source), + Seq( + s"-Xplugin:semanticdb -text:on -sourceroot:$sourceroot -targetroot:$targetroot" + ) + ) + assert(result.isSuccess, s"javac failed:\n${result.stdout}") + + val output = Files.createTempFile("scip-agg-out-", ".scip") + val options = new ScipSemanticdbOptions( + Collections.singletonList(targetroot), + output, + sourceroot, + new ScipSemanticdbReporter() {}, + Scip + .ToolInfo + .newBuilder() + .setName("scip-java") + .setVersion("test") + .build(), + ScipOutputFormat.TYPED_PROTOBUF, + false, + Collections.emptyList(), + true, + false, + false + ) + + ScipShardAggregator.run(options) + + // SCIP's stream format concatenates multiple Index messages. Protobuf merges concatenated + // messages of the same type when parsed as a single message: singular fields take the last + // value and repeated fields are concatenated, so this gives us the full aggregated view. + val bytes = Files.readAllBytes(output) + val index = Scip.Index.parseFrom(bytes) + + // Metadata is present. + assert(index.hasMetadata, s"expected metadata in index: $index") + assertEquals(index.getMetadata.getToolInfo.getName, "scip-java") + + val docs = index.getDocumentsList.asScala + assert(docs.nonEmpty, "expected at least one document in aggregated index") + val doc = docs.find(_.getRelativePath == "example/Foo.java").get + + // Every symbol/occurrence must be in final form: either local or scip-java. + doc + .getSymbolsList + .asScala + .foreach { info => + val s = info.getSymbol + val ok = s.startsWith("scip-java maven ") || s.startsWith("local ") + assert(ok, s"symbol not in final form: $s") + } + doc + .getOccurrencesList + .asScala + .foreach { occ => + val s = occ.getSymbol + val ok = s.startsWith("scip-java maven ") || s.startsWith("local ") + assert(ok, s"occurrence not in final form: $s") + } + } +} diff --git a/tests/unit/src/test/scala/tests/ScipShardEmissionSuite.scala b/tests/unit/src/test/scala/tests/ScipShardEmissionSuite.scala new file mode 100644 index 000000000..063a16689 --- /dev/null +++ b/tests/unit/src/test/scala/tests/ScipShardEmissionSuite.scala @@ -0,0 +1,122 @@ +package tests + +import java.nio.file.Files + +import scala.jdk.CollectionConverters._ +import scala.meta.Input + +import com.sourcegraph.Scip +import com.sourcegraph.semanticdb_javac.ScipSymbols +import munit.FunSuite + +/** + * Verifies that the Java compiler plug-in produces a parseable `*.scip` shard + * under `META-INF/scip/...` and no longer writes any `*.semanticdb` files. + */ +class ScipShardEmissionSuite extends FunSuite { + + private val source = Input.VirtualFile( + "example/Foo.java", + """package example; + | + |public class Foo { + | public int bar() { + | int x = 1; + | return x; + | } + |} + |""".stripMargin + ) + + test("compiler emits a parseable SCIP shard and no SemanticDB file") { + val targetroot = Files.createTempDirectory("scip-shard-emission-") + val sourceroot = Files.createTempDirectory("scip-shard-emission-src-") + val compiler = + new TestCompiler(TestCompiler.PROCESSOR_PATH, Nil, targetroot, sourceroot) + val result = compiler.compile( + Seq(source), + Seq( + s"-Xplugin:semanticdb -text:on -sourceroot:$sourceroot -targetroot:$targetroot" + ) + ) + assert(result.isSuccess, s"javac failed:\n${result.stdout}") + + val semanticdbPath = targetroot.resolve( + "META-INF/semanticdb/example/Foo.java.semanticdb" + ) + val scipPath = targetroot.resolve("META-INF/scip/example/Foo.java.scip") + + assert(!Files.exists(semanticdbPath), s"unexpected semanticdb $semanticdbPath") + assert(Files.isRegularFile(scipPath), s"missing $scipPath") + + val shard = Scip.Index.parseFrom(Files.readAllBytes(scipPath)) + assertEquals(shard.getDocumentsCount, 1) + val doc = shard.getDocuments(0) + assertEquals(doc.getRelativePath, "example/Foo.java") + assertEquals(doc.getLanguage, "java") + + val symbols = doc.getSymbolsList.asScala + assert(symbols.nonEmpty, "expected at least one symbol") + + // Globals must use the placeholder prefix; locals must use "local N". + symbols.foreach { info => + val s = info.getSymbol + val ok = + s.startsWith(ScipSymbols.PLACEHOLDER_PREFIX) || s.startsWith("local ") + assert(ok, s"unexpected symbol form: $s") + } + + val occurrences = doc.getOccurrencesList.asScala + assert(occurrences.nonEmpty, "expected at least one occurrence") + occurrences.foreach { occ => + val s = occ.getSymbol + val ok = + s.startsWith(ScipSymbols.PLACEHOLDER_PREFIX) || s.startsWith("local ") + assert(ok, s"unexpected occurrence symbol: $s") + } + + // At least one definition should carry a Java signature_documentation block. + val withSignatures = symbols.filter { info => + info.hasSignatureDocumentation && + info.getSignatureDocumentation.getLanguage == "java" && + info.getSignatureDocumentation.getText.nonEmpty + } + assert( + withSignatures.nonEmpty, + s"expected signature docs; got: ${symbols.mkString("\n")}" + ) + + val fooClass = symbols.find { info => + info.getKind == Scip.SymbolInformation.Kind.Class && + info.getDisplayName == "Foo" + } + assert(fooClass.isDefined, "expected Foo class symbol") + val text = fooClass.get.getSignatureDocumentation.getText + assert(text.contains("class Foo"), s"unexpected signature: $text") + + val barMethod = symbols.find { info => + info.getKind == Scip.SymbolInformation.Kind.Method && + info.getDisplayName == "bar" + } + assert(barMethod.isDefined, "expected bar method symbol") + val barText = barMethod.get.getSignatureDocumentation.getText + assert(barText.contains("int bar("), s"unexpected bar signature: $barText") + } + + test("compiler accepts the deprecated -emit-scip:off flag without erroring") { + val targetroot = Files.createTempDirectory("scip-shard-off-") + val sourceroot = Files.createTempDirectory("scip-shard-off-src-") + val compiler = + new TestCompiler(TestCompiler.PROCESSOR_PATH, Nil, targetroot, sourceroot) + val result = compiler.compile( + Seq(source), + List( + s"-Xplugin:semanticdb -emit-scip:off -text:on -sourceroot:$sourceroot -targetroot:$targetroot" + ) + ) + assert(result.isSuccess, s"javac failed:\n${result.stdout}") + // The flag is now a deprecated no-op; the shard is still emitted. + val scipPath = targetroot.resolve("META-INF/scip/example/Foo.java.scip") + assert(Files.exists(scipPath), s"expected shard at $scipPath") + } +} diff --git a/tests/unit/src/test/scala/tests/ScipSymbolsSuite.scala b/tests/unit/src/test/scala/tests/ScipSymbolsSuite.scala new file mode 100644 index 000000000..c15d7e7d9 --- /dev/null +++ b/tests/unit/src/test/scala/tests/ScipSymbolsSuite.scala @@ -0,0 +1,83 @@ +package tests + +import java.nio.file.Paths +import java.util.{Collections, Optional} + +import com.sourcegraph.Scip +import com.sourcegraph.scip_semanticdb.{ + Package, + PackageTable, + ScipOutputFormat, + ScipSemanticdbOptions, + ScipSemanticdbReporter, + SymbolRewriter +} +import com.sourcegraph.semanticdb_javac.ScipSymbols +import munit.FunSuite + +class ScipSymbolsSuite extends FunSuite { + + test("global symbol gets placeholder prefix") { + assertEquals( + ScipSymbols.fromSemanticdbSymbol("com/example/Foo#bar()."), + ". . . . com/example/Foo#bar()." + ) + } + + test("local symbol gets canonical SCIP form") { + assertEquals(ScipSymbols.fromSemanticdbSymbol("local42"), "local 42") + } + + test("empty / null symbol stays empty") { + assertEquals(ScipSymbols.fromSemanticdbSymbol(""), "") + assertEquals(ScipSymbols.fromSemanticdbSymbol(null), "") + } + + // A PackageTable built with no packages — packageForSymbol always returns empty + // unless the JDK classfile is on the classpath. Override defensively just in case. + private lazy val emptyPackages: PackageTable = + new PackageTable( + new ScipSemanticdbOptions( + Collections.emptyList(), + Paths.get("/tmp"), + Paths.get("/tmp"), + new ScipSemanticdbReporter() {}, + Scip + .ToolInfo + .newBuilder() + .setName("scip-java") + .setVersion("test") + .build(), + ScipOutputFormat.TYPED_PROTOBUF, + false, + Collections.emptyList(), + false, + true, + false + ) + ) { + override def packageForSymbol(symbol: String): Optional[Package] = + Optional.empty() + } + + test("SymbolRewriter leaves locals and final symbols alone") { + val rewriter = new SymbolRewriter(emptyPackages) + assertEquals(rewriter.rewrite("local 1"), "local 1") + assertEquals( + rewriter.rewrite("scip-java maven g a v com/example/Foo#"), + "scip-java maven g a v com/example/Foo#" + ) + assertEquals(rewriter.rewrite(""), "") + assertEquals(rewriter.rewrite(null), null) + } + + test( + "SymbolRewriter falls back to empty package when no metadata available" + ) { + val rewriter = new SymbolRewriter(emptyPackages) + assertEquals( + rewriter.rewrite(". . . . com/example/Foo#bar()."), + "scip-java maven . . com/example/Foo#bar()." + ) + } +} diff --git a/tests/unit/src/test/scala/tests/SnapshotCommandSuite.scala b/tests/unit/src/test/scala/tests/SnapshotCommandSuite.scala index aa4a89fb0..2c359d4b1 100644 --- a/tests/unit/src/test/scala/tests/SnapshotCommandSuite.scala +++ b/tests/unit/src/test/scala/tests/SnapshotCommandSuite.scala @@ -57,37 +57,38 @@ class SnapshotCommandSuite extends MopedSuite(ScipJava.app) { | /** | * Sample class | */ - |//⌄ enclosing_range_start semanticdb maven . . main/Sample# + |//⌄ enclosing_range_start scip-java maven . . main/Sample# | public class Sample { - |// ^^^^^^ definition semanticdb maven . . main/Sample# + |// ^^^^^^ definition scip-java maven . . main/Sample# |// display_name Sample |// signature_documentation java public class Sample |// kind Class |// documentation Sample class\n - |// ^^^^^^ definition semanticdb maven . . main/Sample#``(). + |// ^^^^^^ definition scip-java maven . . main/Sample#``(). |// display_name |// signature_documentation java public Sample() |// kind Constructor | /** | * Main application entry point | */ - |// ⌄ enclosing_range_start semanticdb maven . . main/Sample#main(). + |// ⌄ enclosing_range_start scip-java maven . . main/Sample#main(). |// ⌄ enclosing_range_start local 0 | public static void main(String[] asdf) {} - |// ^^^^ definition semanticdb maven . . main/Sample#main(). + |// ^^^^ definition scip-java maven . . main/Sample#main(). |// display_name main |// signature_documentation java public static void main(String[] asdf) |// kind StaticMethod |// documentation Main application entry point\n - |// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String# + |// ^^^^^^ reference scip-java maven jdk 11 java/lang/String# |// ^^^^ definition local 0 |// display_name asdf |// signature_documentation java String[] asdf - |// enclosing_symbol semanticdb maven . . main/Sample#main(). + |// enclosing_symbol scip-java maven . . main/Sample#main(). + |// kind Parameter |// ⌃ enclosing_range_end local 0 - |// ⌃ enclosing_range_end semanticdb maven . . main/Sample#main(). + |// ⌃ enclosing_range_end scip-java maven . . main/Sample#main(). | } - |//⌃ enclosing_range_end semanticdb maven . . main/Sample# + |//⌃ enclosing_range_end scip-java maven . . main/Sample# |""".stripMargin ) } diff --git a/tests/unit/src/test/scala/tests/TargetedSuite.scala b/tests/unit/src/test/scala/tests/TargetedSuite.scala index 1fa200d51..e039897a5 100644 --- a/tests/unit/src/test/scala/tests/TargetedSuite.scala +++ b/tests/unit/src/test/scala/tests/TargetedSuite.scala @@ -7,8 +7,7 @@ import scala.meta.Input import scala.meta.Position import scala.meta.internal.inputs._ -import com.sourcegraph.semanticdb_javac.Semanticdb -import com.sourcegraph.semanticdb_javac.Semanticdb.TextDocument +import com.sourcegraph.Scip import munit.FunSuite import munit.TestOptions @@ -20,10 +19,23 @@ class TargetedSuite extends FunSuite with TempDirectories { override def munitFixtures: Seq[Fixture[_]] = super.munitFixtures ++ List(targetroot) + /** Encodes a position the same way SCIP encodes a single-line range. */ + private def asScipRange(pos: Position): java.util.List[Integer] = { + if (pos.startLine == pos.endLine) + List[Integer](pos.startLine, pos.startColumn, pos.endColumn).asJava + else + List[Integer]( + pos.startLine, + pos.startColumn, + pos.endLine, + pos.endColumn + ).asJava + } + def checkDoc( options: TestOptions, original: String, - fn: (TextDocument, List[String]) => Unit, + fn: (Scip.Document, List[String]) => Unit, qualifiedClassName: String = "example.Test" )(implicit loc: munit.Location): Unit = { test(options) { @@ -44,18 +56,11 @@ class TargetedSuite extends FunSuite with TempDirectories { }) .toList val result = compiler.compileSemanticdb(List(input)) - val textDocument = result.textDocument.orNull - val occurrences = textDocument.getOccurrencesList.asScala.toList + val document = result.document.getOrElse(fail("no SCIP document emitted")) + val occurrences = document.getOccurrencesList.asScala.toList val symbols: List[String] = positions.map { pos => - val posRange = Semanticdb - .Range - .newBuilder() - .setStartLine(pos.startLine) - .setStartCharacter(pos.startColumn) - .setEndLine(pos.endLine) - .setEndCharacter(pos.endColumn) - .build() - val matchingOccurrences = occurrences.filter(_.getRange == posRange) + val expected = asScipRange(pos) + val matchingOccurrences = occurrences.filter(_.getRangeList == expected) matchingOccurrences match { case Nil => fail( @@ -63,7 +68,7 @@ class TargetedSuite extends FunSuite with TempDirectories { "error", s"no symbol occurrence for this position." ), - clues(occurrences, posRange) + clues(occurrences, expected) ) case sym :: Nil => sym.getSymbol @@ -73,11 +78,11 @@ class TargetedSuite extends FunSuite with TempDirectories { "error", s"ambiguous symbols for this position" ), - clues(many, occurrences, posRange) + clues(many, occurrences, expected) ) } } - fn(textDocument, symbols) + fn(document, symbols) } } @@ -98,10 +103,19 @@ class TargetedSuite extends FunSuite with TempDirectories { |} |""".stripMargin, { case (_, List(a, b, c, d)) => - assertNoDiff(a, "java/lang/String#lastIndexOf().") - assertNoDiff(b, "java/lang/String#lastIndexOf(+1).") - assertNoDiff(c, "java/lang/String#lastIndexOf(+2).") - assertNoDiff(d, "java/lang/String#lastIndexOf(+3).") + assertNoDiff(stripPlaceholder(a), "java/lang/String#lastIndexOf().") + assertNoDiff(stripPlaceholder(b), "java/lang/String#lastIndexOf(+1).") + assertNoDiff(stripPlaceholder(c), "java/lang/String#lastIndexOf(+2).") + assertNoDiff(stripPlaceholder(d), "java/lang/String#lastIndexOf(+3).") } ) + + /** Strips the placeholder prefix that compiler-emitted shards use for globals. */ + private def stripPlaceholder(symbol: String): String = { + import com.sourcegraph.semanticdb_javac.ScipSymbols.PLACEHOLDER_PREFIX + if (symbol.startsWith(PLACEHOLDER_PREFIX)) + symbol.substring(PLACEHOLDER_PREFIX.length) + else + symbol + } }