/*******************************************************************************
 * Copyright (c) 2000, 2018 IBM Corporation and others.
 * 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:
 * IBM - Initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.launching;

import org.eclipse.osgi.util.NLS;

public class LaunchingMessages extends NLS {
	private static final String BUNDLE_NAME = "org.eclipse.jdt.internal.launching.LaunchingMessages";//$NON-NLS-1$

	public static String AbstractJavaLaunchConfigurationDelegate_Java_project_not_specified_9;
	public static String AbstractJavaLaunchConfigurationDelegate_JRE_home_directory_for__0__does_not_exist___1__6;
	public static String AbstractJavaLaunchConfigurationDelegate_JRE_home_directory_not_specified_for__0__5;
	public static String AbstractJavaLaunchConfigurationDelegate_Main_type_not_specified_11;
	public static String AbstractJavaLaunchConfigurationDelegate_Project_does_not_exist_or_is_not_a_Java_project_10;
	public static String AbstractJavaLaunchConfigurationDelegate_The_specified_JRE_installation_does_not_exist_4;
	public static String AbstractJavaLaunchConfigurationDelegate_Working_directory_does_not_exist___0__12;

	public static String ClasspathContainerSourceContainerTypeDelegate_5;
	public static String ClasspathContainerSourceContainerTypeDelegate_6;
	public static String ClasspathContainerSourceContainerTypeDelegate_7;

	public static String ClasspathVariableSourceContainerTypeDelegate_5;
	public static String ClasspathVariableSourceContainerTypeDelegate_6;
	public static String ClasspathVariableSourceContainerTypeDelegate_7;

	public static String DefaultProjectClasspathEntry_2;

	public static String DefaultProjectClasspathEntry_3;
	public static String DefaultProjectClasspathEntry_4;

	public static String EEVMType_1;
	public static String EEVMType_2;
	public static String EEVMType_3;
	public static String EEVMType_4;
	public static String EEVMType_5;
	public static String EEVMType_6;

	public static String ExecutionEnvironmentDescription_0;

	public static String ExecutionEnvironmentDescription_1;

	public static String JavaLocalApplicationLaunchConfigurationDelegate_Verifying_launch_attributes____1;
	public static String JavaLocalApplicationLaunchConfigurationDelegate_Creating_source_locator____2;
	public static String JavaLocalApplicationLaunchConfigurationDelegate_0;

	public static String JavaProjectSourceContainerTypeDelegate_5;
	public static String JavaProjectSourceContainerTypeDelegate_6;
	public static String JavaProjectSourceContainerTypeDelegate_7;

	public static String JavaRemoteApplicationLaunchConfigurationDelegate_Connector_not_specified_2;
	public static String JavaRemoteApplicationLaunchConfigurationDelegate_Attaching_to__0_____1;
	public static String JavaRemoteApplicationLaunchConfigurationDelegate_Verifying_launch_attributes____1;
	public static String JavaRemoteApplicationLaunchConfigurationDelegate_Creating_source_locator____2;

	public static String JavaRuntime_24;

	public static String JavaRuntime_25;

	public static String JavaRuntime_badFormat;
	public static String JavaRuntime_Specified_VM_install_type_does_not_exist___0__2;
	public static String JavaRuntime_Specified_VM_install_not_found__type__0___name__1__2;
	public static String JavaRuntime_Launch_configuration__0__references_non_existing_project__1___1;
	public static String JavaRuntime_Could_not_resolve_classpath_container___0__1;
	public static String JavaRuntime_Classpath_references_non_existant_project___0__3;
	public static String JavaRuntime_Classpath_references_non_existant_archive___0__4;
	public static String JavaRuntime_26;
	public static String JavaRuntime_27;
	public static String JavaRuntime_28;
	public static String JavaRuntime_32;

	public static String LaunchingPlugin_35;
	public static String LaunchingPlugin_36;
	public static String LaunchingPlugin_37;
	public static String LaunchingPlugin_32;
	public static String LaunchingPlugin_34;
	public static String LaunchingPlugin_0;
	public static String LaunchingPlugin_1;

	public static String LaunchingPlugin_38;

	public static String LaunchingPlugin_39;
	public static String LaunchingPlugin_40;

	public static String libraryLocation_assert_libraryNotNull;

	public static String SocketAttachConnector_Failed_to_connect_to_remote_VM_1;
	public static String SocketAttachConnector_Socket_attaching_connector_not_available_3;
	public static String SocketAttachConnector_Standard__Socket_Attach__4;
	public static String SocketAttachConnector_Failed_to_connect_to_remote_VM_because_of_unknown_host____0___1;
	public static String SocketAttachConnector_Failed_to_connect_to_remote_VM_as_connection_was_refused_2;
	public static String SocketAttachConnector_Connecting____1;
	public static String SocketAttachConnector_Configuring_connection____1;
	public static String SocketAttachConnector_Establishing_connection____2;

	public static String SocketListenConnector_0;
	public static String SocketListenConnector_1;
	public static String SocketListenConnector_2;
	public static String SocketListenConnector_3;
	public static String SocketListenConnector_4;
	public static String SocketListenConnectorProcess_0;
	public static String SocketListenConnectorProcess_1;
	public static String SocketListenConnectorProcess_4;
	public static String SocketListenConnectorProcess_5;

	public static String StandardVMDebugger_Could_not_find_a_free_socket_for_the_debugger_1;
	public static String StandardVMDebugger_Couldn__t_connect_to_VM_4;
	public static String StandardVMDebugger_Couldn__t_connect_to_VM_5;
	public static String StandardVMDebugger_Couldn__t_find_an_appropriate_debug_connector_2;
	public static String StandardVMDebugger_Launching_VM____1;
	public static String StandardVMDebugger_Finding_free_socket____2;
	public static String StandardVMDebugger_Constructing_command_line____3;
	public static String StandardVMDebugger_Starting_virtual_machine____4;
	public static String StandardVMDebugger_Establishing_debug_connection____5;

	public static String StandardVMRunner__0____1___2;
	public static String StandardVMRunner__0__at_localhost__1__1;
	public static String StandardVMRunner_Specified_working_directory_does_not_exist_or_is_not_a_directory___0__3;
	public static String StandardVMRunner_Launching_VM____1;
	public static String StandardVMRunner_Constructing_command_line____2;
	public static String StandardVMRunner_Starting_virtual_machine____3;
	public static String StandardVMRunner_Unable_to_locate_executable_for__0__1;
	public static String StandardVMRunner_Specified_executable__0__does_not_exist_for__1__4;

	public static String StandardVMType_Not_a_JDK_Root__Java_executable_was_not_found_1;
	public static String StandardVMType_ok_2;
	public static String StandardVMType_Standard_VM_3;
	public static String StandardVMType_Not_a_JDK_root__System_library_was_not_found__1;

	public static String VMDefinitionsContainer_0;

	public static String VMDefinitionsContainer_10;

	public static String VMDefinitionsContainer_2;

	public static String VMDefinitionsContainer_3;

	public static String VMDefinitionsContainer_4;

	public static String VMDefinitionsContainer_5;

	public static String VMDefinitionsContainer_6;

	public static String VMDefinitionsContainer_7;

	public static String VMDefinitionsContainer_9;

	public static String vmInstall_assert_idNotNull;
	public static String vmInstall_assert_typeNotNull;
	public static String vmInstall_could_not_determine_java_Version;

	public static String vmInstallType_duplicateVM;

	public static String vmRunnerConfig_assert_classNotNull;
	public static String vmRunnerConfig_assert_classPathNotNull;
	public static String vmRunnerConfig_assert_programArgsNotNull;
	public static String vmRunnerConfig_assert_vmArgsNotNull;

	public static String RuntimeClasspathEntry_Unable_to_recover_runtime_class_path_entry_type_2;
	public static String RuntimeClasspathEntry_Unable_to_recover_runtime_class_path_entry_location_3;
	public static String RuntimeClasspathEntry_Unable_to_recover_runtime_class_path_entry___missing_project_name_4;
	public static String RuntimeClasspathEntry_Unable_to_recover_runtime_class_path_entry___missing_archive_path_5;
	public static String RuntimeClasspathEntry_Unable_to_recover_runtime_class_path_entry___missing_variable_name_6;
	public static String RuntimeClasspathEntry_Illegal_classpath_entry__0__1;

	public static String JREContainer_JRE_System_Library_1;

	public static String SocketAttachConnector_Port_unspecified_for_remote_connection__2;
	public static String SocketAttachConnector_Hostname_unspecified_for_remote_connection__4;

	public static String JREContainerInitializer_JRE_referenced_by_classpath_container__0__does_not_exist__1;
	public static String JREContainerInitializer_Classpath_entry__0__does_not_refer_to_an_existing_library__2;
	public static String JREContainerInitializer_Classpath_entry__0__does_not_refer_to_a_library__3;
	public static String JREContainerInitializer_Default_System_Library_1;

	public static String ArchiveSourceLocation_Unable_to_initialize_source_location___missing_archive_path__3;
	public static String ArchiveSourceLocation_Exception_occurred_initializing_source_location__5;
	public static String ArchiveSourceLocation_Unable_to_locate_source_element_in_archive__0__1;
	public static String ArchiveSourceLocation_Exception_occurred_while_detecting_root_source_directory_in_archive__0__1;
	public static String ArchiveSourceLocation_Exception_occurred_while_detecting_root_source_directory_in_archive__0__2;

	public static String DirectorySourceLocation_Unable_to_initialize_source_location___missing_directory_path_3;
	public static String DirectorySourceLocation_Unable_to_initialize_source_location___directory_does_not_exist___0__4;
	public static String DirectorySourceLocation_Exception_occurred_initializing_source_location__5;

	public static String JavaProjectSourceLocation_Unable_to_initialize_source_location___missing_project_name_3;
	public static String JavaProjectSourceLocation_Exception_occurred_initializing_source_location__4;

	public static String JavaSourceLocator_Illegal_to_have_a_container_resolved_to_a_container_1;
	public static String JavaSourceLocator_Unable_to_restore_Java_source_locator___invalid_format__6;
	public static String JavaSourceLocator_Unable_to_restore_Java_source_locator___invalid_format__10;
	public static String JavaSourceLocator_Unable_to_restore_source_location___class_not_found___0__11;
	public static String JavaSourceLocator_Unable_to_restore_source_location__12;
	public static String JavaSourceLocator_Unable_to_restore_Java_source_locator___invalid_format__14;
	public static String JavaSourceLocator_Exception_occurred_initializing_source_locator__15;

	public static String Standard11xVMType_Standard_1_1_x_VM_1;

	public static String PackageFragmentRootSourceLocation_Unable_to_initialize_source_location___missing_handle_identifier_for_package_fragment_root__6;
	public static String PackageFragmentRootSourceLocation_Unable_to_initialize_source_location___package_fragment_root_does_not_exist__7;
	public static String PackageFragmentRootSourceLocation_Exception_occurred_initializing_source_location__8;
	public static String JavaAppletLaunchConfigurationDelegate_Could_not_build_HTML_file_for_applet_launch_1;
	public static String AbstractVMRunner_0;
	public static String AbstractJavaLaunchConfigurationDelegate_20;

	public static String PackageFragmentRootSourceContainerTypeDelegate_6;
	public static String PackageFragmentRootSourceContainerTypeDelegate_7;
	public static String PackageFragmentRootSourceContainerTypeDelegate_8;

	public static String ProjectClasspathVariableResolver_1;
	public static String ProjectClasspathVariableResolver_2;
	public static String ProjectClasspathVariableResolver_3;

	public static String VMLogging_1;
	public static String VMLogging_2;
	public static String VMLogging_3;

	static {
		// load message values from bundle file
		NLS.initializeMessages(BUNDLE_NAME, LaunchingMessages.class);
	}

    public static String SocketAttachConnector_0;

	public static String AbstractVMInstall_0;

	public static String AbstractVMInstall_1;

	public static String AbstractVMInstall_3;

	public static String AbstractVMInstall_4;

	public static String MacInstalledJREs_0;

	public static String MacInstalledJREs_1;

	public static String RunnerBootpathError;

	public static String RunnerBootpathPError;

}
