Set the superclass of the value map inner class to be Object. Every class deserves to have a superclass. Review by: scottb@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8227 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java index 0969d62..bf45e4c 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java +++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -2036,7 +2036,7 @@ JMethod bridgeMethod = program.createMethod(info, String.valueOf(jdtBridgeMethod.selector), clazz, (JType) typeMap.get(jdtBridgeMethod.returnType.erasure()), false, - false, true, false, false); + false, implmeth.isFinal(), false, false); bridgeMethod.setSynthetic(); int paramIdx = 0; List<JParameter> implParams = implmeth.getParams(); @@ -2750,6 +2750,7 @@ JavaASTGenerationVisitor.class, "Enum$Map"); JClassType mapClass = program.createClass(sourceInfo, type.getName() + "$Map", false, true); + mapClass.setSuperClass(program.getTypeJavaLangObject()); mapField = program.createField(sourceInfo, "$MAP", mapClass, program.getJavaScriptObject(), true, Disposition.FINAL); @@ -2804,7 +2805,16 @@ JDeclarationStatement declStmt = new JDeclarationStatement(sourceInfo, valuesRef, newExpr); JBlock clinitBlock = ((JMethodBody) type.getMethods().get(0).getBody()).getBlock(); - clinitBlock.addStmt(declStmt); + + /* + * HACKY: the $VALUES array must be initialized immediately after all of + * the enum fields, but before any user initialization (which might rely + * on $VALUES). The "1 + " is the statement containing the call to + * Enum.$clinit(). + */ + int insertionPoint = 1 + initializers.size(); + assert clinitBlock.getStatements().size() >= initializers.size() + 1; + clinitBlock.addStmt(insertionPoint, declStmt); valuesField.setInitializer(declStmt); } {