Skip to content

Commit bd906c4

Browse files
committed
test throw and inlined defs
1 parent 8ac0e64 commit bd906c4

File tree

6 files changed

+122
-5
lines changed

6 files changed

+122
-5
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,27 +81,33 @@ class ExtractSemanticDB extends Phase:
8181
|| excludeDefOrUse(sym)
8282

8383
private def excludeDefOrUse(sym: Symbol)(using Context): Boolean =
84-
sym.name.is(NameKinds.DefaultGetterName)
84+
!sym.exists
85+
|| sym.name.is(NameKinds.DefaultGetterName)
8586
|| sym.isConstructor && (sym.owner.is(ModuleClass) || !sym.isGlobal)
8687
|| excludeSymbol(sym)
8788

8889
private def excludeSymbol(sym: Symbol)(using Context): Boolean =
89-
sym.name.isWildcard
90+
!sym.exists
91+
|| sym.name.isWildcard
9092
|| excludeQual(sym)
9193

9294
private def excludeQual(sym: Symbol)(using Context): Boolean =
93-
sym.isAnonymousFunction
95+
!sym.exists
96+
|| sym.isAnonymousFunction
9497
|| sym.isAnonymousModuleVal
9598
|| sym.name.isEmptyNumbered
9699

97100
private def excludeChildren(sym: Symbol)(using Context): Boolean =
98-
sym.isAllOf(HigherKinded | Param)
101+
!sym.exists
102+
|| sym.isAllOf(HigherKinded | Param)
99103

100104
/** Uses of this symbol where the reference has given span should be excluded from semanticdb */
101105
private def excludeUse(qualifier: Option[Symbol], sym: Symbol)(using Context): Boolean =
102-
excludeDefOrUse(sym)
106+
!sym.exists
107+
|| excludeDefOrUse(sym)
103108
|| sym.isConstructor && sym.owner.isAnnotation
104109
|| sym == defn.Any_typeCast
110+
|| sym.owner == defn.OpsPackageClass
105111
|| qualifier.exists(excludeQual)
106112

107113
private def traverseAnnotsOfDefinition(sym: Symbol)(using Context): Unit =
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package inlineconsume
2+
3+
import inlinedefs.FakePredef/*->inlinedefs::FakePredef.*/.assert/*->inlinedefs::FakePredef.assert().*/
4+
5+
class Foo/*<-inlineconsume::Foo#*/:
6+
def test/*<-inlineconsume::Foo#test().*/ = assert/*->inlinedefs::FakePredef.assert().*/(3 >/*->scala::Int#`>`(+3).*/ 2)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package inlineconsume
2+
3+
import inlinedefs.FakePredef.assert
4+
5+
class Foo:
6+
def test = assert(3 > 2)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package inlinedefs
2+
3+
object FakePredef/*<-inlinedefs::FakePredef.*/:
4+
5+
def assertFail/*<-inlinedefs::FakePredef.assertFail().*/(): Nothing/*->scala::Nothing#*/ = throw new java.lang.AssertionError/*->java::lang::AssertionError#*//*->java::lang::AssertionError#`<init>`(+2).*/("assertion failed")
6+
7+
/** Super long padded documentation
8+
* Lorem ipsum dolor sit amet, consectetur adipiscing elit,
9+
* sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
10+
* Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
11+
* nisi ut aliquip ex ea commodo consequat.
12+
* Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
13+
* dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
14+
* sunt in culpa qui officia deserunt mollit anim id est laborum.
15+
*/
16+
transparent inline final def assert/*<-inlinedefs::FakePredef.assert().*/(inline assertion/*<-inlinedefs::FakePredef.assert().(assertion)*/: Boolean/*->scala::Boolean#*/): Unit/*->scala::Unit#*/ = {
17+
if (!assertion/*->inlinedefs::FakePredef.assert().(assertion)*//*->scala::Boolean#`unary_!`().*/)
18+
assertFail/*->inlinedefs::FakePredef.assertFail().*/()
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package inlinedefs
2+
3+
object FakePredef:
4+
5+
def assertFail(): Nothing = throw new java.lang.AssertionError("assertion failed")
6+
7+
/** Super long padded documentation
8+
* Lorem ipsum dolor sit amet, consectetur adipiscing elit,
9+
* sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
10+
* Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
11+
* nisi ut aliquip ex ea commodo consequat.
12+
* Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
13+
* dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
14+
* sunt in culpa qui officia deserunt mollit anim id est laborum.
15+
*/
16+
transparent inline final def assert(inline assertion: Boolean): Unit = {
17+
if (!assertion)
18+
assertFail()
19+
}

tests/semanticdb/metac.expect

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2999,6 +2999,67 @@ Occurrences:
29992999
[2:0..2:0): <- example/FilenameWithSpaces#`<init>`().
30003000
[2:6..2:24): FilenameWithSpaces <- example/FilenameWithSpaces#
30013001

3002+
expect/inlineconsume.scala
3003+
--------------------------
3004+
3005+
Summary:
3006+
Schema => SemanticDB v4
3007+
Uri => inlineconsume.scala
3008+
Text => empty
3009+
Language => Scala
3010+
Symbols => 3 entries
3011+
Occurrences => 9 entries
3012+
3013+
Symbols:
3014+
inlineconsume/Foo# => class Foo
3015+
inlineconsume/Foo#`<init>`(). => primary ctor <init>
3016+
inlineconsume/Foo#test(). => method test
3017+
3018+
Occurrences:
3019+
[0:8..0:21): inlineconsume <- inlineconsume/
3020+
[2:7..2:17): inlinedefs -> inlinedefs/
3021+
[2:18..2:28): FakePredef -> inlinedefs/FakePredef.
3022+
[2:29..2:35): assert -> inlinedefs/FakePredef.assert().
3023+
[4:6..4:9): Foo <- inlineconsume/Foo#
3024+
[5:2..5:2): <- inlineconsume/Foo#`<init>`().
3025+
[5:6..5:10): test <- inlineconsume/Foo#test().
3026+
[5:13..5:19): assert -> inlinedefs/FakePredef.assert().
3027+
[5:22..5:23): > -> scala/Int#`>`(+3).
3028+
3029+
expect/inlinedefs.scala
3030+
-----------------------
3031+
3032+
Summary:
3033+
Schema => SemanticDB v4
3034+
Uri => inlinedefs.scala
3035+
Text => empty
3036+
Language => Scala
3037+
Symbols => 4 entries
3038+
Occurrences => 15 entries
3039+
3040+
Symbols:
3041+
inlinedefs/FakePredef. => final object FakePredef
3042+
inlinedefs/FakePredef.assert(). => final macro assert
3043+
inlinedefs/FakePredef.assert().(assertion) => param assertion
3044+
inlinedefs/FakePredef.assertFail(). => method assertFail
3045+
3046+
Occurrences:
3047+
[0:8..0:18): inlinedefs <- inlinedefs/
3048+
[2:7..2:17): FakePredef <- inlinedefs/FakePredef.
3049+
[4:6..4:16): assertFail <- inlinedefs/FakePredef.assertFail().
3050+
[4:20..4:27): Nothing -> scala/Nothing#
3051+
[4:40..4:44): java -> java/
3052+
[4:45..4:49): lang -> java/lang/
3053+
[4:50..4:64): AssertionError -> java/lang/AssertionError#
3054+
[4:64..4:64): -> java/lang/AssertionError#`<init>`(+2).
3055+
[15:31..15:37): assert <- inlinedefs/FakePredef.assert().
3056+
[15:45..15:54): assertion <- inlinedefs/FakePredef.assert().(assertion)
3057+
[15:56..15:63): Boolean -> scala/Boolean#
3058+
[15:66..15:70): Unit -> scala/Unit#
3059+
[16:9..16:18): assertion -> inlinedefs/FakePredef.assert().(assertion)
3060+
[16:18..16:18): -> scala/Boolean#`unary_!`().
3061+
[17:6..17:16): assertFail -> inlinedefs/FakePredef.assertFail().
3062+
30023063
expect/local-file.scala
30033064
-----------------------
30043065

0 commit comments

Comments
 (0)