summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-08-18 17:18:51 +0000
committerMartin Odersky <odersky@gmail.com>2008-08-18 17:18:51 +0000
commit6bddfbb6d3a2dca82e71d0b9f531054c1a06d701 (patch)
treeadf8bf552554732a11224888c36f404d259e853e /src/compiler/scala/tools/nsc/javac/JavaParsers.scala
parent616d3e4597b65572ea9d6b45846d7380782b1f60 (diff)
downloadscala-6bddfbb6d3a2dca82e71d0b9f531054c1a06d701.tar.gz
scala-6bddfbb6d3a2dca82e71d0b9f531054c1a06d701.tar.bz2
scala-6bddfbb6d3a2dca82e71d0b9f531054c1a06d701.zip
Fixed #1231
Diffstat (limited to 'src/compiler/scala/tools/nsc/javac/JavaParsers.scala')
-rwxr-xr-xsrc/compiler/scala/tools/nsc/javac/JavaParsers.scala22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
index f38f0cde1e..a0ee29edc9 100755
--- a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
+++ b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
@@ -488,8 +488,10 @@ trait JavaParsers extends JavaScanners {
blankExpr
}
+ def definesInterface(token: Int) = token == INTERFACE || token == AT
+
def termDecl(mods: Modifiers, parentToken: Int): List[Tree] = {
- val inInterface = parentToken == INTERFACE || parentToken == AT
+ val inInterface = definesInterface(parentToken)
val tparams = if (in.token == LT) typeParams() else List()
val isVoid = in.token == VOID
var rtpt =
@@ -548,7 +550,7 @@ trait JavaParsers extends JavaScanners {
}
}
} else {
- if (inInterface) mods1 |= Flags.FINAL
+ if (inInterface) mods1 |= Flags.FINAL | Flags.STATIC
val result = fieldDecls(pos, mods1, rtpt, name)
accept(SEMI)
result
@@ -605,8 +607,10 @@ trait JavaParsers extends JavaScanners {
}
def memberDecl(mods: Modifiers, parentToken: Int): List[Tree] = in.token match {
- case CLASS | ENUM | INTERFACE | AT => typeDecl(mods)
- case _ => termDecl(mods, parentToken)
+ case CLASS | ENUM | INTERFACE | AT =>
+ typeDecl(if (definesInterface(parentToken)) mods | Flags.STATIC else mods)
+ case _ =>
+ termDecl(mods, parentToken)
}
def makeCompanionObject(cdef: ClassDef, statics: List[Tree]): Tree =
@@ -715,7 +719,7 @@ trait JavaParsers extends JavaScanners {
}
def typeBodyDecls(parentToken: Int): (List[Tree], List[Tree]) = {
- val inInterface = parentToken == INTERFACE || parentToken == AT
+ val inInterface = definesInterface(parentToken)
val statics = new ListBuffer[Tree]
val members = new ListBuffer[Tree]
while (in.token != RBRACE && in.token != EOF) {
@@ -726,7 +730,7 @@ trait JavaParsers extends JavaScanners {
} else if (in.token == SEMI) {
in.nextToken
} else {
- if (in.token == ENUM || in.token == INTERFACE) mods |= Flags.STATIC
+ if (in.token == ENUM || definesInterface(in.token)) mods |= Flags.STATIC
val decls = memberDecl(mods, parentToken)
(if ((mods hasFlag Flags.STATIC) || inInterface && !(decls exists (_.isInstanceOf[DefDef])))
statics
@@ -786,12 +790,12 @@ trait JavaParsers extends JavaScanners {
}
val predefs = List(
DefDef(
- Modifiers(Flags.JAVA), newTermName("values"), List(),
+ Modifiers(Flags.JAVA | Flags.STATIC), newTermName("values"), List(),
List(List()),
arrayOf(enumType),
blankExpr),
DefDef(
- Modifiers(Flags.JAVA), newTermName("valueOf"), List(),
+ Modifiers(Flags.JAVA | Flags.STATIC), newTermName("valueOf"), List(),
List(List(makeParam(newTermName("x"), TypeTree(StringClass.tpe)))),
enumType,
blankExpr))
@@ -818,7 +822,7 @@ trait JavaParsers extends JavaScanners {
skipAhead()
accept(RBRACE)
}
- ValDef(Modifiers(Flags.JAVA), name, enumType, blankExpr)
+ ValDef(Modifiers(Flags.JAVA | Flags.STATIC), name, enumType, blankExpr)
}
}