Revert "FIX: LookupMethodCreator create too large method #8611"
This reverts commit b00c7074583e2ec3bfca46c7ee53685d1ae37ff5.
Change-Id: I0f306213a7fd6e8934d6e3c1091adc352da5c121
diff --git a/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java b/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
index 71f7260..fed873c 100644
--- a/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
+++ b/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
@@ -1,14 +1,16 @@
/*
* 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 the License at
+ * 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
+ * the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.i18n.rebind;
@@ -29,48 +31,23 @@
* Method creator to call the correct Map for the given Dictionary.
*/
class LookupMethodCreator extends AbstractMethodCreator {
-
- /**
- * Used partition size if no one is specified.
- *
- * Used in constructor without a partition size.
- */
- private static final int DEFAULT_PARTITIONS_SIZE = 500;
-
private JType returnType;
- private final int partitionsSize;
-
- /**
- * Constructor for <code>LookupMethodCreator</code>. The default partition size of 500 is used.
- *
- * @param classCreator parent class creator
- * @param returnType associated return type
- *
- * @see LookupMethodCreator#DEFAULT_PARTITIONS_SIZE
- */
- public LookupMethodCreator(AbstractGeneratorClassCreator classCreator, JType returnType) {
- this(classCreator, returnType, DEFAULT_PARTITIONS_SIZE);
- this.returnType = returnType;
- }
-
/**
* Constructor for <code>LookupMethodCreator</code>.
*
* @param classCreator parent class creator
* @param returnType associated return type
- * @param partitionsSize max numbers of lookups per method.
*/
- public LookupMethodCreator(AbstractGeneratorClassCreator classCreator, JType returnType,
- int partitionsSize) {
+ public LookupMethodCreator(AbstractGeneratorClassCreator classCreator,
+ JType returnType) {
super(classCreator);
this.returnType = returnType;
- this.partitionsSize = partitionsSize;
}
@Override
- public void createMethodFor(TreeLogger logger, JMethod targetMethod, String key,
- ResourceList resourceList, GwtLocale locale) {
+ public void createMethodFor(TreeLogger logger, JMethod targetMethod,
+ String key, ResourceList resourceList, GwtLocale locale) {
createMethodFor(targetMethod);
}
@@ -88,15 +65,6 @@
return type;
}
- void printLookup(String methodName) {
- String body = "if(arg0.equals(" + wrap(methodName) + ")) {";
- println(body);
- indent();
- printFound(methodName);
- outdent();
- println("}");
- }
-
void createMethodFor(JMethod targetMethod) {
String template = "{0} target = ({0}) cache.get(arg0);";
String returnTypeName = getReturnTypeName();
@@ -108,52 +76,24 @@
outdent();
println("}");
JMethod[] methods = ((ConstantsWithLookupImplCreator) currentCreator).allInterfaceMethods;
-
- final int partitions = (methods.length / partitionsSize) + 1;
- println(returnTypeName + " tmp;");
- for (int i = 0; i < partitions; i++) {
- println("tmp = " + targetMethod.getName() + i + "(arg0);");
- println("if (tmp != null) {");
- indent();
- println("return tmp;");
- outdent();
- println("}");
- }
-
- String format = "throw new java.util.MissingResourceException(\"Cannot find constant ''\" +"
- + "{0} + \"''; expecting a method name\", \"{1}\", {0});";
- String result = MessageFormat.format(format, "arg0", this.currentCreator.getTarget()
- .getQualifiedSourceName());
- println(result);
- outdent();
- println("}");
-
- println("");
-
- final String argument0Type = targetMethod.getParameterTypes()[0].getQualifiedSourceName();
- for (int p = 0; p < partitions; p++) {
- final String templateNewMethod = "private {0} {1}{2}({3} arg0) '{";
- final String header = MessageFormat.format(templateNewMethod, new Object[] {
- returnTypeName, targetMethod.getName(), p, argument0Type});
- println(header);
- indent();
- final JType erasedType = returnType.getErasedType();
- for (int i = 0 + p * partitionsSize; i < methods.length && i < (p + 1)
- * partitionsSize; i++) {
- final JMethod method = methods[i];
- if (method.getReturnType().getErasedType().equals(erasedType) && method != targetMethod) {
- String methodName = method.getName();
- printLookup(methodName);
- }
- }
-
- println("return null;");
- if (p < partitions - 1) {
+ JType erasedType = returnType.getErasedType();
+ for (int i = 0; i < methods.length; i++) {
+ if (methods[i].getReturnType().getErasedType().equals(erasedType)
+ && methods[i] != targetMethod) {
+ String methodName = methods[i].getName();
+ String body = "if(arg0.equals(" + wrap(methodName) + ")) {";
+ println(body);
+ indent();
+ printFound(methodName);
outdent();
println("}");
- println("");
}
}
+ String format = "throw new java.util.MissingResourceException(\"Cannot find constant ''\" +"
+ + "{0} + \"''; expecting a method name\", \"{1}\", {0});";
+ String result = MessageFormat.format(format, "arg0",
+ this.currentCreator.getTarget().getQualifiedSourceName());
+ println(result);
}
void printFound(String methodName) {
diff --git a/user/src/com/google/gwt/user/rebind/AbstractSourceCreator.java b/user/src/com/google/gwt/user/rebind/AbstractSourceCreator.java
index ebe7fa3..5f5e31f 100644
--- a/user/src/com/google/gwt/user/rebind/AbstractSourceCreator.java
+++ b/user/src/com/google/gwt/user/rebind/AbstractSourceCreator.java
@@ -82,8 +82,6 @@
protected static String getJavaObjectTypeFor(JPrimitiveType type) {
if (type == JPrimitiveType.INT) {
return "Integer";
- } else if (type == JPrimitiveType.CHAR){
- return "Character";
} else {
String s = type.getSimpleSourceName();
return s.substring(0, 1).toUpperCase(Locale.ROOT) + s.substring(1);
diff --git a/user/test/com/google/gwt/i18n/I18NJreSuite.java b/user/test/com/google/gwt/i18n/I18NJreSuite.java
index e5f5565..cf5d875 100644
--- a/user/test/com/google/gwt/i18n/I18NJreSuite.java
+++ b/user/test/com/google/gwt/i18n/I18NJreSuite.java
@@ -17,7 +17,6 @@
import com.google.gwt.i18n.rebind.LocaleUtilsTest;
import com.google.gwt.i18n.rebind.LocalizableGeneratorTest;
-import com.google.gwt.i18n.rebind.LookupMethodCreatorTest;
import com.google.gwt.i18n.server.GwtLocaleTest;
import com.google.gwt.i18n.server.MessageFormatParserTest;
import com.google.gwt.i18n.server.PropertyCatalogFactoryTest;
@@ -29,7 +28,6 @@
import com.google.gwt.i18n.shared.FirstStrongDirectionEstimatorTest;
import com.google.gwt.i18n.shared.WordCountDirectionEstimatorTest;
-import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -61,7 +59,6 @@
*/
// suite.addTestSuite(TypeOracleMessageTest.class);
suite.addTestSuite(WordCountDirectionEstimatorTest.class);
- suite.addTest(new JUnit4TestAdapter(LookupMethodCreatorTest.class));
// $JUnit-END$
return suite;
diff --git a/user/test/com/google/gwt/i18n/rebind/LookupMethodCreatorTest.java b/user/test/com/google/gwt/i18n/rebind/LookupMethodCreatorTest.java
deleted file mode 100644
index c9708eb..0000000
--- a/user/test/com/google/gwt/i18n/rebind/LookupMethodCreatorTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright 2017 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 the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.i18n.rebind;
-
-import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.core.ext.UnableToCompleteException;
-import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.core.ext.typeinfo.JMethod;
-import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
-import com.google.gwt.core.ext.typeinfo.JType;
-import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.core.ext.typeinfo.TypeOracleException;
-import com.google.gwt.dev.javac.TypeOracleTestingUtils;
-import com.google.gwt.dev.javac.testing.impl.MockJavaResource;
-import com.google.gwt.dev.shell.FailErrorLogger;
-import com.google.gwt.i18n.rebind.AbstractResource.ResourceList;
-import com.google.gwt.user.rebind.SourceWriter;
-import com.google.gwt.user.rebind.StringSourceWriter;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Tests for {@link LookupMethodCreator}.
- */
-public class LookupMethodCreatorTest {
-
- private TreeLogger logger = new FailErrorLogger();
-
- private LookupMethodCreator underTest;
-
- private SourceWriter sw = new StringSourceWriter();
-
- private TypeOracle oracle;
-
- private JMethod method;
-
- private static final MockJavaResource SINGLE_ENTRY_MESSAGES = new MockJavaResource(
- "foo.SingleEntryMessage") {
- @Override
- public CharSequence getContent() {
- StringBuffer code = new StringBuffer();
- code.append("package foo;\n");
- code.append("public interface SingleEntryMessage extends foo.Lookup {\n");
- code.append(" String singleEntry();\n");
- code.append("}");
- return code;
- }
- };
-
- private static final MockJavaResource FOUR_ENTRY_MESSAGES = new MockJavaResource(
- "foo.FourEntryMessage") {
- @Override
- public CharSequence getContent() {
- StringBuffer code = new StringBuffer();
- code.append("package foo;\n");
- code.append("public interface FourEntryMessage extends foo.Lookup {\n");
- code.append(" String first();\n");
- code.append(" String second();\n");
- code.append(" String third();\n");
- code.append(" String fourth();\n");
- code.append("}");
- return code;
- }
- };
-
- private static final MockJavaResource LOOKUP = new MockJavaResource("foo.Lookup") {
- @Override
- public CharSequence getContent() {
- StringBuffer code = new StringBuffer();
- code.append("package foo;\n");
- code.append("public interface Lookup {\n");
- code.append(" String getString(String arg0);\n");
- code.append("}");
- return code;
- }
- };
-
- private void initLookupMethodCreator(MockJavaResource resource, int partitionsSize) {
- JClassType clazz = oracle.findType(resource.getTypeName());
- ConstantsWithLookupImplCreator mockCreator;
- try {
- mockCreator = new ConstantsWithLookupImplCreator(logger, sw, clazz, mock(ResourceList.class),
- oracle);
-
- JType stringType = oracle.findType("java.lang.String");
- method = oracle.findType(LOOKUP.getTypeName()).findMethod("getString", new JType[] {
- stringType});
- underTest = new LookupMethodCreator(mockCreator, stringType, partitionsSize);
- } catch (UnableToCompleteException e) {
- fail(e.getMessage());
- }
- }
-
- @Before
- public void setupUp() throws TypeOracleException, UnableToCompleteException {
- oracle = TypeOracleTestingUtils.buildStandardTypeOracleWith(logger, SINGLE_ENTRY_MESSAGES,
- FOUR_ENTRY_MESSAGES, LOOKUP);
- initLookupMethodCreator(SINGLE_ENTRY_MESSAGES, 3);
- }
-
- /**
- * Test the "golden output".<br>
- * In general, those tests are more trouble than they are worth but this will be a simple test for
- * verify the general structure.
- *
- * old version looks: <pre>
- * java.lang.String target = (java.lang.String) cache.get(arg0);
- * if (target != null) {
- * return target;
- * }
- * if(arg0.equals("singleEntry")) {
- * return singleEntry();
- * }
- * throw new java.util.MissingResourceException("Cannot find constant '" +arg0 + "'; expecting a method name", "foo.TestMessage", arg0);
- * </pre>
- *
- * with first partition lookup it generates:
- *
- * <pre>
- * java.lang.String target = (java.lang.String) cache.get(arg0);
- * if (target != null) {
- * return target;
- * }
- * java.lang.String tmp;
- * tmp = getString0(arg0);
- * if (tmp != null) {
- * return tmp;
- * }
- * throw new java.util.MissingResourceException("Cannot find constant '" +arg0 + "'; expecting a method name", "foo.TestMessage", arg0);
- * }
- *
- * public java.lang.String getString0(java.lang.String arg0) {
- * if(arg0.equals("singleEntry")) {
- * return singleEntry();
- * }
- * return null;
- *
- * </pre>
- */
- @Test
- public void testCreateMethodForJMethodForSingleEntry() {
- underTest.createMethodFor(method);
-
- SourceWriter expected = new StringSourceWriter();
- expected.println("java.lang.String target = (java.lang.String) cache.get(arg0);");
- expected.println("if (target != null) {");
- expected.indent();
- expected.println("return target;");
- expected.outdent();
- expected.println("}");
-
- expected.println("java.lang.String tmp;");
- expected.println("tmp = getString0(arg0);");
- expected.println("if (tmp != null) {");
- expected.indent();
- expected.println("return tmp;");
- expected.outdent();
- expected.println("}");
-
- expected.println("throw new java.util.MissingResourceException("
- + "\"Cannot find constant '\" +arg0 + \"'; expecting a method name\", \"foo.SingleEntryMessage\", arg0);");
-
- // check partition method
- assertTrue("No partition lookup created.", sw.toString().contains(
- "java.lang.String getString0(java.lang.String arg0) {"));
-
- expected.println("}");
- expected.println();
- expected.println("private java.lang.String getString0(java.lang.String arg0) {");
- expected.indent();
- expected.println("if(arg0.equals(\"singleEntry\")) {");
- expected.indent();
- expected.println("return singleEntry();");
- expected.outdent();
- expected.println("}");
- expected.println("return null;");
- expected.outdent();
-
- assertEquals("Wrong source Lookup created.", expected.toString(), sw.toString());
- }
-
- @Test
- public void testCreateMethodForJMethodForMultiMessageEntryCreateTwoPartitions() {
- initLookupMethodCreator(FOUR_ENTRY_MESSAGES, 3);
- underTest.createMethodFor(method);
-
- String actual = sw.toString();
-
- assertTrue("Missing partition lookup method (getString0).", actual.contains(
- "java.lang.String getString0(java.lang.String arg0) {"));
-
- assertTrue("Missing partition lookup method (getString1).", actual.contains(
- "java.lang.String getString1(java.lang.String arg0) {"));
- }
-
- @Test
- public void testPrintFound() {
- underTest.printFound("callTest");
-
- String returnStatement = sw.toString();
- assertEquals("return callTest();\n", returnStatement);
- }
-
- @Test
- public void testGetReturnTypeName() {
- String returnType = underTest.getReturnTypeName();
- assertEquals("java.lang.String", returnType);
- }
-
- @Test
- public void testGetReturnTypeNameForPrimitveTypes() {
- for (JPrimitiveType primitiveType : JPrimitiveType.values()) {
- LookupMethodCreator primitiveMethodCreator = new LookupMethodCreator(null, primitiveType, 2);
- String returnType = primitiveMethodCreator.getReturnTypeName();
- String expectedType = primitiveType.getQualifiedBoxedSourceName().substring("java.lang."
- .length());
- assertEquals("Wrong Return Type for primitve type", expectedType, returnType);
- }
- }
-
-}
diff --git a/user/test/com/google/gwt/user/UserJreSuite.java b/user/test/com/google/gwt/user/UserJreSuite.java
deleted file mode 100644
index d6b3369..0000000
--- a/user/test/com/google/gwt/user/UserJreSuite.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2010 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 the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user;
-
-import com.google.gwt.user.rebind.AbstractSourceCreatorTest;
-
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * User tests running as a regular JRE test.
- */
-public class UserJreSuite {
- public static Test suite() {
- TestSuite suite = new TestSuite("Non-browser tests for com.google.gwt.user");
-
- // $JUnit-BEGIN$
- suite.addTest(new JUnit4TestAdapter(AbstractSourceCreatorTest.class));
- // $JUnit-END$
-
- return suite;
- }
-
-}
diff --git a/user/test/com/google/gwt/user/rebind/AbstractSourceCreatorTest.java b/user/test/com/google/gwt/user/rebind/AbstractSourceCreatorTest.java
deleted file mode 100644
index 8a5b3c7..0000000
--- a/user/test/com/google/gwt/user/rebind/AbstractSourceCreatorTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 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 the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user.rebind;
-
-import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-public class AbstractSourceCreatorTest {
-
- @Test
- public void testGetJavaObjectTypeForPrimitveTypes() {
- for (JPrimitiveType primitiveType : JPrimitiveType.values()) {
- String returnType = AbstractSourceCreator.getJavaObjectTypeFor(primitiveType);
- String expectedType = primitiveType.getQualifiedBoxedSourceName().substring("java.lang."
- .length());
- assertEquals("Wrong Return Type for primitve type", expectedType, returnType);
- }
- }
-
-}