1818 * specific language governing permissions and limitations
1919 * under the License.
2020 */
21+
2122package com .igormaznitsa .prologparser ;
2223
2324import com .igormaznitsa .prologparser .exceptions .CriticalUnexpectedError ;
3132import com .igormaznitsa .prologparser .tokenizer .Op ;
3233import com .igormaznitsa .prologparser .tokenizer .OpAssoc ;
3334import com .igormaznitsa .prologparser .tokenizer .TermWrapper ;
35+
3436import java .util .ArrayList ;
3537
3638final class AstItem {
3739
40+ private final PrologTerm savedTerm ;
3841 private AstItem leftItem ;
3942 private AstItem rightItem ;
4043 private AstItem parentItem ;
41- private final PrologTerm savedTerm ;
4244
4345 AstItem (final PrologTerm term , final int line , final int pos ) {
4446 if (term == null ) {
4547 this .savedTerm = null ;
4648 } else {
4749 final TermType termType = term .getType ();
4850 if (termType == TermType .OPERATOR ) {
49- final TermWrapper termWrapper = new TermWrapper (term );
50- this .savedTerm = termWrapper ;
51+ this .savedTerm = new TermWrapper (term );
5152 } else {
5253 this .savedTerm = term ;
5354 }
@@ -190,13 +191,13 @@ private boolean isPrecedenceOk() {
190191
191192 private boolean isAnyBlock () {
192193 return this .savedTerm .getType () == TermType .STRUCT
193- && (this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK
194- || this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK );
194+ && (this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK
195+ || this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK );
195196 }
196197
197198 private boolean isBlock () {
198199 return this .savedTerm .getType () == TermType .STRUCT
199- && this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK ;
200+ && this .savedTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK ;
200201 }
201202
202203 private boolean isOperator () {
@@ -236,7 +237,7 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
236237
237238 if (appropriateOperator == null ) {
238239 if (operator .getArity () == 1 ) {
239- return new PrologStruct (operator , new PrologTerm []{blockContent }, wrapper .getLine (), wrapper .getPos ());
240+ return new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
240241 } else {
241242 return new PrologStruct (new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (), wrapper .getPos ()), terms , wrapper .getLine (), wrapper .getPos ());
242243 }
@@ -247,20 +248,20 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
247248
248249 } else {
249250 if (rightTerm .isCurlyBlock ()) {
250- return new PrologStruct (operator , new PrologTerm []{rightTerm }, wrapper .getLine (), wrapper .getPos ());
251+ return new PrologStruct (operator , new PrologTerm [] {rightTerm }, wrapper .getLine (), wrapper .getPos ());
251252 } else {
252253 if (operator .getArity () == 1 ) {
253- return new PrologStruct (operator , new PrologTerm []{blockContent }, wrapper .getLine (), wrapper .getPos ());
254+ return new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
254255 } else {
255256 operator = parser .getContext ().findOpForName (parser , operator .getText ()).findForArity (1 );
256- return operator == null ? new PrologStruct (new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (), wrapper .getPos ()), new PrologTerm []{blockContent }, wrapper .getLine (), wrapper .getPos ())
257- : new PrologStruct (operator , new PrologTerm []{blockContent }, wrapper .getLine (), wrapper .getPos ());
257+ return operator == null ? new PrologStruct (new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (), wrapper .getPos ()), new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ())
258+ : new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
258259 }
259260 }
260261 }
261262 }
262263 } else if (this .isAnyBlock () && this .leftItem .isAnyBlock ()) {
263- return new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm []{this .leftItem .convertToTermAndRelease (parser )}, wrapper .getLine (), wrapper .getPos ());
264+ return new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm [] {this .leftItem .convertToTermAndRelease (parser )}, wrapper .getLine (), wrapper .getPos ());
264265 }
265266
266267 if (!isOperandsOk ()) {
@@ -273,7 +274,7 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
273274 if (!isPrecedenceOk ()) {
274275 if (this .rightItem != null && this .rightItem .isOperator () && this .rightItem .getOpAssoc ().isPrefix ()) {
275276 left = this .leftItem == null ? null : this .leftItem .convertToTermAndRelease (parser );
276- right = new PrologStruct (Op .VIRTUAL_OPERATOR_BLOCK , new PrologTerm []{this .rightItem .convertToTermAndRelease (parser )});
277+ right = new PrologStruct (Op .VIRTUAL_OPERATOR_BLOCK , new PrologTerm [] {this .rightItem .convertToTermAndRelease (parser )});
277278 } else {
278279 throw new PrologParserException ("Operator precedence clash or missing operator: [" + wrapper .getText () + ']' , wrapper .getLine (), wrapper .getPos ());
279280 }
@@ -293,23 +294,23 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
293294
294295 final PrologStruct operatorStruct ;
295296 if (left == null ) {
296- operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm []{right }, wrapper .getLine (), wrapper .getPos ());
297+ operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm [] {right }, wrapper .getLine (), wrapper .getPos ());
297298 } else {
298- operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), right == null ? new PrologTerm []{left } : new PrologTerm []{left , right }, wrapper .getLine (), wrapper .getPos ());
299+ operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), right == null ? new PrologTerm [] {left } : new PrologTerm [] {left , right }, wrapper .getLine (), wrapper .getPos ());
299300 }
300301 result = operatorStruct ;
301302 }
302303 break ;
303304 case STRUCT : {
304305 final PrologStruct thisStruct = (PrologStruct ) this .savedTerm ;
305306 if ((thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK || thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )
306- && thisStruct .getArity () == 1 ) {
307+ && thisStruct .getArity () == 1 ) {
307308
308309 final PrologTerm thatTerm = thisStruct .getTermAt (0 );
309310
310311 if (thatTerm .getType () == TermType .STRUCT && (thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK || thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )) {
311312 // rolling normal blocks
312- result = thatTerm .isBlock () && ( this .isBlock () && (this .parentItem == null || ( this .parentItem != null && this . parentItem . isBlock ()) )) ? thatTerm : thisStruct ;
313+ result = thatTerm .isBlock () && this .isBlock () && (this .parentItem == null || this .parentItem . isBlock ()) ? thatTerm : thisStruct ;
313314 } else {
314315 result = thisStruct ;
315316 }
0 commit comments