test_class.file: httl/src/test/java/httl/spi/parsers/TemplateParserTest.java
test_class.identifier: TemplateParserTest
test_case.body: @Test
  	public void testSplitAssign() throws Exception {
  		// without type
  		List<String> list = TemplateParser.splitAssign("book = books.get(0)");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("book = books.get(0)", list.get(0));
  
  		list = TemplateParser.splitAssign("book1 = books.get(0), book2 = books.get(1)");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("book1 = books.get(0)", list.get(0));
  		Assert.assertEquals(" book2 = books.get(1)", list.get(1));
  
  		list = TemplateParser.splitAssign("book1 = books.get(0), book2 = books.get(1), book3 = books.get(2)");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("book1 = books.get(0)", list.get(0));
  		Assert.assertEquals(" book2 = books.get(1)", list.get(1));
  		Assert.assertEquals(" book3 = books.get(2)", list.get(2));
  
  		// with simple type
  		list = TemplateParser.splitAssign("Book book = books.get(0)");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("Book book = books.get(0)", list.get(0));
  
  		list = TemplateParser.splitAssign("Book book1 = books.get(0), Book book2 = books.get(1)");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("Book book1 = books.get(0)", list.get(0));
  		Assert.assertEquals(" Book book2 = books.get(1)", list.get(1));
  
  		list = TemplateParser.splitAssign("Book book1 = books.get(0), Book book2 = books.get(1), Book book3 = books.get(2)");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("Book book1 = books.get(0)", list.get(0));
  		Assert.assertEquals(" Book book2 = books.get(1)", list.get(1));
  		Assert.assertEquals(" Book book3 = books.get(2)", list.get(2));
  
  		// with generic type
  		list = TemplateParser.splitAssign("Map<String, Book> books = books.toMap()");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("Map<String, Book> books = books.toMap()", list.get(0));
  
  		list = TemplateParser.splitAssign("Map<String, Book> bookMap = books.toMap(), Map<String, Book> bookMap2 = books2.toMap()");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("Map<String, Book> bookMap = books.toMap()", list.get(0));
  		Assert.assertEquals(" Map<String, Book> bookMap2 = books2.toMap()", list.get(1));
  
  		list = TemplateParser.splitAssign("Map<String, Book> bookMap = books.toMap(), Map<String, Book> bookMap2 = books2.toMap(), Map<String, Book> bookMap3 = books3.toMap()");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("Map<String, Book> bookMap = books.toMap()", list.get(0));
  		Assert.assertEquals(" Map<String, Book> bookMap2 = books2.toMap()", list.get(1));
  		Assert.assertEquals(" Map<String, Book> bookMap3 = books3.toMap()", list.get(2));
  
  		// with multi type
  		list = TemplateParser.splitAssign("Map<String, Book> bookMap = books.toMap(), Book book = books.get(0)");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("Map<String, Book> bookMap = books.toMap()", list.get(0));
  		Assert.assertEquals(" Book book = books.get(0)", list.get(1));
  
  		list = TemplateParser.splitAssign("Map<String, Book> bookMap = books.toMap(), Book book1 = books.get(0), book2 = books.get(1)");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("Map<String, Book> bookMap = books.toMap()", list.get(0));
  		Assert.assertEquals(" Book book1 = books.get(0)", list.get(1));
  		Assert.assertEquals(" book2 = books.get(1)", list.get(2));
  
  		// without equals string
  		list = TemplateParser.splitAssign("pair = \"a = b\"");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("pair = \"a = b\"", list.get(0));
  		
  		list = TemplateParser.splitAssign("pair1 = \"a \\\" = b\\\", pair2 = \"a = b\"");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("pair1 = \"a \\\" = b\\\"", list.get(0));
  		Assert.assertEquals(" pair2 = \"a = b\"", list.get(1));
  		
  		// without equals type
  		list = TemplateParser.splitAssign("enable = user.role == 'member'");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("enable = user.role == 'member'", list.get(0));
  		
  		list = TemplateParser.splitAssign("enable1 = user.role == 'member', enable2 = user.role == 'member'");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("enable1 = user.role == 'member'", list.get(0));
  		Assert.assertEquals(" enable2 = user.role == 'member'", list.get(1));
  
  		list = TemplateParser.splitAssign("enable1 = user.role == 'member', enable2 = user.role == 'member', enable3 = user.role == 'member'");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("enable1 = user.role == 'member'", list.get(0));
  		Assert.assertEquals(" enable2 = user.role == 'member'", list.get(1));
  		Assert.assertEquals(" enable3 = user.role == 'member'", list.get(2));
  		
  		// without compare type
  		list = TemplateParser.splitAssign("access = user.age >= 18");
  		Assert.assertEquals(1, list.size());
  		Assert.assertEquals("access = user.age >= 18", list.get(0));
  		
  		list = TemplateParser.splitAssign("access1 = user.age >= 18, access2 = user.age >= 18");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("access1 = user.age >= 18", list.get(0));
  		Assert.assertEquals(" access2 = user.age >= 18", list.get(1));
  
  		list = TemplateParser.splitAssign("access1 = user.age >= 18, access2 = user.age >= 18, access3 = user.age >= 18");
  		Assert.assertEquals(3, list.size());
  		Assert.assertEquals("access1 = user.age >= 18", list.get(0));
  		Assert.assertEquals(" access2 = user.age >= 18", list.get(1));
  		Assert.assertEquals(" access3 = user.age >= 18", list.get(2));
  
  		// without multi compare type
  		list = TemplateParser.splitAssign("enable = user.role == 'member', access = user.age >= 18");
  		Assert.assertEquals(2, list.size());
  		Assert.assertEquals("enable = user.role == 'member'", list.get(0));
  		Assert.assertEquals(" access = user.age >= 18", list.get(1));
  
  		list = TemplateParser.splitAssign("enable = user.role == 'member', disable = user.role != 'member', access = user.age >= 18, forbid = user.age <= 18");
  		Assert.assertEquals(4, list.size());
  		Assert.assertEquals("enable = user.role == 'member'", list.get(0));
  		Assert.assertEquals(" disable = user.role != 'member'", list.get(1));
  		Assert.assertEquals(" access = user.age >= 18", list.get(2));
  		Assert.assertEquals(" forbid = user.age <= 18", list.get(3));
  	}
test_case.class_method_signature: TemplateParserTest.testSplitAssign()
test_case.full_signature: @Test public void testSplitAssign()
test_case.identifier: testSplitAssign
test_case.invocations: splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get splitAssign assertEquals size assertEquals get assertEquals get assertEquals get assertEquals get
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testSplitAssign()
focal_class.declarator: E = DfaScanner.BREAK
focal_class.modifier: private static final
focal_class.original_string: private static final int E = DfaScanner.BREAK;
focal_class.type: int
focal_class.var_name: E
focal_class.declarator: B = DfaScanner.BREAK - 1
focal_class.modifier: private static final
focal_class.original_string: private static final int B = DfaScanner.BREAK - 1;
focal_class.type: int
focal_class.var_name: B
focal_class.declarator: S = DfaScanner.BACKSPACE - 1
focal_class.modifier: private static final
focal_class.original_string: private static final int S = DfaScanner.BACKSPACE - 1;
focal_class.type: int
focal_class.var_name: S
focal_class.declarator: P = DfaScanner.PUSH - 4
focal_class.modifier: private static final
focal_class.original_string: private static final int P = DfaScanner.PUSH - 4;
focal_class.type: int
focal_class.var_name: P
focal_class.declarator: O = DfaScanner.POP - 4
focal_class.modifier: private static final
focal_class.original_string: private static final int O = DfaScanner.POP - 4;
focal_class.type: int
focal_class.var_name: O
focal_class.declarator: P2 = DfaScanner.PUSH - 7
focal_class.modifier: private static final
focal_class.original_string: private static final int P2 = DfaScanner.PUSH - 7;
focal_class.type: int
focal_class.var_name: P2
focal_class.declarator: O2 = DfaScanner.POP - 7
focal_class.modifier: private static final
focal_class.original_string: private static final int O2 = DfaScanner.POP - 7;
focal_class.type: int
focal_class.var_name: O2
focal_class.declarator: states[][] = {
              // 0.\s, 1.a-z, 2.#, 3.$, 4.!, 5.*, 6.(, 7.), 8.[, 9.], 10.{, 11.}, 12.", 13.', 14.`, 15.\, 16.\r\n, 17.其它
          /* 0.起始 */ {1, 1, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1,}, // 初始状态或上一片断刚接收完成状态
          /* 1.文本 */ {1, 1, B, B, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1,}, // 非指令文本内容
  
  		/* 2.指令 */ {1, 3, 9, B, 6, 10, 1, 1, 12, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 指令提示符
          /* 3.指名 */ {26, 3, B, B, B, B, P, B, B, B, B, B, B, B, B, B, B, B,}, // 指令名
          /* 4.指参 */ {4, 4, 4, 4, 4, 4, P, O, 4, 4, 4, 4, 14, 16, 18, 4, 4, 4,}, // 指令参数
  
  		/* 5.插值 */ {1, 1, B, B, 6, 1, 1, 1, 1, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 插值提示符
          /* 6.非滤 */ {1, 1, B, B, 1, 1, 1, 1, 1, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 非过滤插值
  		/* 7.插参 */ {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, P2, O2, 20, 22, 24, 7, 7, 7,}, // 插值参数
  		
  		/* 8.转义 */ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, // 井号美元号转义
  		/* 9.行注 */ {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, B, 9,}, // 双井号行注释
  		/* 10.块注 */ {10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,}, // 井星号块注释
  		/* 11.结块 */ {10, 10, E, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,}, // 井星号块注释结束
  		/* 12.字面 */ {12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12,}, // 井方号块字面不解析块
  		/* 13.结字 */ {12, 12, E, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}, // 井方号块字面不解析块结束
  		
  		/* 14.字串 */ {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 4, 14, 14, 15, 14, 14,}, // 指令参数双引号字符串
  		/* 15.转字 */ {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,}, // 指令参数双引号字符串转义
  		/* 16.字串 */ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 16, 17, 16, 16,}, // 指令参数单引号字符串
  		/* 17.转字 */ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,}, // 指令参数单引号字符串转义
  		/* 18.字串 */ {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 19, 18, 18,}, // 指令参数反单引号字符串
  		/* 19.转字 */ {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,}, // 指令参数反单引号字符串转义
  		
  		/* 20.字串 */ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 7, 20, 20, 21, 20, 20,}, // 插值参数双引号字符串
  		/* 21.转字 */ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,}, // 插值参数双引号字符串转义
  		/* 22.字串 */ {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 7, 22, 23, 22, 22,}, // 插值参数单引号字符串
  		/* 23.转字 */ {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,}, // 插值参数单引号字符串转义
  		/* 24.字串 */ {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 7, 25, 24, 24,}, // 插值参数反单引号字符串
  		/* 25.转字 */ {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,}, // 插值参数反单引号字符串转义
  		
  		/* 26.指间空白 */ {26, S, S, S, S, S, P, S, S, S, S, S, S, S, S, S, S, S,}, // 指令名和括号间的空白
      }
focal_class.modifier: static final
focal_class.original_string: static final int states[][] = {
              // 0.\s, 1.a-z, 2.#, 3.$, 4.!, 5.*, 6.(, 7.), 8.[, 9.], 10.{, 11.}, 12.", 13.', 14.`, 15.\, 16.\r\n, 17.其它
          /* 0.起始 */ {1, 1, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1,}, // 初始状态或上一片断刚接收完成状态
          /* 1.文本 */ {1, 1, B, B, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1,}, // 非指令文本内容
  
  		/* 2.指令 */ {1, 3, 9, B, 6, 10, 1, 1, 12, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 指令提示符
          /* 3.指名 */ {26, 3, B, B, B, B, P, B, B, B, B, B, B, B, B, B, B, B,}, // 指令名
          /* 4.指参 */ {4, 4, 4, 4, 4, 4, P, O, 4, 4, 4, 4, 14, 16, 18, 4, 4, 4,}, // 指令参数
  
  		/* 5.插值 */ {1, 1, B, B, 6, 1, 1, 1, 1, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 插值提示符
          /* 6.非滤 */ {1, 1, B, B, 1, 1, 1, 1, 1, 1, P2, 1, 1, 1, 1, 1, 1, 1,}, // 非过滤插值
  		/* 7.插参 */ {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, P2, O2, 20, 22, 24, 7, 7, 7,}, // 插值参数
  		
  		/* 8.转义 */ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, // 井号美元号转义
  		/* 9.行注 */ {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, B, 9,}, // 双井号行注释
  		/* 10.块注 */ {10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,}, // 井星号块注释
  		/* 11.结块 */ {10, 10, E, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,}, // 井星号块注释结束
  		/* 12.字面 */ {12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12,}, // 井方号块字面不解析块
  		/* 13.结字 */ {12, 12, E, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}, // 井方号块字面不解析块结束
  		
  		/* 14.字串 */ {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 4, 14, 14, 15, 14, 14,}, // 指令参数双引号字符串
  		/* 15.转字 */ {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,}, // 指令参数双引号字符串转义
  		/* 16.字串 */ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 16, 17, 16, 16,}, // 指令参数单引号字符串
  		/* 17.转字 */ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,}, // 指令参数单引号字符串转义
  		/* 18.字串 */ {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 19, 18, 18,}, // 指令参数反单引号字符串
  		/* 19.转字 */ {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,}, // 指令参数反单引号字符串转义
  		
  		/* 20.字串 */ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 7, 20, 20, 21, 20, 20,}, // 插值参数双引号字符串
  		/* 21.转字 */ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,}, // 插值参数双引号字符串转义
  		/* 22.字串 */ {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 7, 22, 23, 22, 22,}, // 插值参数单引号字符串
  		/* 23.转字 */ {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,}, // 插值参数单引号字符串转义
  		/* 24.字串 */ {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 7, 25, 24, 24,}, // 插值参数反单引号字符串
  		/* 25.转字 */ {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,}, // 插值参数反单引号字符串转义
  		
  		/* 26.指间空白 */ {26, S, S, S, S, S, P, S, S, S, S, S, S, S, S, S, S, S,}, // 指令名和括号间的空白
      };
focal_class.type: int
focal_class.var_name: states
focal_class.declarator: ESCAPE_PATTERN = Pattern.compile("\\\\+[#$]")
focal_class.modifier: private static final
focal_class.original_string: private static final Pattern ESCAPE_PATTERN = Pattern.compile("\\\\+[#$]");
focal_class.type: Pattern
focal_class.var_name: ESCAPE_PATTERN
focal_class.declarator: DEFINE_PATTERN = Pattern.compile("([\\w>\\]]\\s+\\w+)\\s*[,]?")
focal_class.modifier: private static final
focal_class.original_string: private static final Pattern DEFINE_PATTERN = Pattern.compile("([\\w>\\]]\\s+\\w+)\\s*[,]?");
focal_class.type: Pattern
focal_class.var_name: DEFINE_PATTERN
focal_class.declarator: IMPORT_PATTERN = Pattern.compile("[,;]+")
focal_class.modifier: private static final
focal_class.original_string: private static final Pattern IMPORT_PATTERN = Pattern.compile("[,;]+");
focal_class.type: Pattern
focal_class.var_name: IMPORT_PATTERN
focal_class.declarator: scanner = new DfaScanner() {
          @Override
          public int next(int state, char ch) {
              return states[state][getCharType(ch)];
          }
      }
focal_class.modifier: private static
focal_class.original_string: private static DfaScanner scanner = new DfaScanner() {
          @Override
          public int next(int state, char ch) {
              return states[state][getCharType(ch)];
          }
      };
focal_class.type: DfaScanner
focal_class.var_name: scanner
focal_class.declarator: importMacroTemplates = new ConcurrentHashMap<String, Template>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, Template> importMacroTemplates = new ConcurrentHashMap<String, Template>();
focal_class.type: Map<String, Template>
focal_class.var_name: importMacroTemplates
focal_class.declarator: functions = new ConcurrentHashMap<Class<?>, Object>()
focal_class.modifier: private final
focal_class.original_string: private final Map<Class<?>, Object> functions = new ConcurrentHashMap<Class<?>, Object>();
focal_class.type: Map<Class<?>, Object>
focal_class.var_name: functions
focal_class.declarator: setDirective = new String[]{"set"}
focal_class.modifier: private
focal_class.original_string: private String[] setDirective = new String[]{"set"};
focal_class.type: String[]
focal_class.var_name: setDirective
focal_class.declarator: ifDirective = new String[]{"if"}
focal_class.modifier: private
focal_class.original_string: private String[] ifDirective = new String[]{"if"};
focal_class.type: String[]
focal_class.var_name: ifDirective
focal_class.declarator: elseDirective = new String[]{"else"}
focal_class.modifier: private
focal_class.original_string: private String[] elseDirective = new String[]{"else"};
focal_class.type: String[]
focal_class.var_name: elseDirective
focal_class.declarator: forDirective = new String[]{"for"}
focal_class.modifier: private
focal_class.original_string: private String[] forDirective = new String[]{"for"};
focal_class.type: String[]
focal_class.var_name: forDirective
focal_class.declarator: breakDirective = new String[]{"break"}
focal_class.modifier: private
focal_class.original_string: private String[] breakDirective = new String[]{"break"};
focal_class.type: String[]
focal_class.var_name: breakDirective
focal_class.declarator: macroDirective = new String[]{"macro"}
focal_class.modifier: private
focal_class.original_string: private String[] macroDirective = new String[]{"macro"};
focal_class.type: String[]
focal_class.var_name: macroDirective
focal_class.declarator: endDirective = new String[]{"end"}
focal_class.modifier: private
focal_class.original_string: private String[] endDirective = new String[]{"end"};
focal_class.type: String[]
focal_class.var_name: endDirective
focal_class.declarator: importDirective = new String[]{"import"}
focal_class.modifier: private
focal_class.original_string: private String[] importDirective = new String[]{"import"};
focal_class.type: String[]
focal_class.var_name: importDirective
focal_class.declarator: engine
focal_class.modifier: private
focal_class.original_string: private Engine engine;
focal_class.type: Engine
focal_class.var_name: engine
focal_class.declarator: expressionParser
focal_class.modifier: private
focal_class.original_string: private Parser expressionParser;
focal_class.type: Parser
focal_class.var_name: expressionParser
focal_class.declarator: importMacros
focal_class.modifier: private
focal_class.original_string: private String[] importMacros;
focal_class.type: String[]
focal_class.var_name: importMacros
focal_class.declarator: importPackages
focal_class.modifier: private
focal_class.original_string: private String[] importPackages;
focal_class.type: String[]
focal_class.var_name: importPackages
focal_class.declarator: importVariables
focal_class.modifier: private
focal_class.original_string: private String[] importVariables;
focal_class.type: String[]
focal_class.var_name: importVariables
focal_class.declarator: importTypes
focal_class.modifier: private
focal_class.original_string: private Map<String, Class<?>> importTypes;
focal_class.type: Map<String, Class<?>>
focal_class.var_name: importTypes
focal_class.declarator: defaultVariableType
focal_class.modifier: private
focal_class.original_string: private Class<?> defaultVariableType;
focal_class.type: Class<?>
focal_class.var_name: defaultVariableType
focal_class.declarator: removeDirectiveBlankLine = true
focal_class.modifier: private
focal_class.original_string: private boolean removeDirectiveBlankLine = true;
focal_class.type: boolean
focal_class.var_name: removeDirectiveBlankLine
focal_class.file: httl/src/main/java/httl/spi/parsers/TemplateParser.java
focal_class.identifier: TemplateParser
focal_class.interfaces: implements Parser
focal_class.class_method_signature: TemplateParser.getCharType(char ch)
focal_class.full_signature: static int getCharType(char ch)
focal_class.identifier: getCharType
focal_class.modifiers: static
focal_class.parameters: (char ch)
focal_class.return: int
focal_class.signature: int getCharType(char ch)
focal_class.class_method_signature: TemplateParser.isEndString(String value)
focal_class.full_signature: private static boolean isEndString(String value)
focal_class.identifier: isEndString
focal_class.modifiers: private static
focal_class.parameters: (String value)
focal_class.return: boolean
focal_class.signature: boolean isEndString(String value)
focal_class.class_method_signature: TemplateParser.splitAssign(String value)
focal_class.full_signature: static List<String> splitAssign(String value)
focal_class.identifier: splitAssign
focal_class.modifiers: static
focal_class.parameters: (String value)
focal_class.return: List<String>
focal_class.signature: List<String> splitAssign(String value)
focal_class.class_method_signature: TemplateParser.splitDefine(String value)
focal_class.full_signature: static List<String> splitDefine(String value)
focal_class.identifier: splitDefine
focal_class.modifiers: static
focal_class.parameters: (String value)
focal_class.return: List<String>
focal_class.signature: List<String> splitDefine(String value)
focal_class.class_method_signature: TemplateParser.isDirective(String message)
focal_class.full_signature: private boolean isDirective(String message)
focal_class.identifier: isDirective
focal_class.modifiers: private
focal_class.parameters: (String message)
focal_class.return: boolean
focal_class.signature: boolean isDirective(String message)
focal_class.class_method_signature: TemplateParser.isDirectiveName(String name)
focal_class.full_signature: private boolean isDirectiveName(String name)
focal_class.identifier: isDirectiveName
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: boolean
focal_class.signature: boolean isDirectiveName(String name)
focal_class.class_method_signature: TemplateParser.defineVariableTypes(String value, int offset, List<Statement> directives)
focal_class.full_signature: private void defineVariableTypes(String value, int offset, List<Statement> directives)
focal_class.identifier: defineVariableTypes
focal_class.modifiers: private
focal_class.parameters: (String value, int offset, List<Statement> directives)
focal_class.return: void
focal_class.signature: void defineVariableTypes(String value, int offset, List<Statement> directives)
focal_class.class_method_signature: TemplateParser.isNoLiteralText(Statement node)
focal_class.full_signature: private boolean isNoLiteralText(Statement node)
focal_class.identifier: isNoLiteralText
focal_class.modifiers: private
focal_class.parameters: (Statement node)
focal_class.return: boolean
focal_class.signature: boolean isNoLiteralText(Statement node)
focal_class.class_method_signature: TemplateParser.clean(List<Statement> nodes)
focal_class.full_signature: private List<Statement> clean(List<Statement> nodes)
focal_class.identifier: clean
focal_class.modifiers: private
focal_class.parameters: (List<Statement> nodes)
focal_class.return: List<Statement>
focal_class.signature: List<Statement> clean(List<Statement> nodes)
focal_class.class_method_signature: TemplateParser.scan(String source, int sourceOffset)
focal_class.full_signature: private List<Statement> scan(String source, int sourceOffset)
focal_class.identifier: scan
focal_class.modifiers: private
focal_class.parameters: (String source, int sourceOffset)
focal_class.return: List<Statement>
focal_class.signature: List<Statement> scan(String source, int sourceOffset)
focal_class.class_method_signature: TemplateParser.reduce(List<Statement> directives)
focal_class.full_signature: private BlockDirective reduce(List<Statement> directives)
focal_class.identifier: reduce
focal_class.modifiers: private
focal_class.parameters: (List<Statement> directives)
focal_class.return: BlockDirective
focal_class.signature: BlockDirective reduce(List<Statement> directives)
focal_class.class_method_signature: TemplateParser.setRemoveDirectiveBlankLine(boolean removeDirectiveBlankLine)
focal_class.full_signature: public void setRemoveDirectiveBlankLine(boolean removeDirectiveBlankLine)
focal_class.identifier: setRemoveDirectiveBlankLine
focal_class.modifiers: public
focal_class.parameters: (boolean removeDirectiveBlankLine)
focal_class.return: void
focal_class.signature: void setRemoveDirectiveBlankLine(boolean removeDirectiveBlankLine)
focal_class.class_method_signature: TemplateParser.setSetDirective(String[] setDirective)
focal_class.full_signature: public void setSetDirective(String[] setDirective)
focal_class.identifier: setSetDirective
focal_class.modifiers: public
focal_class.parameters: (String[] setDirective)
focal_class.return: void
focal_class.signature: void setSetDirective(String[] setDirective)
focal_class.class_method_signature: TemplateParser.setIfDirective(String[] ifDirective)
focal_class.full_signature: public void setIfDirective(String[] ifDirective)
focal_class.identifier: setIfDirective
focal_class.modifiers: public
focal_class.parameters: (String[] ifDirective)
focal_class.return: void
focal_class.signature: void setIfDirective(String[] ifDirective)
focal_class.class_method_signature: TemplateParser.setElseDirective(String[] elseDirective)
focal_class.full_signature: public void setElseDirective(String[] elseDirective)
focal_class.identifier: setElseDirective
focal_class.modifiers: public
focal_class.parameters: (String[] elseDirective)
focal_class.return: void
focal_class.signature: void setElseDirective(String[] elseDirective)
focal_class.class_method_signature: TemplateParser.setForDirective(String[] forDirective)
focal_class.full_signature: public void setForDirective(String[] forDirective)
focal_class.identifier: setForDirective
focal_class.modifiers: public
focal_class.parameters: (String[] forDirective)
focal_class.return: void
focal_class.signature: void setForDirective(String[] forDirective)
focal_class.class_method_signature: TemplateParser.setBreakDirective(String[] breakDirective)
focal_class.full_signature: public void setBreakDirective(String[] breakDirective)
focal_class.identifier: setBreakDirective
focal_class.modifiers: public
focal_class.parameters: (String[] breakDirective)
focal_class.return: void
focal_class.signature: void setBreakDirective(String[] breakDirective)
focal_class.class_method_signature: TemplateParser.setMacroDirective(String[] macroDirective)
focal_class.full_signature: public void setMacroDirective(String[] macroDirective)
focal_class.identifier: setMacroDirective
focal_class.modifiers: public
focal_class.parameters: (String[] macroDirective)
focal_class.return: void
focal_class.signature: void setMacroDirective(String[] macroDirective)
focal_class.class_method_signature: TemplateParser.setEndDirective(String[] endDirective)
focal_class.full_signature: public void setEndDirective(String[] endDirective)
focal_class.identifier: setEndDirective
focal_class.modifiers: public
focal_class.parameters: (String[] endDirective)
focal_class.return: void
focal_class.signature: void setEndDirective(String[] endDirective)
focal_class.class_method_signature: TemplateParser.setDefaultVariableType(String defaultVariableType)
focal_class.full_signature: public void setDefaultVariableType(String defaultVariableType)
focal_class.identifier: setDefaultVariableType
focal_class.modifiers: public
focal_class.parameters: (String defaultVariableType)
focal_class.return: void
focal_class.signature: void setDefaultVariableType(String defaultVariableType)
focal_class.class_method_signature: TemplateParser.setImportMacros(String[] importMacros)
focal_class.full_signature: public void setImportMacros(String[] importMacros)
focal_class.identifier: setImportMacros
focal_class.modifiers: public
focal_class.parameters: (String[] importMacros)
focal_class.return: void
focal_class.signature: void setImportMacros(String[] importMacros)
focal_class.class_method_signature: TemplateParser.setEngine(Engine engine)
focal_class.full_signature: public void setEngine(Engine engine)
focal_class.identifier: setEngine
focal_class.modifiers: public
focal_class.parameters: (Engine engine)
focal_class.return: void
focal_class.signature: void setEngine(Engine engine)
focal_class.class_method_signature: TemplateParser.setExpressionParser(Parser expressionParser)
focal_class.full_signature: public void setExpressionParser(Parser expressionParser)
focal_class.identifier: setExpressionParser
focal_class.modifiers: public
focal_class.parameters: (Parser expressionParser)
focal_class.return: void
focal_class.signature: void setExpressionParser(Parser expressionParser)
focal_class.class_method_signature: TemplateParser.setImportPackages(String[] importPackages)
focal_class.full_signature: public void setImportPackages(String[] importPackages)
focal_class.identifier: setImportPackages
focal_class.modifiers: public
focal_class.parameters: (String[] importPackages)
focal_class.return: void
focal_class.signature: void setImportPackages(String[] importPackages)
focal_class.class_method_signature: TemplateParser.setImportVariables(String[] importVariables)
focal_class.full_signature: public void setImportVariables(String[] importVariables)
focal_class.identifier: setImportVariables
focal_class.modifiers: public
focal_class.parameters: (String[] importVariables)
focal_class.return: void
focal_class.signature: void setImportVariables(String[] importVariables)
focal_class.class_method_signature: TemplateParser.setImportMethods(Object[] importMethods)
focal_class.full_signature: public void setImportMethods(Object[] importMethods)
focal_class.identifier: setImportMethods
focal_class.modifiers: public
focal_class.parameters: (Object[] importMethods)
focal_class.return: void
focal_class.signature: void setImportMethods(Object[] importMethods)
focal_class.class_method_signature: TemplateParser.getImportDirective()
focal_class.full_signature: public String[] getImportDirective()
focal_class.identifier: getImportDirective
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: String[]
focal_class.signature: String[] getImportDirective()
focal_class.class_method_signature: TemplateParser.init()
focal_class.full_signature: public void init()
focal_class.identifier: init
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void init()
focal_class.class_method_signature: TemplateParser.inited()
focal_class.full_signature: public void inited()
focal_class.identifier: inited
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void inited()
focal_class.class_method_signature: TemplateParser.parse(String source, int offset)
focal_class.full_signature: public Node parse(String source, int offset)
focal_class.identifier: parse
focal_class.modifiers: public
focal_class.parameters: (String source, int offset)
focal_class.return: Node
focal_class.signature: Node parse(String source, int offset)
focal_class.class_method_signature: TemplateParser.trim(List<Statement> nodes)
focal_class.full_signature: private List<Statement> trim(List<Statement> nodes)
focal_class.identifier: trim
focal_class.modifiers: private
focal_class.parameters: (List<Statement> nodes)
focal_class.return: List<Statement>
focal_class.signature: List<Statement> trim(List<Statement> nodes)
focal_class.class_method_signature: TemplateParser.isTrimableDirective(Statement node)
focal_class.full_signature: private boolean isTrimableDirective(Statement node)
focal_class.identifier: isTrimableDirective
focal_class.modifiers: private
focal_class.parameters: (Statement node)
focal_class.return: boolean
focal_class.signature: boolean isTrimableDirective(Statement node)
focal_class.class_method_signature: TemplateParser.filterEscape(String source)
focal_class.full_signature: private String filterEscape(String source)
focal_class.identifier: filterEscape
focal_class.modifiers: private
focal_class.parameters: (String source)
focal_class.return: String
focal_class.signature: String filterEscape(String source)
focal_class.class_method_signature: TemplateParser.parseGenericType(String type, int offset, List<Statement> directives)
focal_class.full_signature: private Type parseGenericType(String type, int offset, List<Statement> directives)
focal_class.identifier: parseGenericType
focal_class.modifiers: private
focal_class.parameters: (String type, int offset, List<Statement> directives)
focal_class.return: Type
focal_class.signature: Type parseGenericType(String type, int offset, List<Statement> directives)
focal_class.class_method_signature: TemplateParser.parseGenericTypeString(String type, int offset, List<String> types, List<Integer> offsets)
focal_class.full_signature: private void parseGenericTypeString(String type, int offset, List<String> types, List<Integer> offsets)
focal_class.identifier: parseGenericTypeString
focal_class.modifiers: private
focal_class.parameters: (String type, int offset, List<String> types, List<Integer> offsets)
focal_class.return: void
focal_class.signature: void parseGenericTypeString(String type, int offset, List<String> types, List<Integer> offsets)
focal_method.body: static List<String> splitAssign(String value) {
          List<String> list = new ArrayList<String>();
          int i = value.indexOf('=');
          while ((i = value.indexOf('=', i + 1)) > 0) {
              if (i + 1 < value.length() && value.charAt(i + 1) == '=') {
                  i++;
              } else if (value.charAt(i - 1) != '>'
                      && value.charAt(i - 1) != '<'
                      && value.charAt(i - 1) != '!'
                      && isEndString(value.substring(0, i - 1))) {
                  String sub = value.substring(0, i);
                  int j = sub.lastIndexOf(',');
                  int k = sub.lastIndexOf('>');
                  if (j > 0 && j < k) {
                      int g = 0;
                      for (int n = k; n >= 0; n--) {
                          char c = sub.charAt(n);
                          if (c == '>') {
                              g++;
                          } else if (c == '<') {
                              g--;
                          }
                          if (g == 0) {
                              sub = sub.substring(0, n);
                              j = sub.lastIndexOf(',');
                              break;
                          }
                      }
                  }
                  if (j > 0) {
                      list.add(value.substring(0, j));
                      value = value.substring(j + 1);
                      i = i - j - 1;
                  } else {
                      break;
                  }
              }
          }
          list.add(value);
          return list;
      }
focal_method.class_method_signature: TemplateParser.splitAssign(String value)
focal_method.full_signature: static List<String> splitAssign(String value)
focal_method.identifier: splitAssign
focal_method.invocations: indexOf indexOf length charAt charAt charAt charAt isEndString substring substring lastIndexOf lastIndexOf charAt substring lastIndexOf add substring substring add
focal_method.modifiers: static
focal_method.parameters: (String value)
focal_method.return: List<String>
focal_method.signature: List<String> splitAssign(String value)