###############################################################################
# Copyright (c) 2008 IONA Technologies PLC
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# IONA Technologies PLC - initial API and implementation
###############################################################################

#JDTUtils
TYPE_NAME_DIFFERENT_CASE_EXISTS=A Type with the same name but different case already exists
TYPE_WITH_NAME_ALREADY_EXISTS=A compilation unit named ''{0}'' already exists in package ''{1}''

WEBSERVICE_ANNOTATION_PROCESSOR_PUBLIC_ABSTRACT_FINAL_MESSAGE=Classes annotated with @WebService must be an outer public class, must not be final, and must not be abstract
WEBSERVICE_ANNOTATION_PROCESSOR_OVERRIDE_FINALIZE_MESSAGE=Classes annotated with @WebService must not define a finalize() method
WEBMETHOD_ANNOTATION_PROCESSOR_ONLY_SUPPORTED_ON_CLASSES_WITH_WEBSERVICE_MESSAGE=@WebMethod only supported on classes annotated with @WebService
WEBMETHOD_ANNOTATION_PROCESSOR_ONLY_ON_PUBLIC_METHODS_MESSAGE=@WebMethod only allowed on public methods
WEBMETHOD_ANNOTATION_PROCESSOR_EXCLUDE_SPECIFEID_NO_OTHER_ATTRIBUTES_ALLOWED_MESSAGE=@WebMethod exclude attribute is specified. No other attributes allowed.
WEBMETHOD_ANNOTATION_PROCESSOR_EXCLUDE_NOT_ALLOWED_ON_SEI=@WebMethod annotations in SEI's are not allowed to specify the exclude attribute.
WEBSERVICE_ANNOTATION_PROCESSOR_SERVICENAME_SEI_ERROR_MESSAGE=@WebService serviceName element not allowed on SEI
WEBSERVICE_ANNOTATION_PROCESSOR_ENDPOINTINTERFACE_SEI_ERROR_MESSAGE=@WebService endpointInterface element not allowed on SEI
WEBSERVICE_ANNOTATION_PROCESSOR_PORTNAME_SEI_ERROR_MESSAGE=@WebService portName element not allowed on SEI
WEBSERVICE_ANNOTATION_PROCESSOR_WEBSERVICE_ENPOINTINTERFACE_NO_WEBMETHOS_ERROR_MESSAGE=@WebService annotation contains an endpointInterface attribute. No methods annotated with @WebMethod allowed on implementation class in this instance
WEBSERVICE_ANNOTATION_PROCESSOR_WEBSERVICE_WEBSERVICEPROVIDER_ERROR_MESSAGE=@WebService and @WebServiceProvider annotations cannot both be present on the same class
ONEWAY_ANNOTATION_PROCESSOR_NO_RETURN_VALUE_ERROR_MESSAGE=@Oneway methods must not return a value
SOAPBINDING_ANNOTATION_PROCESSOR_ON_METHOD_STYLE_DOCUMENT_ONLY_MESSAGE=The @SOAPBinding annotation may be placed on a method if and only if the SOAPBinding.style is DOCUMENT.
SOAPBINDING_ANNOTATION_PROCESSOR_NO_PARAMETERSTYLE_WHEN_ENCODED_MESSAGE=A method that has a SOAPBinding.use of ENCODED cannot have a SOAPBinding.parameterStyle present.