JEnumType.getEnumContants() were not being returned in declaration order. This patch updates the AbstractMembers classes to use LinkedHashMaps so that the insertion order is preserved. JDT visits fields and methods in declaration order so this also addresses the problem with enumeration constants. JEnumTypeTest was updated accordingly.
Review by: spoon
Suggested by: tobyr
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2068 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
index 2502013..d595bd5 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -16,7 +16,7 @@
package com.google.gwt.core.ext.typeinfo;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -70,7 +70,7 @@
*/
return lazyFields;
}
- lazyFields = new HashMap<String, JField>();
+ lazyFields = new LinkedHashMap<String, JField>();
JField[] baseFields = baseType.getFields();
for (JField baseField : baseFields) {
@@ -91,7 +91,7 @@
*/
return lazyMethods;
}
- lazyMethods = new HashMap<String, List<JMethod>>();
+ lazyMethods = new LinkedHashMap<String, List<JMethod>>();
JMethod[] baseMethods = baseType.getMethods();
for (JMethod baseMethod : baseMethods) {
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
index 7ff2d8b..a4cc289 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -16,7 +16,7 @@
package com.google.gwt.core.ext.typeinfo;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -25,8 +25,8 @@
*/
class Members extends AbstractMembers {
private final List<JConstructor> constructors = new ArrayList<JConstructor>();
- private final Map<String, JField> fields = new HashMap<String, JField>();
- private final Map<String, List<JMethod>> methods = new HashMap<String, List<JMethod>>();
+ private final Map<String, JField> fields = new LinkedHashMap<String, JField>();
+ private final Map<String, List<JMethod>> methods = new LinkedHashMap<String, List<JMethod>>();
public Members(JClassType classType) {
super(classType);
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
index fdc1b38..7ec4612 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -53,10 +53,15 @@
JEnumConstant[] enumConstants = enumType.getEnumConstants();
assertEquals(3, enumConstants.length);
- for (JEnumConstant enumConstant : enumConstants) {
- assertEquals(
- Integer.parseInt(enumConstant.getName().substring(3)),
- enumConstant.getOrdinal());
+ for (int i = 0; i < enumConstants.length; ++i) {
+ JEnumConstant enumConstant = enumConstants[i];
+ // Check the ordinal
+ assertEquals(i, enumConstant.getOrdinal());
+
+ // Check that the name matches what reflection expects at the current
+ // ordinal.
+ assertEquals(MyEnum.class.getEnumConstants()[i].name(),
+ enumConstant.getName());
}
}
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
index d703461..9ee5a1b 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -18,18 +18,16 @@
/**
* Enumerated type used in the
* {@link com.google.gwt.core.ext.typeinfo.JEnumTypeTest}.
- *
- * NOTE: do not reorder the enumerated values
*/
public enum MyEnum {
- @Deprecated
- VAL0(-1) {
+
+ VAL2(-3) {
@Override
public int getId() {
return instanceField;
}
},
-
+
VAL1(-2) {
@Override
public int getId() {
@@ -37,7 +35,8 @@
}
},
- VAL2(-3) {
+ @Deprecated
+ VAL0(-1) {
@Override
public int getId() {
return instanceField;