public TypeDescriptorContext(Uri baseUri)
 {
     this.uriContext = new UriContext
     {
         BaseUri = baseUri
     };
 }
	public UriContext uri() {
		UriContext _localctx = new UriContext(Context, State);
		EnterRule(_localctx, 302, RULE_uri);
		int _la;
		try {
			EnterOuterAlt(_localctx, 1);
			{
			State = 2420;
			ErrorHandler.Sync(this);
			_la = TokenStream.La(1);
			do {
				{
				{
				State = 2419; qsafe_char();
				}
				}
				State = 2422;
				ErrorHandler.Sync(this);
				_la = TokenStream.La(1);
			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LINE_FOLD) | (1L << WSP) | (1L << ESCAPED_CHAR) | (1L << A) | (1L << B) | (1L << C) | (1L << D) | (1L << E) | (1L << F) | (1L << G) | (1L << H) | (1L << I) | (1L << J) | (1L << K) | (1L << L) | (1L << M) | (1L << N) | (1L << O) | (1L << P) | (1L << Q) | (1L << R) | (1L << S) | (1L << T) | (1L << U) | (1L << V) | (1L << W) | (1L << X) | (1L << Y) | (1L << Z) | (1L << EXCLAMATION) | (1L << HASH) | (1L << DOLLAR) | (1L << X25) | (1L << AMP) | (1L << X27) | (1L << X28) | (1L << X29) | (1L << X2A) | (1L << PLUS) | (1L << COMMA) | (1L << MINUS) | (1L << DOT) | (1L << FSLASH) | (1L << D0) | (1L << D1) | (1L << D2) | (1L << D3) | (1L << D4) | (1L << D5) | (1L << D6) | (1L << D7) | (1L << D8) | (1L << D9) | (1L << COL) | (1L << SCOL) | (1L << X3C) | (1L << ASSIGN) | (1L << X3E) | (1L << X3F) | (1L << X40))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (X5B - 64)) | (1L << (BSLASH - 64)) | (1L << (X5D - 64)) | (1L << (CARET - 64)) | (1L << (USCORE - 64)) | (1L << (X60 - 64)) | (1L << (X7B - 64)) | (1L << (X7C - 64)) | (1L << (X7D - 64)) | (1L << (X7E - 64)) | (1L << (NON_US_ASCII - 64)))) != 0) );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			ErrorHandler.ReportError(this, re);
			ErrorHandler.Recover(this, re);
		}
		finally {
			ExitRule();
		}
		return _localctx;
	}