org.antlr.runtime.tree.RewriteRuleSubtreeStream, TODO: add mechanism to detect/puke on modification after reading from stream
| Modifier and Type | Field and Description |
|---|---|
| protected TreeAdaptor | |
| protected int | cursor
Cursor 0..n-1. |
| protected boolean | dirty
Once a node / subtree has been used in a stream, it must be dup'd from then on. |
| protected String | elementDescription
The element or stream description; usually has name of the token or rule reference that this list tracks. |
| protected List | elements
The list of tokens or subtrees we are tracking |
| protected Object | singleElement
Track single elements w/o creating a list. |
| Access | Constructor and Description |
|---|---|
| public | |
| public | RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, Object oneElement)
Create a stream with one element |
| public | RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, List<Object> elements)
Create a stream, but feed off an existing list |
| Modifier and Type | Method and Description |
|---|---|
| protected Object | |
| public void | |
| protected abstract Object | |
| public String | |
| public boolean | |
| public Object | |
| public void | reset()
Reset the condition of this stream so that it appears we have not consumed any of its elements. |
| public int | |
| protected Object |
| adaptor | back to summary |
|---|---|
| protected TreeAdaptor adaptor | |
| cursor | back to summary |
|---|---|
| protected int cursor Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), which bumps it to 1 meaning no more elements. | |
| dirty | back to summary |
|---|---|
| protected boolean dirty Once a node / subtree has been used in a stream, it must be dup'd from then on. Streams are reset after subrules so that the streams can be reused in future subrules. So, reset must set a dirty bit. If dirty, then next() always returns a dup. I wanted to use "naughty bit" here, but couldn't think of a way to use "naughty". TODO: unused? | |
| elementDescription | back to summary |
|---|---|
| protected String elementDescription The element or stream description; usually has name of the token or rule reference that this list tracks. Can include rulename too, but the exception would track that info. | |
| elements | back to summary |
|---|---|
| protected List<Object> elements The list of tokens or subtrees we are tracking | |
| singleElement | back to summary |
|---|---|
| protected Object singleElement Track single elements w/o creating a list. Upon 2nd add, alloc list | |
| RewriteRuleElementStream | back to summary |
|---|---|
| public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription) | |
| RewriteRuleElementStream | back to summary |
|---|---|
| public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, Object oneElement) Create a stream with one element
| |
| RewriteRuleElementStream | back to summary |
|---|---|
| public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, List<Object> elements) Create a stream, but feed off an existing list | |
| _next | back to summary |
|---|---|
| protected Object _next() do the work of getting the next element, making sure that it's a tree node or subtree. Deal with the optimization of single- element list versus list of size > 1. Throw an exception if the stream is empty or we're out of elements and size>1. protected so you can override in a subclass if necessary. | |
| add | back to summary |
|---|---|
| public void add(Object el) | |
| dup | back to summary |
|---|---|
| protected abstract Object dup(Object el) When constructing trees, sometimes we need to dup a token or AST subtree. Dup'ing a token means just creating another AST node around it. For trees, you must call the adaptor.dupTree() unless the element is for a tree root; then it must be a node dup. | |
| getDescription | back to summary |
|---|---|
| public String getDescription() | |
| hasNext | back to summary |
|---|---|
| public boolean hasNext() | |
| nextTree | back to summary |
|---|---|
| public Object nextTree() Return the next element in the stream. If out of elements, throw an exception unless size()==1. If size is 1, then return elements[0]. Return a duplicate node/subtree if stream is out of elements and size==1. If we've already used the element, dup (dirty bit set). | |
| reset | back to summary |
|---|---|
| public void reset() Reset the condition of this stream so that it appears we have not consumed any of its elements. Elements themselves are untouched. Once we reset the stream, any future use will need duplicates. Set the dirty bit. | |
| size | back to summary |
|---|---|
| public int size() | |
| toTree | back to summary |
|---|---|
| protected Object toTree(Object el) Ensure stream emits trees; tokens must be converted to AST nodes. AST nodes can be passed through unmolested. | |