###############################################################################
# Copyright (c) 2000, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

Breakpoint.no_associated_marker=Breakpoint does not have an associated marker.

BreakpointManager.Missing_breakpoint_definition=Missing breakpoint definition for marker type {0}
BreakpointManager.Missing_model_identifier=Breakpoint missing debug model identifier
BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__markerType_1=Breakpoint extension {0} missing required attribute: markerType
BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__class_2=Breakpoint extension {0} missing required attribute: class
BreakpointManager.Class_{0}_specified_by_breakpoint_extension_{1}_does_not_implement_required_interface_IBreakpoint._3=Class {0} specified by breakpoint extension {1} does not implement required interface IBreakpoint.
BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._4=An exception occurred during breakpoint change notification.
BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._5=An exception occurred during breakpoint change notification.

DebugEvent.illegal_detail=detail is not one of the allowed constants, see IDebugEventConstants
DebugEvent.illegal_kind=kind is not one of the allowed constants, see IDebugEventConstants

DebugPlugin.Invalid_status_handler_extension__{0}_2=Invalid status handler extension: {0}
DebugPlugin.Debug_async_queue_1=Debug async queue
DebugPlugin.Exception_occurred_executing_command_line._1=Exception occurred executing command line.
DebugPlugin.Eclipse_runtime_does_not_support_working_directory_2=Eclipse runtime does not support working directory
DebugPlugin.Registered_status_handler_{0}_does_not_implement_required_interface_IStatusHandler._1=Registered status handler {0} does not implement required interface IStatusHandler.
DebugPlugin.An_exception_occurred_while_dispatching_debug_events._2=An exception occurred while dispatching debug events.
DebugPlugin.An_exception_occurred_while_filtering_debug_events._3=An exception occurred while filtering debug events.
DebugPlugin.31=Invalid process factory extension contributed by {0}; id: {1}
DebugPlugin.0=Exception processing debug async queue
DebugPlugin.1=Debug Event Dispatch

EnvironmentVariableResolver.0=Environment variable not specified

InputStreamMonitor.label=Input Stream Monitor

Launch.terminate_failed=Terminate failed

LaunchConfiguration.Exception_occurred_creating_launch_configuration_memento_9=Exception occurred creating launch configuration memento
LaunchConfiguration.Exception_occurred_parsing_memento_5=Exception occurred parsing memento
LaunchConfiguration.Failed_to_delete_launch_configuration._1=Failed to delete launch configuration.
LaunchConfiguration.Invalid_launch_configuration_memento__missing_path_attribute_3=Invalid launch configuration memento: missing path attribute
LaunchConfiguration.Invalid_launch_configuration_memento__missing_local_attribute_4=Invalid launch configuration memento: missing local attribute
LaunchConfiguration.Unable_to_restore_location_for_launch_configuration_from_memento__{0}_1=Unable to restore location for launch configuration from memento: {0}
LaunchConfiguration.Unable_to_generate_memento_for_{0},_shared_file_does_not_exist._1=Unable to generate memento for {0}, shared file does not exist.
LaunchConfiguration.13=Incompatible launch mode: expecting {0} instead of {1}
LaunchConfigurationDelegate.6=Searching for errors
LaunchConfigurationDelegate.7=Searching for errors in 

LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_boolean._3=Attribute {0} is not of type boolean.
LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_int._2=Attribute {0} is not of type int.
LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.lang.String._1=Attribute {0} is not of type java.lang.String.
LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.List._1=Attribute {0} is not of type java.util.List.
LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.Map._1=Attribute {0} is not of type java.util.Map.
LaunchConfigurationInfo.Invalid_launch_configuration_XML._10=Invalid launch configuration XML.
LaunchConfigurationInfo.missing_type=Launch configuration type id \"{0}\" does not exist.\nPossible causes:\n\tMissing specification of a launch type (missing plug-in)\n\tIncorrect launch configuration XML
LaunchConfigurationInfo.36=A null key has been specified for an attribute in this launch configuration

LaunchConfigurationWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1={0} occurred generating launch configuration XML.
LaunchConfigurationWorkingCopy.Specified_container_for_launch_configuration_does_not_exist_2=Specified container for launch configuration does not exist
LaunchConfigurationWorkingCopy.5=Unable to save launch configuration.

LaunchManager.{0}_occurred_while_reading_launch_configuration_file_{1}._1={0} occurred while reading launch configuration file: {1}.
LaunchManager.Invalid_launch_configuration_index._18=Invalid launch configuration index.
LaunchManager.Invalid_source_locator_extentsion_defined_by_plug-in___{0}______id___not_specified_12=Invalid source locator extension defined by plug-in \"{0}\": \"id\" not specified
LaunchManager.does_not_exist=Launch configuration {0} at {1} does not exist.
LaunchManager.Source_locator_does_not_exist__{0}_13=Source locator does not exist: {0}
LaunchManager.Invalid_launch_configuration_comparator_extension_defined_by_plug-in_{0}_-_attribute_not_specified_1=Invalid launch configuration comparator extension defined by plug-in {0} - attribute not specified
LaunchManager.An_exception_occurred_during_launch_change_notification._1=An exception occurred during launch change notification.
LaunchManager.An_exception_occurred_during_launch_configuration_change_notification._3=An exception occurred during launch configuration change notification.
LaunchManager.30=Unable to retrieve shared launch configuration file for {0}

LaunchMode.1=Required attribute {0} missing for launchMode extension.

LogicalStructureType.7=Required attribute {0} missing for logicalStructureType extension.
LogicalStructureType.0=<Missing Description>
LogicalStructureProvider.0=Required attribute modelIdentifier missing for logicalStructureType extension.
LogicalStructureProvider.1=Required attribute class missing for logicalStructureType extension.

OutputStreamMonitor.label=Output Stream Monitor

ProcessMonitorJob.0=Process monitor

RuntimeProcess.terminate_failed=Terminate failed
RuntimeProcess.Exit_value_not_available_until_process_terminates._1=Exit value not available until process terminates.

ExpressionManager.An_exception_occurred_during_expression_change_notification._1=An exception occurred during expression change notification.

LaunchConfigurationType.Launch_delegate_for_{0}_does_not_implement_required_interface_ILaunchConfigurationDelegate._1=Launch delegate for {0} does not implement required interface ILaunchConfigurationDelegate.
LaunchConfigurationType.9=Launch mode {0} not supported for configuration type {1}
LaunchConfigurationType.10=Launch delegate not registered for configuration type {0}, mode {1}

MemoryRenderingManager.ErrorMsg = The selected rendering cannot be created: {0}
WatchExpression.0=(Watch expressions not supported)
NullStreamsProxy.0=Null Stream Monitor