package ceylon.language;

public final class String implements Equality {
    public final java.lang.String value;

    private String(java.lang.String s) {
        value = s;
    }

    public java.lang.String toJavaString() {
        return value;
    }

    public static ceylon.language.String instance(java.lang.String s) {
        return new ceylon.language.String(s);
    }

    public ceylon.language.String uppercase() {
        return instance(value.toUpperCase());
    }

    public ceylon.language.String lowercase() {
        return instance(value.toLowerCase());
    }

	@Override
    public boolean equals(Equality that) {
		if (that instanceof String) {
			String s = (String)that;
			return value.equals(s.value);
		} else {
			return false;
		}
    }

    public static ceylon.language.String instance(java.lang.String... strings) {
        StringBuffer buf = new StringBuffer();
        for (java.lang.String s: strings)
            buf.append(s);
        return new ceylon.language.String(buf.toString());
    }

    public static ceylon.language.String instance(String... strings) {
        StringBuffer buf = new StringBuffer();
        for (String s: strings)
            buf.append(s.value);
        return new ceylon.language.String(buf.toString());
    }

}

@@ -382,39 +382,33 @@
 %0A    public 
-ceylon
+java
 .lang
-uage
 .String uppe
@@ -428,33 +428,24 @@
      return 
-instance(
 value.toUppe
@@ -443,33 +443,32 @@
 ue.toUpperCase()
-)
 ;%0A    %7D%0A%0A    pub
@@ -471,31 +471,25 @@
  public 
-ceylon
+java
 .lang
-uage
 .String 
@@ -517,25 +517,16 @@
  return 
-instance(
 value.to
@@ -536,17 +536,16 @@
 erCase()
-)
 ;%0A    %7D%0A

Make boxing a little less broken. String boxing works okayish now.