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);
-    }
-  }
-
-}