diff --git a/user/super/com/google/gwt/emul/java/lang/StringBuffer.java b/user/super/com/google/gwt/emul/java/lang/StringBuffer.java
index fdfedb6..b253f42 100644
--- a/user/super/com/google/gwt/emul/java/lang/StringBuffer.java
+++ b/user/super/com/google/gwt/emul/java/lang/StringBuffer.java
@@ -26,13 +26,18 @@
   public StringBuffer() {
   }
 
-  public StringBuffer(int ignoredLength) {
-  }
-
   public StringBuffer(CharSequence s) {
     this(s.toString());
   }
 
+  /**
+   * This implementation does not track capacity; using this constructor is
+   * functionally equivalent to using the zero-argument constructor.
+   */
+  @SuppressWarnings("unused")
+  public StringBuffer(int ignoredCapacity) {
+  }
+
   public StringBuffer(String s) {
     append(s);
   }
@@ -102,6 +107,10 @@
     return this;
   }
 
+  /**
+   * This implementation does not track capacity; always returns
+   * {@link Integer#MAX_VALUE}.
+   */
   public int capacity() {
     return builder.capacity();
   }
@@ -120,7 +129,12 @@
     return this;
   }
 
-  public void ensureCapacity(int ignored) {
+  /**
+   * This implementation does not track capacity; calling this method has no
+   * effect.
+   */
+  public void ensureCapacity(int ignoredCapacity) {
+    builder.ensureCapacity(ignoredCapacity);
   }
 
   public void getChars(int srcStart, int srcEnd, char[] dst, int dstStart) {
diff --git a/user/super/com/google/gwt/emul/java/lang/StringBuilder.java b/user/super/com/google/gwt/emul/java/lang/StringBuilder.java
index 84a6368..1a7416d 100644
--- a/user/super/com/google/gwt/emul/java/lang/StringBuilder.java
+++ b/user/super/com/google/gwt/emul/java/lang/StringBuilder.java
@@ -24,32 +24,33 @@
  */
 public class StringBuilder implements CharSequence {
 
-  private static native String setLength(String[] stringArray, int length) /*-{
-    stringArray.length = length;
-  }-*/;
-
   private static native String join(String[] stringArray) /*-{
     return stringArray.join('');
   }-*/;
 
-  private String[] stringArray = new String[0];
+  private static native String setLength(String[] stringArray, int length) /*-{
+    stringArray.length = length;
+  }-*/;
 
   private int arrayLen = 0;
 
+  private String[] stringArray = new String[0];
+
   private int stringLength = 0;
 
   public StringBuilder() {
   }
 
+  public StringBuilder(CharSequence s) {
+    this(s.toString());
+  }
+
   /**
    * This implementation does not track capacity; using this constructor is
    * functionally equivalent to using the zero-argument constructor.
    */
-  public StringBuilder(int ignoredLength) {
-  }
-
-  public StringBuilder(CharSequence s) {
-    this(s.toString());
+  @SuppressWarnings("unused")
+  public StringBuilder(int ignoredCapacity) {
   }
 
   public StringBuilder(String s) {
@@ -126,8 +127,12 @@
     return append(String.valueOf(x));
   }
 
+  /**
+   * This implementation does not track capacity; always returns
+   * {@link Integer#MAX_VALUE}.
+   */
   public int capacity() {
-    return length() * 2 + 1000;
+    return Integer.MAX_VALUE;
   }
 
   public char charAt(int index) {
@@ -142,7 +147,12 @@
     return delete(start, start + 1);
   }
 
-  public void ensureCapacity(int ignored) {
+  /**
+   * This implementation does not track capacity; calling this method has no
+   * effect.
+   */
+  @SuppressWarnings("unused")
+  public void ensureCapacity(int ignoredCapacity) {
   }
 
   public void getChars(int srcStart, int srcEnd, char[] dst, int dstStart) {
