public final MethodDeclarationContext methodDeclaration() throws RecognitionException {
		MethodDeclarationContext _localctx = new MethodDeclarationContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_methodDeclaration);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(436);
			switch (_input.LA(1)) {
			case BOOLEAN:
			case BYTE:
			case CHAR:
			case DOUBLE:
			case FLOAT:
			case INT:
			case LONG:
			case SHORT:
			case Identifier:
				{
				setState(434); type();
				}
				break;
			case VOID:
				{
				setState(435); match(VOID);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(438); match(Identifier);
			setState(439); formalParameters();
			setState(444);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==LBRACK) {
				{
				{
				setState(440); match(LBRACK);
				setState(441); match(RBRACK);
				}
				}
				setState(446);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(449);
			_la = _input.LA(1);
			if (_la==THROWS) {
				{
				setState(447); match(THROWS);
				setState(448); qualifiedNameList();
				}
			}

			setState(453);
			switch (_input.LA(1)) {
			case LBRACE:
				{
				setState(451); methodBody();
				}
				break;
			case SEMI:
				{
				setState(452); match(SEMI);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}