if (!hasGenerics()) return false;
	private boolean skipScope() {		switch (fToken) {			case Symbols.TokenRPAREN:				return skipScope(Symbols.TokenLPAREN, Symbols.TokenRPAREN);			case Symbols.TokenRBRACKET:				return skipScope(Symbols.TokenLBRACKET, Symbols.TokenRBRACKET);			case Symbols.TokenRBRACE:				return skipScope(Symbols.TokenLBRACE, Symbols.TokenRBRACE);			case Symbols.TokenGREATERTHAN:				int storedPosition= fPosition;				int storedToken= fToken;				nextToken();				switch (fToken) {					case Symbols.TokenIDENT:						if (!isGenericStarter(getTokenContent()))							break;					case Symbols.TokenQUESTIONMARK:					case Symbols.TokenGREATERTHAN:						if (skipScope(Symbols.TokenLESSTHAN, Symbols.TokenGREATERTHAN))							return true;				}				// <> are harder to detect - restore the position if we fail				fPosition= storedPosition;				fToken= storedToken;				return false;							default:				Assert.isTrue(false);				return false;		}	}