Skip to content

Commit

Permalink
Merge pull request #1825 from olafurpg/vararg
Browse files Browse the repository at this point in the history
Fix vararg occurrence bug
  • Loading branch information
olafurpg committed Jan 30, 2019
2 parents 6af3bc2 + fc4ed72 commit 7602bcd
Show file tree
Hide file tree
Showing 10 changed files with 175 additions and 6 deletions.
8 changes: 8 additions & 0 deletions semanticdb/integration/src/main/scala/example/Local.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package example

class Local {
def a() = {
def id[A](a: A): A = a
id(1)
}
}
6 changes: 6 additions & 0 deletions semanticdb/integration/src/main/scala/example/Vararg.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package example

class Vararg {
def add1(a: Int*) = {}
def add2(a: Seq[Int]*): Unit = {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,12 @@ trait TextDocumentOps { self: SemanticdbOps =>
import1,
import2))
}
case gtree: g.AppliedTypeTree =>
if (gtree.symbol.name == g.typeNames.REPEATED_PARAM_CLASS_NAME &&
mstarts.contains(gstart) &&
gtree.args.nonEmpty) {
success(mstarts(gstart), gtree.args.head.symbol)
}
case _ =>
}
}
Expand Down Expand Up @@ -637,6 +643,8 @@ trait TextDocumentOps { self: SemanticdbOps =>
case select: g.Select if isSyntheticName(select) =>
tryFindMtree(select.qualifier)
tryFindSynthetic(select)
case gtree: g.AppliedTypeTree =>
tryFindMtree(gtree)
case _ =>
tryFindMtree(gtree)
}
Expand Down
8 changes: 8 additions & 0 deletions tests/jvm/src/test/resources/example/Local.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package example

class Local/*<=example.Local#*/ {
def a/*<=example.Local#a().*/() = {
def id/*<=local0*/[A/*<=local2*/](a/*<=local1*/: A/*=>local2*/): A/*=>local2*/ = a/*=>local1*/
id/*=>local0*/(1)
}
}
2 changes: 1 addition & 1 deletion tests/jvm/src/test/resources/example/Methods.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Methods/*<=example.Methods#*/[T/*<=example.Methods#[T]*/] {
def m13/*<=example.Methods#m13().*/(x/*<=example.Methods#m13().(x)*/: Int/*=>scala.Int#*/ @unchecked) = ???/*=>scala.Predef.`???`().*/
def m14/*<=example.Methods#m14().*/(x/*<=example.Methods#m14().(x)*/: T/*=>local1*/ forSome { type T/*<=local1*/ }) = ???/*=>scala.Predef.`???`().*/
def m15/*<=example.Methods#m15().*/(x/*<=example.Methods#m15().(x)*/: => Int/*=>scala.Int#*/) = ???/*=>scala.Predef.`???`().*/
def m16/*<=example.Methods#m16().*/(x/*<=example.Methods#m16().(x)*/: Int/*=>scala.`<repeated>`#*/*) = ???/*=>scala.Predef.`???`().*/
def m16/*<=example.Methods#m16().*/(x/*<=example.Methods#m16().(x)*/: Int/*=>scala.Int#*/*) = ???/*=>scala.Predef.`???`().*/
object m17/*<=example.Methods#m17.*/ { def m/*<=example.Methods#m17.m().*/() = ???/*=>scala.Predef.`???`().*/ }
def m17/*<=example.Methods#m17().*/(a/*<=example.Methods#m17().(a)*/: Int/*=>scala.Int#*/) = ???/*=>scala.Predef.`???`().*/
def m17/*<=example.Methods#m17(+1).*/(b/*<=example.Methods#m17(+1).(b)*/: String/*=>scala.Predef.String#*/) = ???/*=>scala.Predef.`???`().*/
Expand Down
4 changes: 2 additions & 2 deletions tests/jvm/src/test/resources/example/Types.scala
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ object Test/*<=types.Test.*/ {
def m1/*<=types.Test.C#ByNameType.m1().*/(x/*<=types.Test.C#ByNameType.m1().(x)*/: => Int/*=>scala.Int#*/): Int/*=>scala.Int#*/ = ???/*=>scala.Predef.`???`().*/
}

case class RepeatedType/*<=types.Test.C#RepeatedType#*/(s/*<=types.Test.C#RepeatedType#s.*/: String/*=>scala.`<repeated>`#*/*) {
def m1/*<=types.Test.C#RepeatedType#m1().*/(x/*<=types.Test.C#RepeatedType#m1().(x)*/: Int/*=>scala.`<repeated>`#*/*): Int/*=>scala.Int#*/ = s/*=>types.Test.C#RepeatedType#s.*/.length/*=>scala.collection.SeqLike#length().*/
case class RepeatedType/*<=types.Test.C#RepeatedType#*/(s/*<=types.Test.C#RepeatedType#s.*/: String/*=>java.lang.String#*/*) {
def m1/*<=types.Test.C#RepeatedType#m1().*/(x/*<=types.Test.C#RepeatedType#m1().(x)*/: Int/*=>scala.Int#*/*): Int/*=>scala.Int#*/ = s/*=>types.Test.C#RepeatedType#s.*/.length/*=>scala.collection.SeqLike#length().*/
}

object TypeType/*<=types.Test.C#TypeType.*/ {
Expand Down
6 changes: 6 additions & 0 deletions tests/jvm/src/test/resources/example/Vararg.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package example

class Vararg/*<=example.Vararg#*/ {
def add1/*<=example.Vararg#add1().*/(a/*<=example.Vararg#add1().(a)*/: Int/*=>scala.Int#*/*) = {}
def add2/*<=example.Vararg#add2().*/(a/*<=example.Vararg#add2().(a)*/: Seq/*=>scala.collection.Seq#*/[Int/*=>scala.Int#*/]*): Unit/*=>scala.Unit#*/ = {}
}
91 changes: 88 additions & 3 deletions tests/jvm/src/test/resources/metac.expect
Original file line number Diff line number Diff line change
Expand Up @@ -1843,6 +1843,48 @@ Synthetics:
[3:2..3:9): locally => *[Int]
Int => scala/Int#

semanticdb/integration/src/main/scala/example/Local.scala
---------------------------------------------------------

Summary:
Schema => SemanticDB v4
Uri => semanticdb/integration/src/main/scala/example/Local.scala
Text => non-empty
Language => Scala
Symbols => 6 entries
Occurrences => 11 entries
Synthetics => 1 entries

Symbols:
example/Local# => class Local extends AnyRef { +2 decls }
AnyRef => scala/AnyRef#
example/Local#`<init>`(). => primary ctor <init>()
example/Local#a(). => method a(): Int
Int => scala/Int#
local0 => method id[A](a: A): A
A => local2
a => local1
local1 => param a: A
A => local2
local2 => typeparam A

Occurrences:
[0:8..0:15): example <= example/
[2:6..2:11): Local <= example/Local#
[2:12..2:12): <= example/Local#`<init>`().
[3:6..3:7): a <= example/Local#a().
[4:8..4:10): id <= local0
[4:11..4:12): A <= local2
[4:14..4:15): a <= local1
[4:17..4:18): A => local2
[4:21..4:22): A => local2
[4:25..4:26): a => local1
[5:4..5:6): id => local0

Synthetics:
[5:4..5:6): id => *[Int]
Int => scala/Int#

semanticdb/integration/src/main/scala/example/Locals.scala
----------------------------------------------------------

Expand Down Expand Up @@ -2376,7 +2418,7 @@ Occurrences:
[29:23..29:26): ??? => scala/Predef.`???`().
[30:6..30:9): m16 <= example/Methods#m16().
[30:10..30:11): x <= example/Methods#m16().(x)
[30:13..30:16): Int => scala/`<repeated>`#
[30:13..30:16): Int => scala/Int#
[30:21..30:24): ??? => scala/Predef.`???`().
[31:9..31:12): m17 <= example/Methods#m17.
[31:19..31:20): m <= example/Methods#m17.m().
Expand Down Expand Up @@ -3847,10 +3889,10 @@ Occurrences:
[89:15..89:27): RepeatedType <= types/Test.C#RepeatedType#
[89:27..89:27): <= types/Test.C#RepeatedType#`<init>`().
[89:28..89:29): s <= types/Test.C#RepeatedType#s.
[89:31..89:37): String => scala/`<repeated>`#
[89:31..89:37): String => java/lang/String#
[90:10..90:12): m1 <= types/Test.C#RepeatedType#m1().
[90:13..90:14): x <= types/Test.C#RepeatedType#m1().(x)
[90:16..90:19): Int => scala/`<repeated>`#
[90:16..90:19): Int => scala/Int#
[90:23..90:26): Int => scala/Int#
[90:29..90:30): s => types/Test.C#RepeatedType#s.
[90:31..90:37): length => scala/collection/SeqLike#length().
Expand Down Expand Up @@ -4272,3 +4314,46 @@ Occurrences:
[45:16..45:17): + => scala/Int#`+`(+4).
[45:18..45:19): v => example/ValUsages.v.
[45:20..45:23): yim => example/Vals#yim().

semanticdb/integration/src/main/scala/example/Vararg.scala
----------------------------------------------------------

Summary:
Schema => SemanticDB v4
Uri => semanticdb/integration/src/main/scala/example/Vararg.scala
Text => non-empty
Language => Scala
Symbols => 6 entries
Occurrences => 11 entries

Symbols:
example/Vararg# => class Vararg extends AnyRef { +3 decls }
AnyRef => scala/AnyRef#
example/Vararg#`<init>`(). => primary ctor <init>()
example/Vararg#add1(). => method add1(a: Int*): Unit
a => example/Vararg#add1().(a)
Int => scala/Int#
Unit => scala/Unit#
example/Vararg#add1().(a) => param a: Int*
Int => scala/Int#
example/Vararg#add2(). => method add2(a: Seq[Int]*): Unit
a => example/Vararg#add2().(a)
Seq => scala/package.Seq#
Int => scala/Int#
Unit => scala/Unit#
example/Vararg#add2().(a) => param a: Seq[Int]*
Seq => scala/package.Seq#
Int => scala/Int#

Occurrences:
[0:8..0:15): example <= example/
[2:6..2:12): Vararg <= example/Vararg#
[2:13..2:13): <= example/Vararg#`<init>`().
[3:6..3:10): add1 <= example/Vararg#add1().
[3:11..3:12): a <= example/Vararg#add1().(a)
[3:14..3:17): Int => scala/Int#
[4:6..4:10): add2 <= example/Vararg#add2().
[4:11..4:12): a <= example/Vararg#add2().(a)
[4:14..4:17): Seq => scala/collection/Seq#
[4:18..4:21): Int => scala/Int#
[4:26..4:30): Unit => scala/Unit#
46 changes: 46 additions & 0 deletions tests/jvm/src/test/resources/metacp.expect
Original file line number Diff line number Diff line change
Expand Up @@ -1797,6 +1797,23 @@ example/`local-file`# => class local-file extends AnyRef { +1 decls }
AnyRef => scala/AnyRef#
example/`local-file`#`<init>`(). => primary ctor <init>()

example/Local.class
-------------------

Summary:
Schema => SemanticDB v4
Uri => example/Local.class
Text => empty
Language => Scala
Symbols => 3 entries

Symbols:
example/Local# => class Local extends AnyRef { +2 decls }
AnyRef => scala/AnyRef#
example/Local#`<init>`(). => primary ctor <init>()
example/Local#a(). => method a(): Int
Int => scala/Int#

example/MacroAnnotations.class
------------------------------

Expand Down Expand Up @@ -2465,6 +2482,35 @@ example/ValUsages. => final object ValUsages extends AnyRef { +1 decls }
example/ValUsages.v. => val method v: Vals
Vals => example/Vals#

example/Vararg.class
--------------------

Summary:
Schema => SemanticDB v4
Uri => example/Vararg.class
Text => empty
Language => Scala
Symbols => 6 entries

Symbols:
example/Vararg# => class Vararg extends AnyRef { +3 decls }
AnyRef => scala/AnyRef#
example/Vararg#`<init>`(). => primary ctor <init>()
example/Vararg#add1(). => method add1(a: Int*): Unit
a => example/Vararg#add1().(a)
Int => scala/Int#
Unit => scala/Unit#
example/Vararg#add1().(a) => param a: Int*
Int => scala/Int#
example/Vararg#add2(). => method add2(a: Seq[Int]*): Unit
a => example/Vararg#add2().(a)
Seq => scala/package.Seq#
Int => scala/Int#
Unit => scala/Unit#
example/Vararg#add2().(a) => param a: Seq[Int]*
Seq => scala/package.Seq#
Int => scala/Int#

exclude/Exclude.class
---------------------

Expand Down
2 changes: 2 additions & 0 deletions tests/jvm/src/test/resources/metai.expect
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ example/ForComprehension# => semanticdb/integration/src/main/scala/example/ForCo
example/ImplicitConversion# => semanticdb/integration/src/main/scala/example/ImplicitConversion.scala.semanticdb
example/InstrumentTyper# => semanticdb/integration/src/main/scala/example/InstrumentTyper.scala.semanticdb
example/Issue1749# => semanticdb/integration/src/main/scala/example/Issue1749.scala.semanticdb
example/Local# => semanticdb/integration/src/main/scala/example/Local.scala.semanticdb
example/MacroAnnotations# => semanticdb/integration/src/main/scala/example/MacroAnnotations.scala.semanticdb
example/MacroAnnotations. => semanticdb/integration/src/main/scala/example/MacroAnnotations.scala.semanticdb
example/MetacJava# => semanticdb/integration/src/main/scala/example/MetacJava.scala.semanticdb
Expand All @@ -51,6 +52,7 @@ example/Synthetic# => semanticdb/integration/src/main/scala/example/Synthetic.sc
example/ValPattern# => semanticdb/integration/src/main/scala/example/ValPattern.scala.semanticdb
example/ValUsages. => semanticdb/integration/src/main/scala/example/Vals.scala.semanticdb
example/Vals# => semanticdb/integration/src/main/scala/example/Vals.scala.semanticdb
example/Vararg# => semanticdb/integration/src/main/scala/example/Vararg.scala.semanticdb
example/`local-file`# => semanticdb/integration/src/main/scala/example/local-file.scala.semanticdb
flags/ => package flags
flags/p/ => package p
Expand Down

0 comments on commit 7602bcd

Please sign in to comment.