public ISignaturePattern parseCompoundMethodOrConstructorSignaturePattern(boolean isMethod) { ISignaturePattern atomicMethodCtorSignaturePattern = parseMaybeParenthesizedMethodOrConstructorSignaturePattern(isMethod); while (isEitherAndOrOr()) { if (maybeEat("&&")) { atomicMethodCtorSignaturePattern = new AndSignaturePattern(atomicMethodCtorSignaturePattern, parseMaybeParenthesizedMethodOrConstructorSignaturePattern(isMethod)); } if (maybeEat("||")) { atomicMethodCtorSignaturePattern = new OrSignaturePattern(atomicMethodCtorSignaturePattern, parseMaybeParenthesizedMethodOrConstructorSignaturePattern(isMethod)); } } return atomicMethodCtorSignaturePattern; }
public ISignaturePattern parseCompoundFieldSignaturePattern() { int index = tokenSource.getIndex(); try { ISignaturePattern atomicFieldSignaturePattern = parseMaybeParenthesizedFieldSignaturePattern(); while (isEitherAndOrOr()) { if (maybeEat("&&")) { atomicFieldSignaturePattern = new AndSignaturePattern(atomicFieldSignaturePattern, parseMaybeParenthesizedFieldSignaturePattern()); } if (maybeEat("||")) { atomicFieldSignaturePattern = new OrSignaturePattern(atomicFieldSignaturePattern, parseMaybeParenthesizedFieldSignaturePattern()); } } return atomicFieldSignaturePattern; } catch (ParserException e) { // fallback in the case of a regular single field signature pattern that just happened to start with '(' int nowAt = tokenSource.getIndex(); tokenSource.setIndex(index); try { ISignaturePattern fsp = parseFieldSignaturePattern(); return fsp; } catch (Exception e2) { tokenSource.setIndex(nowAt); // throw the original throw e; } } }