Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
None
-
None
-
None
-
None
Description
The reason why we add String instance methods is to improve performance to some extent and reduce the size of class file:
@groovy.transform.CompileStatic
def y() {
"abc${'123'}def".toUpperCase()
}
Original:
NEW org/codehaus/groovy/runtime/GStringImpl DUP ICONST_1 ANEWARRAY java/lang/Object DUP ICONST_0 LDC "123" AASTORE ICONST_2 ANEWARRAY java/lang/String DUP ICONST_0 LDC "abc" AASTORE DUP ICONST_1 LDC "def" AASTORE INVOKESPECIAL org/codehaus/groovy/runtime/GStringImpl.<init> ([Ljava/lang/Object;[Ljava/lang/String;)V INVOKESTATIC org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString (Ljava/lang/Object;)Ljava/lang/String; CHECKCAST java/lang/String INVOKEVIRTUAL java/lang/String.toUpperCase ()Ljava/lang/String; ARETURN
After change:
NEW org/codehaus/groovy/runtime/GStringImpl DUP ICONST_1 ANEWARRAY java/lang/Object DUP ICONST_0 LDC "123" AASTORE ICONST_2 ANEWARRAY java/lang/String DUP ICONST_0 LDC "abc" AASTORE DUP ICONST_1 LDC "def" AASTORE INVOKESPECIAL org/codehaus/groovy/runtime/GStringImpl.<init> ([Ljava/lang/Object;[Ljava/lang/String;)V INVOKEVIRTUAL groovy/lang/GString.toUpperCase ()Ljava/lang/String; ARETURN