### Question:
QueryPropertyMarker extends ASTReference { public static JexlNode getQueryPropertySource(JexlNode node, Class<? extends QueryPropertyMarker> type) { List<JexlNode> sourceNodes = new ArrayList<>(); if (QueryPropertyMarkerVisitor.instanceOf(node, type, sourceNodes) && !sourceNodes.isEmpty()) { if (sourceNodes.size() == 1) return sourceNodes.get(0); else return JexlNodeFactory.createUnwrappedAndNode(sourceNodes); } return null; } QueryPropertyMarker();  QueryPropertyMarker(int id);  QueryPropertyMarker(Parser p, int id);  QueryPropertyMarker(JexlNode source); static boolean instanceOf(JexlNode node, Class<? extends QueryPropertyMarker> type); static JexlNode getQueryPropertySource(JexlNode node, Class<? extends QueryPropertyMarker> type);  }### Answer:
@Test public void testGetQueryPropertySource() throws ParseException { String source = "FOO == 'bar'"; JexlNode sourceNode = JexlASTHelper.parseJexlQuery(source); JexlNode delayedNode = ASTDelayedPredicate.create(sourceNode); String delayedString = JexlStringBuildingVisitor.buildQueryWithoutParse(delayedNode); assertEquals(delayedString, "((ASTDelayedPredicate = true) && (FOO == 'bar'))"); JexlNode parsedSource = QueryPropertyMarker.getQueryPropertySource(delayedNode, ASTDelayedPredicate.class); assertEquals(sourceNode, parsedSource); }