@@ -329,55 +329,50 @@ object ClassfileConstants {
329329 final val impdep1 = 0xfe
330330 final val impdep2 = 0xff
331331
332+ import Flags ._
332333 abstract class FlagTranslation {
333- import Flags ._
334334
335- private var isAnnotation = false
336- private var isClass = false
337- private def initFields (flags : Int ) = {
338- isAnnotation = (flags & JAVA_ACC_ANNOTATION ) != 0
339- isClass = false
340- }
335+ protected def baseFlags (jflags : Int ) = EmptyFlags
336+ protected def isClass : Boolean = false
341337
342338 private def translateFlag (jflag : Int ): FlagSet = (jflag : @ switch) match {
343339 case JAVA_ACC_PRIVATE => Private
344340 case JAVA_ACC_PROTECTED => Protected
345341 case JAVA_ACC_FINAL => Final
346342 case JAVA_ACC_SYNTHETIC => Synthetic
347343 case JAVA_ACC_STATIC => JavaStatic
348- case JAVA_ACC_ABSTRACT => if (isAnnotation) EmptyFlags else if ( isClass) Abstract else Deferred
349- case JAVA_ACC_INTERFACE => if (isAnnotation) EmptyFlags else PureInterfaceCreationFlags | JavaDefined
344+ case JAVA_ACC_ABSTRACT => if (isClass) Abstract else Deferred
345+ case JAVA_ACC_INTERFACE => PureInterfaceCreationFlags | JavaDefined
350346 case _ => EmptyFlags
351347 }
352348
353349 private def addFlag (base : FlagSet , jflag : Int ): FlagSet =
354350 if (jflag == 0 ) base else base | translateFlag(jflag)
355351
356352 private def translateFlags (jflags : Int , baseFlags : FlagSet ): FlagSet = {
353+ val nflags =
354+ if ((jflags & JAVA_ACC_ANNOTATION ) == 0 ) jflags
355+ else jflags & ~ (JAVA_ACC_ABSTRACT | JAVA_ACC_INTERFACE ) // annotations are neither abstract nor interfaces
357356 var res : FlagSet = baseFlags | JavaDefined
358- res = addFlag(res, jflags & JAVA_ACC_PRIVATE )
359- res = addFlag(res, jflags & JAVA_ACC_PROTECTED )
360- res = addFlag(res, jflags & JAVA_ACC_FINAL )
361- res = addFlag(res, jflags & JAVA_ACC_SYNTHETIC )
362- res = addFlag(res, jflags & JAVA_ACC_STATIC )
363- res = addFlag(res, jflags & JAVA_ACC_ABSTRACT )
364- res = addFlag(res, jflags & JAVA_ACC_INTERFACE )
357+ res = addFlag(res, nflags & JAVA_ACC_PRIVATE )
358+ res = addFlag(res, nflags & JAVA_ACC_PROTECTED )
359+ res = addFlag(res, nflags & JAVA_ACC_FINAL )
360+ res = addFlag(res, nflags & JAVA_ACC_SYNTHETIC )
361+ res = addFlag(res, nflags & JAVA_ACC_STATIC )
362+ res = addFlag(res, nflags & JAVA_ACC_ABSTRACT )
363+ res = addFlag(res, nflags & JAVA_ACC_INTERFACE )
365364 res
366365 }
367366
368- def classFlags (jflags : Int ): FlagSet = {
369- initFields(jflags)
370- isClass = true
371- translateFlags(jflags, EmptyFlags )
372- }
373- def fieldFlags (jflags : Int ): FlagSet = {
374- initFields(jflags)
375- translateFlags(jflags, if ((jflags & JAVA_ACC_FINAL ) == 0 ) Mutable else EmptyFlags )
376- }
377- def methodFlags (jflags : Int ): FlagSet = {
378- initFields(jflags)
379- translateFlags(jflags, if ((jflags & JAVA_ACC_BRIDGE ) != 0 ) Bridge else EmptyFlags )
380- }
367+ def flags (jflags : Int ): FlagSet = translateFlags(jflags, baseFlags(jflags))
368+ }
369+ val classTranslation = new FlagTranslation {
370+ override def isClass = true
371+ }
372+ val fieldTranslation = new FlagTranslation {
373+ override def baseFlags (jflags : Int ) = if ((jflags & JAVA_ACC_FINAL ) == 0 ) Mutable else EmptyFlags
374+ }
375+ val methodTranslation = new FlagTranslation {
376+ override def baseFlags (jflags : Int ) = if ((jflags & JAVA_ACC_BRIDGE ) != 0 ) Bridge else EmptyFlags
381377 }
382- object FlagTranslation extends FlagTranslation { }
383378}
0 commit comments