public abstract class freemarker.cache.TemplateNameFormat
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: freemarker.cache.TemplateNameFormat
  super_class: java.lang.Object
{
  public static final freemarker.cache.TemplateNameFormat DEFAULT_2_3_0;
    descriptor: Lfreemarker/cache/TemplateNameFormat;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final freemarker.cache.TemplateNameFormat DEFAULT_2_4_0;
    descriptor: Lfreemarker/cache/TemplateNameFormat;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 46
            new freemarker.cache.TemplateNameFormat$Default020300
            dup
            invokespecial freemarker.cache.TemplateNameFormat$Default020300.<init>:()V
            putstatic freemarker.cache.TemplateNameFormat.DEFAULT_2_3_0:Lfreemarker/cache/TemplateNameFormat;
         1: .line 100
            new freemarker.cache.TemplateNameFormat$Default020400
            dup
            invokespecial freemarker.cache.TemplateNameFormat$Default020400.<init>:()V
            putstatic freemarker.cache.TemplateNameFormat.DEFAULT_2_4_0:Lfreemarker/cache/TemplateNameFormat;
            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.cache.TemplateNameFormat this
         0: .line 36
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 38
            return
        end local 0 // freemarker.cache.TemplateNameFormat this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lfreemarker/cache/TemplateNameFormat;

  abstract java.lang.String toRootBasedName(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws freemarker.template.MalformedTemplateNameException
    MethodParameters:
            Name  Flags
      baseName    
      targetName  

  abstract java.lang.String normalizeRootBasedName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws freemarker.template.MalformedTemplateNameException
    MethodParameters:
      Name  Flags
      name  

  abstract java.lang.String rootBasedNameToAbsoluteName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws freemarker.template.MalformedTemplateNameException
    MethodParameters:
      Name  Flags
      name  

  private static void checkNameHasNoNullCharacter(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String name
         0: .line 472
            aload 0 /* name */
            iconst_0
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpeq 4
         1: .line 473
            new freemarker.template.MalformedTemplateNameException
            dup
            aload 0 /* name */
         2: .line 474
            ldc "Null character (\\u0000) in the name; possible attack attempt"
         3: .line 473
            invokespecial freemarker.template.MalformedTemplateNameException.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            athrow
         4: .line 476
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  name  Ljava/lang/String;
    Exceptions:
      throws freemarker.template.MalformedTemplateNameException
    MethodParameters:
      Name  Flags
      name  final

  private static freemarker.template.MalformedTemplateNameException newRootLeavingException(java.lang.String);
    descriptor: (Ljava/lang/String;)Lfreemarker/template/MalformedTemplateNameException;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String name
         0: .line 479
            new freemarker.template.MalformedTemplateNameException
            dup
            aload 0 /* name */
            ldc "Backing out from the root directory is not allowed"
            invokespecial freemarker.template.MalformedTemplateNameException.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            areturn
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  final
}
SourceFile: "TemplateNameFormat.java"
NestMembers:
  freemarker.cache.TemplateNameFormat$Default020300  freemarker.cache.TemplateNameFormat$Default020400
InnerClasses:
  private final Default020300 = freemarker.cache.TemplateNameFormat$Default020300 of freemarker.cache.TemplateNameFormat
  private final Default020400 = freemarker.cache.TemplateNameFormat$Default020400 of freemarker.cache.TemplateNameFormat