<?xml version="1.0" encoding="UTF-8"?>
	<!--
		Licensed to the Apache Software Foundation (ASF) under one or more
		contributor license agreements. See the NOTICE file distributed with
		this work for additional information regarding copyright ownership.
		The ASF licenses this file to You under the Apache License, Version
		2.0 (the "License"); you may not use this file except in compliance
		with the License. You may obtain a copy of the License at

		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
		applicable law or agreed to in writing, software distributed under the
		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
		CONDITIONS OF ANY KIND, either express or implied. See the License for
		the specific language governing permissions and limitations under the
		License.
	-->

	<!-- Exclusion filter for running FindBugs against Apache Harmony -->

	<!--
		Format and code information is available here
		http://findbugs.sourceforge.net/manual/filter.html
	-->

<FindBugsFilter>

	<!-- Spec requires it is called Date -->
	<Match>
		<Class name="java.sql.Date" />
		<Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
	</Match>

	<!-- Spec shows there is no compareTo(Object) method. -->
	<Match>
		<Class name="java.sql.Timestamp" />
		<Bug pattern="CO_SELF_NO_OBJECT" />
	</Match>

	<!-- Spec shows there is an equals() but no hashCode(). Shameful.-->
	<Match>
		<Class name="java.sql.Timestamp" />
		<Bug pattern="HE_EQUALS_NO_HASHCODE" />
	</Match>

	<!-- equals() follows spec and is not symmetrical.-->
	<Match>
		<Class name="java.sql.Timestamp" />
		<Bug pattern="EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC" />
	</Match>

</FindBugsFilter>
