@@ -329,55 +329,50 @@ object ClassfileConstants {
329
329
final val impdep1 = 0xfe
330
330
final val impdep2 = 0xff
331
331
332
+ import Flags ._
332
333
abstract class FlagTranslation {
333
- import Flags ._
334
334
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
341
337
342
338
private def translateFlag (jflag : Int ): FlagSet = (jflag : @ switch) match {
343
339
case JAVA_ACC_PRIVATE => Private
344
340
case JAVA_ACC_PROTECTED => Protected
345
341
case JAVA_ACC_FINAL => Final
346
342
case JAVA_ACC_SYNTHETIC => Synthetic
347
343
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
350
346
case _ => EmptyFlags
351
347
}
352
348
353
349
private def addFlag (base : FlagSet , jflag : Int ): FlagSet =
354
350
if (jflag == 0 ) base else base | translateFlag(jflag)
355
351
356
352
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
357
356
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 )
365
364
res
366
365
}
367
366
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
381
377
}
382
- object FlagTranslation extends FlagTranslation { }
383
378
}
0 commit comments