@@ -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,10 +29,13 @@ 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
- override def phaseName = " companions"
35
+ override def phaseName = " firstTransform"
36
+
37
+
38
+ def transformInfo (tp : Type , sym : Symbol )(implicit ctx : Context ): Type = tp
34
39
35
40
override def checkPostCondition (tree : Tree )(implicit ctx : Context ): Unit = tree match {
36
41
case Select (qual, _) if tree.symbol.exists =>
@@ -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 ) =
86
- if (ddef.symbol.hasAnnotation(defn.NativeAnnot )) {
87
- ddef.symbol.resetFlag(Deferred )
88
- DefDef (ddef.symbol.asTerm,
89
- _ => ref(defn.Sys_error ).withPos(ddef.pos)
90
- .appliedTo(Literal (Constant (" native method stub" ))))
91
- } else ddef
90
+ override def transformDefDef (ddef : DefDef )(implicit ctx : Context , info : TransformerInfo ) = {
91
+ val r =
92
+ if (ddef.symbol.hasAnnotation(defn.NativeAnnot )) {
93
+ ddef.symbol.resetFlag(Deferred )
94
+ DefDef (ddef.symbol.asTerm,
95
+ _ => ref(defn.Sys_error ).withPos(ddef.pos)
96
+ .appliedTo(Literal (Constant (" native method stub" ))))
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