Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8831

Add instance methods from `String` to `GString`

    XMLWordPrintableJSON

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
      

      Attachments

        Activity

          People

            daniel_sun Daniel Sun
            daniel_sun Daniel Sun
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 0.5h
                0.5h