1 16 package com.google.gwt.i18n.rebind; 17 18 import com.google.gwt.core.ext.TreeLogger; 19 import com.google.gwt.core.ext.UnableToCompleteException; 20 import com.google.gwt.core.ext.typeinfo.JMethod; 21 import com.google.gwt.i18n.rebind.util.MessagesInterfaceCreator; 22 import com.google.gwt.user.rebind.AbstractGeneratorClassCreator; 23 import com.google.gwt.user.rebind.AbstractMethodCreator; 24 25 import java.text.MessageFormat ; 26 import java.text.ParseException ; 27 28 31 class MessagesMethodCreator extends AbstractMethodCreator { 32 37 public MessagesMethodCreator(AbstractGeneratorClassCreator classCreator) { 38 super(classCreator); 39 } 40 41 public void createMethodFor(TreeLogger logger, JMethod m, String template) 42 throws UnableToCompleteException { 43 int numParams = m.getParameters().length; 44 45 Object [] expected; 47 48 String safeReplaceString = "~"; 52 53 while (template.indexOf(safeReplaceString) >= 0) { 54 safeReplaceString += "~"; 55 } 56 57 try { 58 int numArgs = MessagesInterfaceCreator.numberOfMessageArgs(template); 59 expected = new Object [numArgs]; 60 } catch (ParseException e) { 61 logger.log(TreeLogger.INFO, "Failed to parse the message " + template 62 + " so cannot verify the number of passed-in arguments", e); 63 expected = new Object [numParams]; 64 } 65 66 if (numParams != expected.length) { 67 StringBuffer msg = new StringBuffer (); 68 msg.append("The method has "); 69 msg.append(numParams); 70 msg.append(numParams == 1 ? " parameter" : " parameters"); 71 msg.append(", but the message template has "); 72 msg.append(expected.length); 73 msg.append(expected.length == 1 ? " placeholder" : " placeholders"); 74 throw error(logger, msg.toString()); 75 } 76 for (int i = 0; i < expected.length; i++) { 77 expected[i] = safeReplaceString + " + arg" + i + " + " 78 + safeReplaceString; 79 } 80 String formattedString; 81 try { 82 formattedString = MessageFormat.format(template, expected); 83 } catch (IllegalArgumentException e) { 84 throw error(logger, "Message Template '" + template 85 + "' did not format correctly", e); 86 } 87 formattedString = wrap(formattedString); 88 formattedString = formattedString.replaceAll(safeReplaceString, "\""); 89 String templateToSplit = "return " + formattedString + ";"; 90 println(templateToSplit); 91 } 92 } 93 | Popular Tags |