Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.5.5
sbt.version=1.7.1
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ final case class IndexSemanticdbCommand(
) extends Command {
def sourceroot: Path = AbsolutePath.of(app.env.workingDirectory)
def absoluteTargetroots: List[Path] =
targetroot.map(AbsolutePath.of(_, app.env.workingDirectory))
if (targetroot.isEmpty)
List(sourceroot)
else
targetroot.map(AbsolutePath.of(_, sourceroot))

def run(): Int = {
val reporter = new ConsoleScipSemanticdbReporter(app)
val outputFilename = output.getFileName.toString
Expand All @@ -68,7 +72,7 @@ final case class IndexSemanticdbCommand(
.toList
val options =
new ScipSemanticdbOptions(
targetroot.map(ts => AbsolutePath.of(ts, sourceroot)).asJava,
absoluteTargetroots.asJava,
AbsolutePath.of(output, sourceroot),
sourceroot,
reporter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.sourcegraph.Scip;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.*;
import java.util.*;
Expand Down Expand Up @@ -131,7 +130,7 @@ private void processTypedDocument(Path path, PackageTable packages) {
Scip.Relationship.newBuilder()
.setSymbol(typedSymbol(overriddenSymbol, overriddenSymbolPkg))
.setIsImplementation(true)
.setIsReference(SemanticdbSymbols.isMethod(info.getSymbol())));
.setIsReference(supportsReferenceRelationship(info)));
}
if (info.hasSignature()) {
String language =
Expand Down Expand Up @@ -284,7 +283,7 @@ private Integer processDocumentUnsafe(

// Overrides
if (symbolInformation.getOverriddenSymbolsCount() > 0
&& SemanticdbSymbols.isMethod(symbolInformation.getSymbol())
&& supportsReferenceRelationship(symbolInformation)
&& occ.getRole() == Role.DEFINITION) {
List<Integer> overriddenReferenceResultIds =
new ArrayList<>(symbolInformation.getOverriddenSymbolsCount());
Expand All @@ -310,6 +309,17 @@ private Integer processDocumentUnsafe(
return documentId;
}

private static boolean supportsReferenceRelationship(SymbolInformation info) {
switch (info.getKind()) {
case CLASS:
case OBJECT:
case PACKAGE_OBJECT:
return false;
default:
return true;
}
}

private Stream<ScipTextDocument> parseTextDocument(Path semanticdbPath) {
try {
return textDocumentsParseFrom(semanticdbPath).getDocumentsList().stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import java.util.Objects;
import java.util.Optional;

/**
* Utilities to construct SemanticDB symbols.
Expand Down Expand Up @@ -35,8 +34,8 @@ public static boolean isGlobal(String symbol) {
return !isLocal(symbol);
}

public static boolean isMethod(String symbol) {
return symbol.endsWith(").");
public static boolean isMethodOrField(String symbol) {
return symbol.endsWith("#");
}

/**
Expand Down
9 changes: 9 additions & 0 deletions tests/minimized-scala/src/main/scala/minimized/Issue413.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package minimized

trait Issue413 {
val b: Int
}

class Issue413Subclass extends Issue413 {
override val b = 10
}
14 changes: 14 additions & 0 deletions tests/minimized-scala/src/main/scala/minimized/Issue414.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package minimized

object Issue414 {
trait A {
def b(): Unit
}
val a: A =
new A {
override def b(): Unit = {
print("Hello")
}
}
println(a.b())
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package minimized

import scala.language.reflectiveCalls

class ReflectiveCall {
// Reproduction for https://github.com/scalameta/scalameta/issues/2788
val a =
new {
val b = 1
}
println(a.b)
}
18 changes: 18 additions & 0 deletions tests/snapshots/src/main/generated/minimized/Issue413.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package minimized
// ^^^^^^^^^ definition minimized/

trait Issue413 {
// ^^^^^^^^ definition minimized/Issue413# trait Issue413
val b: Int
// ^ definition minimized/Issue413#b. val b: Int
// ^^^ reference scala/Int#
}

class Issue413Subclass extends Issue413 {
// ^^^^^^^^^^^^^^^^ definition minimized/Issue413Subclass# class Issue413Subclass
// definition minimized/Issue413Subclass#`<init>`(). def this()
// ^^^^^^^^ reference minimized/Issue413#
// reference java/lang/Object#`<init>`().
override val b = 10
// ^ definition minimized/Issue413Subclass#b. val b: Int
}
30 changes: 30 additions & 0 deletions tests/snapshots/src/main/generated/minimized/Issue414.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package minimized
// ^^^^^^^^^ definition minimized/

object Issue414 {
// ^^^^^^^^ definition minimized/Issue414. object Issue414
trait A {
// ^ definition minimized/Issue414.A# trait A
def b(): Unit
// ^ definition minimized/Issue414.A#b(). def b(): Unit
// ^^^^ reference scala/Unit#
}
val a: A =
// ^ definition minimized/Issue414.a. val a: A
// ^ reference minimized/Issue414.A#
new A {
// definition local0 final class $anon
// ^ reference minimized/Issue414.A#
// reference java/lang/Object#`<init>`().
override def b(): Unit = {
// ^ definition local1 def b(): Unit
// ^^^^ reference scala/Unit#
print("Hello")
// ^^^^^ reference scala/Predef.print().
}
}
println(a.b())
//^^^^^^^ reference scala/Predef.println(+1).
// ^ reference minimized/Issue414.a.
// ^ reference minimized/Issue414.A#b().
}
23 changes: 23 additions & 0 deletions tests/snapshots/src/main/generated/minimized/ReflectiveCall.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package minimized
// ^^^^^^^^^ definition minimized/

import scala.language.reflectiveCalls
// ^^^^^ reference scala/
// ^^^^^^^^ reference scala/language.
// ^^^^^^^^^^^^^^^ reference scala/language.reflectiveCalls.

class ReflectiveCall {
// ^^^^^^^^^^^^^^ definition minimized/ReflectiveCall# class ReflectiveCall
// definition minimized/ReflectiveCall#`<init>`(). def this()
// Reproduction for https://github.com/scalameta/scalameta/issues/2788
val a =
// ^ definition minimized/ReflectiveCall#a. val a: { val b: Int }
new {
// definition local0 final class $anon
val b = 1
// ^ definition local1 val b: Int
}
println(a.b)
//^^^^^^^ reference scala/Predef.println(+1).
// ^ reference minimized/ReflectiveCall#a.
}