@@ -3,7 +3,7 @@ package transform
3
3
4
4
import core ._
5
5
import Names ._
6
- import TreeTransforms .{TransformerInfo , MiniPhaseTransform , TreeTransformer }
6
+ import dotty . tools . dotc . transform . TreeTransforms .{AnnotationTransformer , TransformerInfo , MiniPhaseTransform , TreeTransformer }
7
7
import ast .Trees ._
8
8
import Flags ._
9
9
import Types ._
@@ -12,6 +12,8 @@ import Contexts.Context
12
12
import Symbols ._
13
13
import SymDenotations ._
14
14
import Decorators ._
15
+ import dotty .tools .dotc .core .Annotations .ConcreteAnnotation
16
+ import dotty .tools .dotc .core .Denotations .SingleDenotation
15
17
import scala .collection .mutable
16
18
import DenotTransformers ._
17
19
import typer .Checking
@@ -27,11 +29,14 @@ import NameOps._
27
29
* - checks the bounds of AppliedTypeTrees
28
30
* - stubs out native methods
29
31
*/
30
- class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer { thisTransformer =>
32
+ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer with AnnotationTransformer { thisTransformer =>
31
33
import ast .tpd ._
32
34
33
35
override def phaseName = " firstTransform"
34
36
37
+
38
+ def transformInfo (tp : Type , sym : Symbol )(implicit ctx : Context ): Type = tp
39
+
35
40
override def checkPostCondition (tree : Tree )(implicit ctx : Context ): Unit = tree match {
36
41
case Select (qual, _) if tree.symbol.exists =>
37
42
assert(qual.tpe derivesFrom tree.symbol.owner, i " non member selection of ${tree.symbol.showLocated} from ${qual.tpe}" )
@@ -82,13 +87,16 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer {
82
87
addMissingCompanions(reorder(stats))
83
88
}
84
89
85
- override def transformDefDef (ddef : DefDef )(implicit ctx : Context , info : TransformerInfo ) =
90
+ override def transformDefDef (ddef : DefDef )(implicit ctx : Context , info : TransformerInfo ) = {
91
+ val r =
86
92
if (ddef.symbol.hasAnnotation(defn.NativeAnnot )) {
87
93
ddef.symbol.resetFlag(Deferred )
88
94
DefDef (ddef.symbol.asTerm,
89
95
_ => ref(defn.Sys_error ).withPos(ddef.pos)
90
96
.appliedTo(Literal (Constant (" native method stub" ))))
91
97
} else ddef
98
+ transformAnnotations(r)
99
+ }
92
100
93
101
override def transformStats (trees : List [Tree ])(implicit ctx : Context , info : TransformerInfo ): List [Tree ] =
94
102
ast.Trees .flatten(reorderAndComplete(trees)(ctx.withPhase(thisTransformer.next)))
@@ -107,6 +115,8 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer {
107
115
case _ => normalizeType(tree)
108
116
}
109
117
118
+
119
+
110
120
override def transformSelect (tree : Select )(implicit ctx : Context , info : TransformerInfo ) =
111
121
normalizeType {
112
122
val qual = tree.qualifier
0 commit comments