class freemarker.core.JavaTemplateDateFormatFactory extends freemarker.core.TemplateDateFormatFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: freemarker.core.JavaTemplateDateFormatFactory
  super_class: freemarker.core.TemplateDateFormatFactory
{
  static final freemarker.core.JavaTemplateDateFormatFactory INSTANCE;
    descriptor: Lfreemarker/core/JavaTemplateDateFormatFactory;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private static final freemarker.log.Logger LOG;
    descriptor: Lfreemarker/log/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.concurrent.ConcurrentHashMap<freemarker.core.JavaTemplateDateFormatFactory$CacheKey, java.text.DateFormat> GLOBAL_FORMAT_CACHE;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Lfreemarker/core/JavaTemplateDateFormatFactory$CacheKey;Ljava/text/DateFormat;>;

  private static final int LEAK_ALERT_DATE_FORMAT_CACHE_SIZE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1024

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 34
            new freemarker.core.JavaTemplateDateFormatFactory
            dup
            invokespecial freemarker.core.JavaTemplateDateFormatFactory.<init>:()V
            putstatic freemarker.core.JavaTemplateDateFormatFactory.INSTANCE:Lfreemarker/core/JavaTemplateDateFormatFactory;
         1: .line 36
            ldc "freemarker.runtime"
            invokestatic freemarker.log.Logger.getLogger:(Ljava/lang/String;)Lfreemarker/log/Logger;
            putstatic freemarker.core.JavaTemplateDateFormatFactory.LOG:Lfreemarker/log/Logger;
         2: .line 39
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
         3: .line 38
            putstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
         4: .line 40
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // freemarker.core.JavaTemplateDateFormatFactory this
         0: .line 42
            aload 0 /* this */
            invokespecial freemarker.core.TemplateDateFormatFactory.<init>:()V
         1: .line 44
            return
        end local 0 // freemarker.core.JavaTemplateDateFormatFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lfreemarker/core/JavaTemplateDateFormatFactory;

  public freemarker.core.TemplateDateFormat get(java.lang.String, int, java.util.Locale, java.util.TimeZone, boolean, freemarker.core.Environment);
    descriptor: (Ljava/lang/String;ILjava/util/Locale;Ljava/util/TimeZone;ZLfreemarker/core/Environment;)Lfreemarker/core/TemplateDateFormat;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=7, args_size=7
        start local 0 // freemarker.core.JavaTemplateDateFormatFactory this
        start local 1 // java.lang.String params
        start local 2 // int dateType
        start local 3 // java.util.Locale locale
        start local 4 // java.util.TimeZone timeZone
        start local 5 // boolean zonelessInput
        start local 6 // freemarker.core.Environment env
         0: .line 53
            new freemarker.core.JavaTemplateDateFormat
            dup
            aload 0 /* this */
            iload 2 /* dateType */
            aload 1 /* params */
            aload 3 /* locale */
            aload 4 /* timeZone */
            invokevirtual freemarker.core.JavaTemplateDateFormatFactory.getJavaDateFormat:(ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)Ljava/text/DateFormat;
            invokespecial freemarker.core.JavaTemplateDateFormat.<init>:(Ljava/text/DateFormat;)V
            areturn
        end local 6 // freemarker.core.Environment env
        end local 5 // boolean zonelessInput
        end local 4 // java.util.TimeZone timeZone
        end local 3 // java.util.Locale locale
        end local 2 // int dateType
        end local 1 // java.lang.String params
        end local 0 // freemarker.core.JavaTemplateDateFormatFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Lfreemarker/core/JavaTemplateDateFormatFactory;
            0    1     1         params  Ljava/lang/String;
            0    1     2       dateType  I
            0    1     3         locale  Ljava/util/Locale;
            0    1     4       timeZone  Ljava/util/TimeZone;
            0    1     5  zonelessInput  Z
            0    1     6            env  Lfreemarker/core/Environment;
    Exceptions:
      throws freemarker.core.UnknownDateTypeFormattingUnsupportedException, freemarker.core.InvalidFormatParametersException
    MethodParameters:
               Name  Flags
      params         
      dateType       
      locale         
      timeZone       
      zonelessInput  
      env            

  private java.text.DateFormat getJavaDateFormat(int, java.lang.String, java.util.Locale, java.util.TimeZone);
    descriptor: (ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)Ljava/text/DateFormat;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=11, args_size=5
        start local 0 // freemarker.core.JavaTemplateDateFormatFactory this
        start local 1 // int dateType
        start local 2 // java.lang.String nameOrPattern
        start local 3 // java.util.Locale locale
        start local 4 // java.util.TimeZone timeZone
         0: .line 63
            new freemarker.core.JavaTemplateDateFormatFactory$CacheKey
            dup
            iload 1 /* dateType */
            aload 2 /* nameOrPattern */
            aload 3 /* locale */
            aload 4 /* timeZone */
            invokespecial freemarker.core.JavaTemplateDateFormatFactory$CacheKey.<init>:(ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)V
            astore 5 /* cacheKey */
        start local 5 // freemarker.core.JavaTemplateDateFormatFactory$CacheKey cacheKey
         1: .line 66
            getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
            aload 5 /* cacheKey */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.text.DateFormat
            astore 6 /* jFormat */
        start local 6 // java.text.DateFormat jFormat
         2: .line 67
            aload 6 /* jFormat */
            ifnonnull 45
         3: .line 69
            new java.util.StringTokenizer
            dup
            aload 2 /* nameOrPattern */
            ldc "_"
            invokespecial java.util.StringTokenizer.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 7 /* tok */
        start local 7 // java.util.StringTokenizer tok
         4: .line 70
            aload 7 /* tok */
            invokevirtual java.util.StringTokenizer.hasMoreTokens:()Z
            ifeq 5
            aload 0 /* this */
            aload 7 /* tok */
            invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
            invokevirtual freemarker.core.JavaTemplateDateFormatFactory.parseDateStyleToken:(Ljava/lang/String;)I
            goto 6
      StackMap locals: freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer
      StackMap stack:
         5: iconst_2
      StackMap locals:
      StackMap stack: int
         6: istore 8 /* tok1Style */
        start local 8 // int tok1Style
         7: .line 71
            iload 8 /* tok1Style */
            iconst_m1
            if_icmpeq 19
         8: .line 72
            iload 1 /* dateType */
            tableswitch { // 0 - 3
                    0: 9
                    1: 10
                    2: 12
                    3: 14
              default: 19
          }
         9: .line 74
      StackMap locals: int
      StackMap stack:
            new freemarker.core.UnknownDateTypeFormattingUnsupportedException
            dup
            invokespecial freemarker.core.UnknownDateTypeFormattingUnsupportedException.<init>:()V
            athrow
        10: .line 77
      StackMap locals:
      StackMap stack:
            iload 8 /* tok1Style */
            aload 5 /* cacheKey */
            getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
            invokestatic java.text.DateFormat.getTimeInstance:(ILjava/util/Locale;)Ljava/text/DateFormat;
            astore 6 /* jFormat */
        11: .line 78
            goto 19
        12: .line 81
      StackMap locals:
      StackMap stack:
            iload 8 /* tok1Style */
            aload 5 /* cacheKey */
            getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
            invokestatic java.text.DateFormat.getDateInstance:(ILjava/util/Locale;)Ljava/text/DateFormat;
            astore 6 /* jFormat */
        13: .line 82
            goto 19
        14: .line 85
      StackMap locals:
      StackMap stack:
            aload 7 /* tok */
            invokevirtual java.util.StringTokenizer.hasMoreTokens:()Z
            ifeq 15
            aload 0 /* this */
            aload 7 /* tok */
            invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
            invokevirtual freemarker.core.JavaTemplateDateFormatFactory.parseDateStyleToken:(Ljava/lang/String;)I
            goto 16
      StackMap locals:
      StackMap stack:
        15: iload 8 /* tok1Style */
      StackMap locals:
      StackMap stack: int
        16: istore 9 /* tok2Style */
        start local 9 // int tok2Style
        17: .line 86
            iload 9 /* tok2Style */
            iconst_m1
            if_icmpeq 19
        18: .line 87
            iload 8 /* tok1Style */
            iload 9 /* tok2Style */
            aload 5 /* cacheKey */
            getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
            invokestatic java.text.DateFormat.getDateTimeInstance:(IILjava/util/Locale;)Ljava/text/DateFormat;
            astore 6 /* jFormat */
        end local 9 // int tok2Style
        19: .line 93
      StackMap locals:
      StackMap stack:
            aload 6 /* jFormat */
            ifnonnull 29
        20: .line 95
            new java.text.SimpleDateFormat
            dup
            aload 2 /* nameOrPattern */
            aload 5 /* cacheKey */
            getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
            invokespecial java.text.SimpleDateFormat.<init>:(Ljava/lang/String;Ljava/util/Locale;)V
            astore 6 /* jFormat */
        21: .line 96
            goto 29
      StackMap locals:
      StackMap stack: java.lang.IllegalArgumentException
        22: astore 9 /* e */
        start local 9 // java.lang.IllegalArgumentException e
        23: .line 97
            aload 9 /* e */
            invokevirtual java.lang.IllegalArgumentException.getMessage:()Ljava/lang/String;
            astore 10 /* msg */
        start local 10 // java.lang.String msg
        24: .line 98
            new freemarker.core.InvalidFormatParametersException
            dup
        25: .line 99
            aload 10 /* msg */
            ifnull 26
            aload 10 /* msg */
            goto 27
      StackMap locals: freemarker.core.JavaTemplateDateFormatFactory int java.lang.String java.util.Locale java.util.TimeZone freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer int java.lang.IllegalArgumentException java.lang.String
      StackMap stack: new 24 new 24
        26: ldc "Invalid SimpleDateFormat pattern"
      StackMap locals: freemarker.core.JavaTemplateDateFormatFactory int java.lang.String java.util.Locale java.util.TimeZone freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer int java.lang.IllegalArgumentException java.lang.String
      StackMap stack: new 24 new 24 java.lang.String
        27: aload 9 /* e */
        28: .line 98
            invokespecial freemarker.core.InvalidFormatParametersException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 10 // java.lang.String msg
        end local 9 // java.lang.IllegalArgumentException e
        29: .line 102
      StackMap locals:
      StackMap stack:
            aload 6 /* jFormat */
            aload 5 /* cacheKey */
            getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.timeZone:Ljava/util/TimeZone;
            invokevirtual java.text.DateFormat.setTimeZone:(Ljava/util/TimeZone;)V
        30: .line 104
            getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
            sipush 1024
            if_icmplt 42
        31: .line 105
            iconst_0
            istore 9 /* triggered */
        start local 9 // boolean triggered
        32: .line 106
            ldc Lfreemarker/core/JavaTemplateDateFormatFactory;
            dup
            astore 10
            monitorenter
        33: .line 107
            getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
            sipush 1024
            if_icmplt 36
        34: .line 108
            iconst_1
            istore 9 /* triggered */
        35: .line 109
            getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.clear:()V
        36: .line 106
      StackMap locals: int java.lang.Class
      StackMap stack:
            aload 10
            monitorexit
        37: goto 40
      StackMap locals:
      StackMap stack: java.lang.Throwable
        38: aload 10
            monitorexit
        39: athrow
        40: .line 112
      StackMap locals:
      StackMap stack:
            iload 9 /* triggered */
            ifeq 42
        41: .line 113
            getstatic freemarker.core.JavaTemplateDateFormatFactory.LOG:Lfreemarker/log/Logger;
            ldc "Global Java DateFormat cache has exceeded 1024 entries => cache flushed. Typical cause: Some template generates high variety of format pattern strings."
            invokevirtual freemarker.log.Logger.warn:(Ljava/lang/String;)V
        end local 9 // boolean triggered
        42: .line 119
      StackMap locals:
      StackMap stack:
            getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
            aload 5 /* cacheKey */
            aload 6 /* jFormat */
            invokevirtual java.util.concurrent.ConcurrentHashMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.text.DateFormat
            astore 9 /* prevJFormat */
        start local 9 // java.text.DateFormat prevJFormat
        43: .line 120
            aload 9 /* prevJFormat */
            ifnull 45
        44: .line 121
            aload 9 /* prevJFormat */
            astore 6 /* jFormat */
        end local 9 // java.text.DateFormat prevJFormat
        end local 8 // int tok1Style
        end local 7 // java.util.StringTokenizer tok
        45: .line 125
      StackMap locals:
      StackMap stack:
            aload 6 /* jFormat */
            invokevirtual java.text.DateFormat.clone:()Ljava/lang/Object;
            checkcast java.text.DateFormat
            areturn
        end local 6 // java.text.DateFormat jFormat
        end local 5 // freemarker.core.JavaTemplateDateFormatFactory$CacheKey cacheKey
        end local 4 // java.util.TimeZone timeZone
        end local 3 // java.util.Locale locale
        end local 2 // java.lang.String nameOrPattern
        end local 1 // int dateType
        end local 0 // freemarker.core.JavaTemplateDateFormatFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   46     0           this  Lfreemarker/core/JavaTemplateDateFormatFactory;
            0   46     1       dateType  I
            0   46     2  nameOrPattern  Ljava/lang/String;
            0   46     3         locale  Ljava/util/Locale;
            0   46     4       timeZone  Ljava/util/TimeZone;
            1   46     5       cacheKey  Lfreemarker/core/JavaTemplateDateFormatFactory$CacheKey;
            2   46     6        jFormat  Ljava/text/DateFormat;
            4   45     7            tok  Ljava/util/StringTokenizer;
            7   45     8      tok1Style  I
           17   19     9      tok2Style  I
           23   29     9              e  Ljava/lang/IllegalArgumentException;
           24   29    10            msg  Ljava/lang/String;
           32   42     9      triggered  Z
           43   45     9    prevJFormat  Ljava/text/DateFormat;
      Exception table:
        from    to  target  type
          20    21      22  Class java.lang.IllegalArgumentException
          33    37      38  any
          38    39      38  any
    Exceptions:
      throws freemarker.core.UnknownDateTypeFormattingUnsupportedException, freemarker.core.InvalidFormatParametersException
    MethodParameters:
               Name  Flags
      dateType       
      nameOrPattern  
      locale         
      timeZone       

  private int parseDateStyleToken(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // freemarker.core.JavaTemplateDateFormatFactory this
        start local 1 // java.lang.String token
         0: .line 158
            ldc "short"
            aload 1 /* token */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 2
         1: .line 159
            iconst_3
            ireturn
         2: .line 161
      StackMap locals:
      StackMap stack:
            ldc "medium"
            aload 1 /* token */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 162
            iconst_2
            ireturn
         4: .line 164
      StackMap locals:
      StackMap stack:
            ldc "long"
            aload 1 /* token */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 6
         5: .line 165
            iconst_1
            ireturn
         6: .line 167
      StackMap locals:
      StackMap stack:
            ldc "full"
            aload 1 /* token */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 8
         7: .line 168
            iconst_0
            ireturn
         8: .line 170
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 1 // java.lang.String token
        end local 0 // freemarker.core.JavaTemplateDateFormatFactory this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    9     0   this  Lfreemarker/core/JavaTemplateDateFormatFactory;
            0    9     1  token  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      token  
}
SourceFile: "JavaTemplateDateFormatFactory.java"
NestMembers:
  freemarker.core.JavaTemplateDateFormatFactory$CacheKey
InnerClasses:
  private final CacheKey = freemarker.core.JavaTemplateDateFormatFactory$CacheKey of freemarker.core.JavaTemplateDateFormatFactory