@@ -132,8 +132,8 @@ object JavaParsers {
132132
133133 def makeSyntheticParam (count : Int , tpt : Tree ): ValDef =
134134 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 ))
137137
138138 def makeConstructor (formals : List [Tree ], tparams : List [TypeDef ], flags : FlagSet = Flags .JavaDefined ) = {
139139 val vparams = formals.zipWithIndex.map { case (p, i) => makeSyntheticParam(i + 1 , p) }
@@ -772,7 +772,18 @@ object JavaParsers {
772772 val name = identForType()
773773 val (statics, body) = typeBody(AT , name, List ())
774774 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)
776787 }
777788 val constr = DefDef (nme.CONSTRUCTOR ,
778789 List (), List (constructorParams), TypeTree (), EmptyTree ).withMods(Modifiers (Flags .JavaDefined ))
0 commit comments