@@ -132,8 +132,8 @@ object JavaParsers {
132
132
133
133
def makeSyntheticParam (count : Int , tpt : Tree ): ValDef =
134
134
makeParam(nme.syntheticParamName(count), tpt)
135
- def makeParam (name : TermName , tpt : Tree ): ValDef =
136
- ValDef (name, tpt, EmptyTree ).withMods(Modifiers (Flags .JavaDefined | Flags .ParamAccessor ))
135
+ def makeParam (name : TermName , tpt : Tree , defaultValue : Tree = EmptyTree ): ValDef =
136
+ ValDef (name, tpt, defaultValue ).withMods(Modifiers (Flags .JavaDefined | Flags .ParamAccessor ))
137
137
138
138
def makeConstructor (formals : List [Tree ], tparams : List [TypeDef ], flags : FlagSet = Flags .JavaDefined ) = {
139
139
val vparams = formals.zipWithIndex.map { case (p, i) => makeSyntheticParam(i + 1 , p) }
@@ -772,7 +772,18 @@ object JavaParsers {
772
772
val name = identForType()
773
773
val (statics, body) = typeBody(AT , name, List ())
774
774
val constructorParams = body.collect {
775
- case dd : DefDef => makeParam(dd.name, dd.tpt)
775
+ case dd : DefDef =>
776
+ val hasDefault =
777
+ dd.mods.annotations.exists {
778
+ case Apply (Select (New (Select (_, tpnme.AnnotationDefaultATTR )), nme.CONSTRUCTOR ), Nil ) =>
779
+ true
780
+ case _ =>
781
+ false
782
+ }
783
+ // If the annotation has a default value we don't need to parse it, providing
784
+ // any value at all is enough to typecheck usages of annotations correctly.
785
+ val defaultParam = if (hasDefault) unimplementedExpr else EmptyTree
786
+ makeParam(dd.name, dd.tpt, defaultParam)
776
787
}
777
788
val constr = DefDef (nme.CONSTRUCTOR ,
778
789
List (), List (constructorParams), TypeTree (), EmptyTree ).withMods(Modifiers (Flags .JavaDefined ))
0 commit comments