| Index: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| diff --git a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| index 895474515596b1d8a3ac97cd6ba8360b927e6efd..c8c5b81915c628907765fe46c0c3e9d37037c331 100644
|
| --- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| +++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| @@ -223,9 +223,14 @@ public class MemberBuilder {
|
|
|
| private FieldElement buildField(DartField fieldNode, Type type) {
|
| assert !fieldNode.getModifiers().isAbstractField();
|
| + Modifiers modifiers = fieldNode.getModifiers();
|
| + if (modifiers.isFinal() && (modifiers.isStatic() || inTopLevelContext())) {
|
| + // final toplevel fields are implicitly compile-time constants.
|
| + modifiers = modifiers.makeConstant();
|
| + }
|
| FieldElement fieldElement = fieldNode.getSymbol();
|
| if (fieldElement == null) {
|
| - fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, fieldNode.getModifiers());
|
| + fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, modifiers);
|
| addField(currentHolder, fieldElement);
|
| } else {
|
| // This is a top-level element, and an element was already created in
|
| @@ -243,6 +248,10 @@ public class MemberBuilder {
|
| }
|
| }
|
|
|
| + private boolean inTopLevelContext() {
|
| + return context == topLevelContext;
|
| + }
|
| +
|
| /**
|
| * Creates FieldElement for AST getters and setters.
|
| *
|
|
|