# (C) Copyright Uwe Schindler (Generics Policeman) and others.
# Parts of this work are licensed to the Apache Software Foundation (ASF)
# under one or more contributor license agreements.
#
# Licensed 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.
#
# This file contains API signatures which are specific to POI.
# The goal is to minimize implicit defaults

@defaultMessage POI forbidden APIs which are tolerated in non-production code, e.g. in tests and examples

# We have applications which use this to return error codes on invalid commandline parameters...
#@defaultMessage Please do not terminate the application
#java.lang.System#exit(int)
#java.lang.Runtime#exit(int)
#java.lang.Runtime#halt(int)


java.lang.System#gc() @ Please do not try to stop the world
java.lang.Throwable#printStackTrace() @ Please use POILogger for exceptions
java.lang.Throwable#printStackTrace(java.io.PrintStream) @ Please use POILogger for exceptions
java.lang.Throwable#printStackTrace(java.io.PrintWriter) @ Please use POILogger for exceptions