test_class.file: rice-framework/krad-web-framework/src/test/java/org/kuali/rice/krad/uif/util/ObjectPathExpressionParserTest.java
test_class.identifier: ObjectPathExpressionParserTest
test_class.superclass: extends ProcessLoggingUnitTest
test_case.body: @Test
      public void testJoinParsePathExpression() {
          @SuppressWarnings("unchecked")
          List<String> l1 = (List<String>) ObjectPathExpressionParser.parsePathExpression(null, "foo.bar", new JoinIt());
          assertEquals(2, l1.size());
          assertEquals("foo", l1.get(0));
          assertEquals("bar", l1.get(1));
          
          @SuppressWarnings("unchecked")
          List<String> l2 = (List<String>) ObjectPathExpressionParser.parsePathExpression(null, "foo[bar]", new JoinIt());
          assertEquals(2, l2.size());
          assertEquals("foo", l2.get(0));
          assertEquals("bar", l2.get(1));
          
          @SuppressWarnings("unchecked")
          List<String> l3 = (List<String>) ObjectPathExpressionParser.parsePathExpression(null, "foo[bar-bar.baz].fez", new JoinIt());
          assertEquals(3, l3.size());
          assertEquals("foo", l3.get(0));
          assertEquals("bar-bar.baz", l3.get(1));
          assertEquals("fez", l3.get(2));
      }
test_case.class_method_signature: ObjectPathExpressionParserTest.testJoinParsePathExpression()
test_case.full_signature: @Test public void testJoinParsePathExpression()
test_case.identifier: testJoinParsePathExpression
test_case.invocations: parsePathExpression assertEquals size assertEquals get assertEquals get parsePathExpression assertEquals size assertEquals get assertEquals get parsePathExpression assertEquals size assertEquals get assertEquals get assertEquals get
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testJoinParsePathExpression()
focal_class.declarator: TL_EL_PARSE_STATE = new ThreadLocal<ParseState>()
focal_class.modifier: private static final
focal_class.original_string: private static final ThreadLocal<ParseState> TL_EL_PARSE_STATE = new ThreadLocal<ParseState>();
focal_class.type: ThreadLocal<ParseState>
focal_class.var_name: TL_EL_PARSE_STATE
focal_class.file: rice-framework/krad-web-framework/src/main/java/org/kuali/rice/krad/uif/util/ObjectPathExpressionParser.java
focal_class.identifier: ObjectPathExpressionParser
focal_class.class_method_signature: ObjectPathExpressionParser.indexOfCloseBracket(String path, int leftBracketIndex)
focal_class.full_signature: public static int indexOfCloseBracket(String path, int leftBracketIndex)
focal_class.identifier: indexOfCloseBracket
focal_class.modifiers: public static
focal_class.parameters: (String path, int leftBracketIndex)
focal_class.return: int
focal_class.signature: int indexOfCloseBracket(String path, int leftBracketIndex)
focal_class.class_method_signature: ObjectPathExpressionParser.isPath(String propertyName)
focal_class.full_signature: public static boolean isPath(String propertyName)
focal_class.identifier: isPath
focal_class.modifiers: public static
focal_class.parameters: (String propertyName)
focal_class.return: boolean
focal_class.signature: boolean isPath(String propertyName)
focal_class.class_method_signature: ObjectPathExpressionParser.parsePathExpression(Object root, String path, final PathEntry pathEntry)
focal_class.full_signature: @SuppressWarnings("unchecked") public static T parsePathExpression(Object root, String path, final PathEntry pathEntry)
focal_class.identifier: parsePathExpression
focal_class.modifiers: @SuppressWarnings("unchecked") public static
focal_class.parameters: (Object root, String path, final PathEntry pathEntry)
focal_class.return: T
focal_class.signature: T parsePathExpression(Object root, String path, final PathEntry pathEntry)
focal_class.class_method_signature: ObjectPathExpressionParser.ObjectPathExpressionParser()
focal_class.full_signature: private  ObjectPathExpressionParser()
focal_class.identifier: ObjectPathExpressionParser
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.signature:  ObjectPathExpressionParser()
focal_method.body: @SuppressWarnings("unchecked")
      public static <T> T parsePathExpression(Object root, String path, final PathEntry pathEntry) {
  
          // NOTE: This iterative parser allows support for subexpressions
          // without recursion. When a subexpression start token '[' is
          // encountered the current continuation is pushed onto a stack. When
          // the subexpression is resolved, the continuation is popped back
          // off the stack and resolved using the subexpression result as the
          // arg. All subexpressions start with the same root passed in as an
          // argument for this method. - MWF
  
          ParseState parseState = (ParseState) TL_EL_PARSE_STATE.get();
          boolean recycle;
  
          if (parseState == null) {
              TL_EL_PARSE_STATE.set(new ParseState());
              parseState = TL_EL_PARSE_STATE.get();
              recycle = true;
          } else if (parseState.isActive()) {
              ProcessLogger.ntrace("el-parse:", ":nested", 100);
              parseState = new ParseState();
              recycle = false;
          } else {
              recycle = true;
          }
  
          try {
              parseState.originalPath = path;
              parseState.originalPathIndex = 0;
              parseState.parentPath = null;
              parseState.currentContinuation = pathEntry.parse(null, root, null);
              while (path != null) {
                  path = parseState.prepareNextScan(path);
                  parseState.scan(path);
                  path = parseState.step(path, pathEntry);
              }
              return (T) parseState.currentContinuation;
          } finally {
              assert !recycle || parseState == TL_EL_PARSE_STATE.get();
              parseState.reset();
          }
      }
focal_method.class_method_signature: ObjectPathExpressionParser.parsePathExpression(Object root, String path, final PathEntry pathEntry)
focal_method.full_signature: @SuppressWarnings("unchecked") public static T parsePathExpression(Object root, String path, final PathEntry pathEntry)
focal_method.identifier: parsePathExpression
focal_method.invocations: get set get isActive ntrace parse prepareNextScan scan step get reset
focal_method.modifiers: @SuppressWarnings("unchecked") public static
focal_method.parameters: (Object root, String path, final PathEntry pathEntry)
focal_method.return: T
focal_method.signature: T parsePathExpression(Object root, String path, final PathEntry pathEntry)