###############################################################################
# Copyright (c) 2009 Shane Clarke
# 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:
# Shane Clarke - initial API and implementation
###############################################################################
ANNOTATION_ARRAY_CELL_EDITOR_ADD_LABEL=Add
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL=Browse...
ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL=Down
ANNOTATION_ARRAY_CELL_EDITOR_EDIT_ARRAY_VALUES_TITLE=Edit Array Values
ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL=Remove
ANNOTATION_ARRAY_CELL_EDITOR_SELECT_CLASS_TITLE=Select Class
ANNOTATION_ARRAY_CELL_EDITOR_UP_LABEL=Up
ANNOTATION_ARRAY_CELL_EDITOR_NESTED_ARRAYS_NOT_SUPPORTED=Nested Arrays within Arrays not yet supported
ANNOTATION_EDITING_SUPPORT_NOT_VALID_MESSAGE_PREFIX=Not a valid 

ANNOTATIONS_VIEW_ANNOTATIONS_NOT_AVAILABLE_ON_SELECTION=Annotations not available for current selection
ANNOTATIONS_VIEW_ANNOTATIONS_VALUES_COLUMN_NAME=Values
ANNOTATIONS_VIEW_ANNOTATIONS_COLUMN_NAME=Annotations

ANNOTATIONS_VIEW_FILTER_ACTION_NAME=Filters...
ANNOTATIONS_VIEW_FILTER_ACTION_SELECT_CATEGORIES_MESSAGE=Select Annotation Categories to Filter

ANNOTATIONS_VIEW_NO_SUITABLE_LIBRARY_FOUND=No suitable {0} library can be found on the projects classpath.\n\n

ANNOTATIONS_VIEW_OTHER_ANNOTATION_LIBRARIES_USE=\n(For use with non JAX-WS libraries please setup the project with the required libraries.)\n\n

CONFIGURE_JAVA_1_6_LIBRARY=To select a 1.6 or above compliant JRE configure the <a href="1" >Installed JREs</a> or change the JRE on the <a href="2" >Java build path</a>.

ADD_ANNOTATION=Add annotation ''@{0}''
ADD_MISSING_METHOD=Add missing method
ADD_UNIMPLEMENTED_METHODS=Add unimplemented methods
CHANGE_METHOD_VISIBILITY=Change method visibility to ''{0}''
CHANGE_METHOD_RETURN_TYPE=Change method return type to match SEI method return type
CREATE_CONSTRUCTOR=Create constructor ''{0}()''
REMOVE_ANNOTATION=Remove annotation ''@{0}''
REMOVE_METHOD=Remove method ''{0}''
REMOVE_FINAL_MODIFIER=Remove ''final'' modifier of ''{0}''(..)
REMOVE_ILLEGAL_MODIFIER=Remove Illegal modifier
REMOVE_STATIC_MODIFIER=Remove ''static'' modifier of ''{0}''(..)
REMOVE_MEMBERVALUEPAIR=Remove member value pair ''{0}''
REMOVE_ALL_OTHER_MEMBERVALUEPAIRS=Remove all other member value pairs
