1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Bug 489563 - API change for Language Settings Providers.

Use IBuildConfiguration instead of ICConfigurationDescription.
Add adapters to convert back and forth between these. Create
IBuildConfiguration objects when configuration descriptors are
created.

Clean up formating of the code involved.

Change-Id: Iec5ca132dddbf990f116f96b4680ef5f7318e28b
This commit is contained in:
Doug Schaefer 2016-03-15 15:58:01 -04:00
parent c58c554e3a
commit 5a5de4b1db
49 changed files with 5729 additions and 5199 deletions

View file

@ -25,8 +25,10 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser; import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Adapters;
import org.junit.Test; import org.junit.Test;
/** /**
@ -61,6 +63,8 @@ public class LibtoolGCCBuildCommandParserTest {
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
IFile file1 = ResourceHelper.createFile(project, "file1.cpp"); IFile file1 = ResourceHelper.createFile(project, "file1.cpp");
IFile file2 = ResourceHelper.createFile(project, "file2.cpp"); IFile file2 = ResourceHelper.createFile(project, "file2.cpp");
@ -77,11 +81,11 @@ public class LibtoolGCCBuildCommandParserTest {
parser.processLine("libtool: compile: g++ -I/path0 file2.cpp"); parser.processLine("libtool: compile: g++ -I/path0 file2.cpp");
parser.processLine("libtool: compile: cc -I/path0 file3.cpp"); parser.processLine("libtool: compile: cc -I/path0 file3.cpp");
parser.shutdown(); parser.shutdown();
List<ICLanguageSettingEntry> entries = parser.getSettingEntries(cfgDescription, file1, languageId); List<ICLanguageSettingEntry> entries = parser.getSettingEntries(config, file1, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
entries = parser.getSettingEntries(cfgDescription, file2, languageId); entries = parser.getSettingEntries(config, file2, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
entries = parser.getSettingEntries(cfgDescription, file3, languageId); entries = parser.getSettingEntries(config, file3, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
} }

View file

@ -1,4 +1,3 @@
#Thu Oct 08 20:38:59 EDT 2009
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
@ -85,262 +84,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=110
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=110
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true

View file

@ -0,0 +1,2 @@
eclipse.preferences.version=1
formatter_settings_version=12

View file

@ -47,7 +47,9 @@ import org.eclipse.cdt.internal.core.envvar.UserDefinedEnvironmentSupplier;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector; import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.utils.envvar.StorableEnvironment; import org.eclipse.cdt.utils.envvar.StorableEnvironment;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
@ -83,10 +85,12 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
protected List<String> parseOptions(String line) { protected List<String> parseOptions(String line) {
return null; return null;
} }
@Override @Override
protected AbstractOptionParser[] getOptionParsers() { protected AbstractOptionParser[] getOptionParsers() {
return null; return null;
} }
@Override @Override
protected String getCompilerCommand(String languageId) { protected String getCompilerCommand(String languageId) {
return null; return null;
@ -101,6 +105,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
protected void startupForLanguage(String languageId) throws CoreException { protected void startupForLanguage(String languageId) throws CoreException {
super.startupForLanguage(languageId); super.startupForLanguage(languageId);
} }
@Override @Override
protected void shutdownForLanguage() { protected void shutdownForLanguage() {
super.shutdownForLanguage(); super.shutdownForLanguage();
@ -116,6 +121,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
super.execute(); super.execute();
waitForProviderToFinish(); waitForProviderToFinish();
} }
protected boolean isExecuted() { protected boolean isExecuted() {
return isExecuted; return isExecuted;
} }
@ -128,15 +134,19 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
private int executedCount = 0; private int executedCount = 0;
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException { public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker)
throws CoreException {
executedCount++; executedCount++;
super.startup(cfgDescription, cwdTracker); super.startup(cfgDescription, cwdTracker);
} }
@Override @Override
public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow() throws CloneNotSupportedException { public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow()
throws CloneNotSupportedException {
MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.cloneShallow(); MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.cloneShallow();
return clone; return clone;
} }
@Override @Override
public MockBuiltinSpecsDetectorEnvironmentChangeListener clone() throws CloneNotSupportedException { public MockBuiltinSpecsDetectorEnvironmentChangeListener clone() throws CloneNotSupportedException {
MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.clone(); MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.clone();
@ -158,17 +168,21 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
protected boolean validateEnvironment() { protected boolean validateEnvironment() {
return false; return false;
} }
@Override @Override
protected void execute() { protected void execute() {
super.execute(); super.execute();
sampleEnvVarValue = environmentMap.get(ENV_SAMPLE); sampleEnvVarValue = environmentMap.get(ENV_SAMPLE);
} }
@Override @Override
public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow() throws CloneNotSupportedException { public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow()
throws CloneNotSupportedException {
MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.cloneShallow(); MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.cloneShallow();
clone.sampleEnvVarValue = sampleEnvVarValue; clone.sampleEnvVarValue = sampleEnvVarValue;
return clone; return clone;
} }
@Override @Override
public MockBuiltinSpecsDetectorEnvironmentChangeListener clone() throws CloneNotSupportedException { public MockBuiltinSpecsDetectorEnvironmentChangeListener clone() throws CloneNotSupportedException {
MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.clone(); MockBuiltinSpecsDetectorEnvironmentChangeListener clone = (MockBuiltinSpecsDetectorEnvironmentChangeListener) super.clone();
@ -179,6 +193,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
protected boolean isExecuted() { protected boolean isExecuted() {
return isExecuted; return isExecuted;
} }
public String getSampleEnvVar() { public String getSampleEnvVar() {
return sampleEnvVarValue; return sampleEnvVarValue;
} }
@ -189,28 +204,38 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
*/ */
private class MockConsoleBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector { private class MockConsoleBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector {
@SuppressWarnings("nls") @SuppressWarnings("nls")
private final AbstractOptionParser[] optionParsers = { private final AbstractOptionParser[] optionParsers = { new MacroOptionParser("#define (\\S*) *(\\S*)",
new MacroOptionParser("#define (\\S*) *(\\S*)", "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), };
};
@Override @Override
protected int runProgramForLanguage(String languageId, String command, String[] envp, URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr, IProgressMonitor monitor) throws CoreException, IOException { protected int runProgramForLanguage(String languageId, String command, String[] envp,
URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr,
IProgressMonitor monitor) throws CoreException, IOException {
String line = "#define MACRO VALUE"; String line = "#define MACRO VALUE";
consoleOut.write((line + '\n').getBytes()); consoleOut.write((line + '\n').getBytes());
consoleOut.flush(); consoleOut.flush();
return ICommandLauncher.OK; return ICommandLauncher.OK;
} }
@Override @Override
protected IStatus runForEachLanguage(IProgressMonitor monitor) { protected IStatus runForEachLanguage(IProgressMonitor monitor) {
return super.runForEachLanguage(monitor); return super.runForEachLanguage(monitor);
} }
@Override @Override
protected List<String> parseOptions(final String line) { protected List<String> parseOptions(final String line) {
return new ArrayList<String>() {{ add(line); }}; return new ArrayList<String>() {
{
add(line);
}
};
} }
@Override @Override
protected AbstractOptionParser[] getOptionParsers() { protected AbstractOptionParser[] getOptionParsers() {
return optionParsers; return optionParsers;
} }
@Override @Override
protected String getCompilerCommand(String languageId) { protected String getCompilerCommand(String languageId) {
return null; return null;
@ -280,7 +305,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
Map<String, String> properties = new HashMap<String, String>(); Map<String, String> properties = new HashMap<String, String>();
properties.put(ATTR_PARAMETER, CUSTOM_COMMAND_1); properties.put(ATTR_PARAMETER, CUSTOM_COMMAND_1);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
entries.add(entry); entries.add(entry);
provider.configureProvider(PROVIDER_ID, PROVIDER_NAME, languages, entries, properties); provider.configureProvider(PROVIDER_ID, PROVIDER_NAME, languages, entries, properties);
@ -314,6 +340,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
public MockDetectorCloneable clone() throws CloneNotSupportedException { public MockDetectorCloneable clone() throws CloneNotSupportedException {
return (MockDetectorCloneable) super.clone(); return (MockDetectorCloneable) super.clone();
} }
@Override @Override
public MockDetectorCloneable cloneShallow() throws CloneNotSupportedException { public MockDetectorCloneable cloneShallow() throws CloneNotSupportedException {
return (MockDetectorCloneable) super.cloneShallow(); return (MockDetectorCloneable) super.cloneShallow();
@ -326,7 +353,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
List<String> languages = new ArrayList<String>(); List<String> languages = new ArrayList<String>();
languages.add(LANGUAGE_ID); languages.add(LANGUAGE_ID);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
entries.add(entry); entries.add(entry);
// check clone after initialization // check clone after initialization
@ -367,7 +395,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
{ {
MockDetectorCloneable clone = provider.clone(); MockDetectorCloneable clone = provider.clone();
boolean isConsoleEnabled = clone.isConsoleEnabled(); boolean isConsoleEnabled = clone.isConsoleEnabled();
clone.setConsoleEnabled( ! isConsoleEnabled ); clone.setConsoleEnabled(!isConsoleEnabled);
assertFalse(provider.equals(clone)); assertFalse(provider.equals(clone));
} }
@ -384,7 +412,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
{ {
MockDetectorCloneable clone = provider.clone(); MockDetectorCloneable clone = provider.clone();
List<ICLanguageSettingEntry> entries2 = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries2 = new ArrayList<ICLanguageSettingEntry>();
entries2.add(new CMacroEntry("MACRO2", "VALUE2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY)); entries2.add(
new CMacroEntry("MACRO2", "VALUE2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY));
clone.setSettingEntries(null, null, null, entries2); clone.setSettingEntries(null, null, null, entries2);
assertFalse(provider.equals(clone)); assertFalse(provider.equals(clone));
} }
@ -544,7 +573,11 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
MockConsoleBuiltinSpecsDetector provider = new MockConsoleBuiltinSpecsDetector(); MockConsoleBuiltinSpecsDetector provider = new MockConsoleBuiltinSpecsDetector();
provider.setLanguageScope(new ArrayList<String>() {{add(LANGUAGE_ID);}}); provider.setLanguageScope(new ArrayList<String>() {
{
add(LANGUAGE_ID);
}
});
// Run provider // Run provider
provider.startup(cfgDescription, null); provider.startup(cfgDescription, null);
@ -557,8 +590,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertNull(noentries); assertNull(noentries);
// Check parsed entries // Check parsed entries
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, null, LANGUAGE_ID); IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(config, null, LANGUAGE_ID);
ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
assertEquals(expected, entries.get(0)); assertEquals(expected, entries.get(0));
} }
@ -568,7 +603,11 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
public void testAbstractBuiltinSpecsDetector_RunGlobal() throws Exception { public void testAbstractBuiltinSpecsDetector_RunGlobal() throws Exception {
// Create provider // Create provider
MockConsoleBuiltinSpecsDetector provider = new MockConsoleBuiltinSpecsDetector(); MockConsoleBuiltinSpecsDetector provider = new MockConsoleBuiltinSpecsDetector();
provider.setLanguageScope(new ArrayList<String>() {{add(LANGUAGE_ID);}}); provider.setLanguageScope(new ArrayList<String>() {
{
add(LANGUAGE_ID);
}
});
// Run provider // Run provider
provider.startup(null, null); provider.startup(null, null);
@ -579,7 +618,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Check parsed entries // Check parsed entries
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, LANGUAGE_ID); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, LANGUAGE_ID);
ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
assertEquals(expected, entries.get(0)); assertEquals(expected, entries.get(0));
} }
@ -595,7 +635,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Create provider // Create provider
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = new MockBuiltinSpecsDetectorEnvironmentChangeListener(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = new MockBuiltinSpecsDetectorEnvironmentChangeListener();
// register environment listener on configuration - note that provider is not included in the configuration // register environment listener on configuration - note that provider is not included in the
// configuration
provider.registerListener(cfgDescription); provider.registerListener(cfgDescription);
waitForProviderToFinish(); waitForProviderToFinish();
assertEquals(true, provider.isExecuted()); assertEquals(true, provider.isExecuted());
@ -607,8 +648,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set an environment variable to the configuration // Set an environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CoreModel.getDefault()
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration(); .getProjectDescription(project, true);
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
// create and set sample environment variable in the configuration // create and set sample environment variable in the configuration
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -635,8 +678,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set an environment variable to the configuration // Set an environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CoreModel.getDefault()
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration(); .getProjectDescription(project, true);
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
// create and set sample environment variable in the configuration // create and set sample environment variable in the configuration
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -667,13 +712,16 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Assign a provider to configuration // Assign a provider to configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CoreModel.getDefault()
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration(); .getProjectDescription(project, true);
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
// Create provider // Create provider
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = new MockBuiltinSpecsDetectorEnvironmentChangeListener(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = new MockBuiltinSpecsDetectorEnvironmentChangeListener();
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider); providers.add(provider);
((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(providers); ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable)
.setLanguageSettingProviders(providers);
// Write to project description // Write to project description
CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable); CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
@ -685,8 +733,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set environment variable to the configuration // Set environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CoreModel.getDefault()
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration(); .getProjectDescription(project, true);
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -695,8 +745,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
contribEnv.addVariable(var, cfgDescriptionWritable); contribEnv.addVariable(var, cfgDescriptionWritable);
assertEquals(var, envManager.getVariable(ENV_SAMPLE, cfgDescriptionWritable, true)); assertEquals(var, envManager.getVariable(ENV_SAMPLE, cfgDescriptionWritable, true));
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable)
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0); .getLanguageSettingProviders();
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
// unset "isExecuted" flag // unset "isExecuted" flag
provider.clear(); provider.clear();
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
@ -710,7 +762,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Check if the provider got executed // Check if the provider got executed
{ {
// check if environment variable got there // check if environment variable got there
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project,
false);
ICConfigurationDescription cfgDescription = prjDescription.getActiveConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IEnvironmentVariable var = envManager.getVariable(ENV_SAMPLE, cfgDescription, true); IEnvironmentVariable var = envManager.getVariable(ENV_SAMPLE, cfgDescription, true);
@ -718,8 +771,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertEquals(ENV_SAMPLE_VALUE_1, var.getValue()); assertEquals(ENV_SAMPLE_VALUE_1, var.getValue());
// check if provider got executed with new value // check if provider got executed with new value
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0); .getLanguageSettingProviders();
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
assertEquals(true, provider.isExecuted()); assertEquals(true, provider.isExecuted());
assertEquals(ENV_SAMPLE_VALUE_1, provider.getSampleEnvVar()); assertEquals(ENV_SAMPLE_VALUE_1, provider.getSampleEnvVar());
} }
@ -727,8 +782,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Repeat one more time with different value of environment variable // Repeat one more time with different value of environment variable
// Set another environment variable to the configuration // Set another environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CoreModel.getDefault()
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration(); .getProjectDescription(project, true);
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -737,8 +794,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
contribEnv.addVariable(var, cfgDescriptionWritable); contribEnv.addVariable(var, cfgDescriptionWritable);
assertEquals(var, envManager.getVariable(ENV_SAMPLE, cfgDescriptionWritable, true)); assertEquals(var, envManager.getVariable(ENV_SAMPLE, cfgDescriptionWritable, true));
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable)
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0); .getLanguageSettingProviders();
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
// unset "isExecuted" flag // unset "isExecuted" flag
provider.clear(); provider.clear();
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
@ -752,7 +811,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Check if the provider got executed // Check if the provider got executed
{ {
// check if environment variable got there // check if environment variable got there
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project,
false);
ICConfigurationDescription cfgDescription = prjDescription.getActiveConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IEnvironmentVariable var = envManager.getVariable(ENV_SAMPLE, cfgDescription, true); IEnvironmentVariable var = envManager.getVariable(ENV_SAMPLE, cfgDescription, true);
@ -760,8 +820,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertEquals(ENV_SAMPLE_VALUE_2, var.getValue()); assertEquals(ENV_SAMPLE_VALUE_2, var.getValue());
// check if provider got executed with new value // check if provider got executed with new value
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0); .getLanguageSettingProviders();
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
assertEquals(true, provider.isExecuted()); assertEquals(true, provider.isExecuted());
assertEquals(ENV_SAMPLE_VALUE_2, provider.getSampleEnvVar()); assertEquals(ENV_SAMPLE_VALUE_2, provider.getSampleEnvVar());
} }
@ -843,7 +905,6 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
long lastModifiedUpdated = compiler.lastModified(); long lastModifiedUpdated = compiler.lastModified();
assertTrue(lastModifiedUpdated != lastModified); assertTrue(lastModifiedUpdated != lastModified);
// Check that an event triggers rerun after upgrade // Check that an event triggers rerun after upgrade
provider.handleEvent(null); provider.handleEvent(null);
waitForProviderToFinish(); waitForProviderToFinish();
@ -940,18 +1001,30 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
*/ */
public void testAbstractBuiltinSpecsDetector_GroupSettings() throws Exception { public void testAbstractBuiltinSpecsDetector_GroupSettings() throws Exception {
// define benchmarks // define benchmarks
final CIncludePathEntry includePath_1 = new CIncludePathEntry("/include/path_1", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludePathEntry includePath_1 = new CIncludePathEntry("/include/path_1",
final CIncludePathEntry includePath_2 = new CIncludePathEntry("/include/path_2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CIncludeFileEntry includeFile_1 = new CIncludeFileEntry(new Path("/include.file1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludePathEntry includePath_2 = new CIncludePathEntry("/include/path_2",
final CIncludeFileEntry includeFile_2 = new CIncludeFileEntry(new Path("/include.file2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CMacroEntry macro_1 = new CMacroEntry("MACRO_1", "", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludeFileEntry includeFile_1 = new CIncludeFileEntry(new Path("/include.file1"),
final CMacroEntry macro_2 = new CMacroEntry("MACRO_2", "", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY |ICSettingEntry.UNDEFINED); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CMacroFileEntry macroFile_1 = new CMacroFileEntry(new Path("/macro.file1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludeFileEntry includeFile_2 = new CIncludeFileEntry(new Path("/include.file2"),
final CMacroFileEntry macroFile_2 = new CMacroFileEntry(new Path("/macro.file2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryPathEntry libraryPath_1 = new CLibraryPathEntry(new Path("/lib/path_1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CMacroEntry macro_1 = new CMacroEntry("MACRO_1", "",
final CLibraryPathEntry libraryPath_2 = new CLibraryPathEntry(new Path("/lib/path_2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryFileEntry libraryFile_1 = new CLibraryFileEntry("lib_1.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CMacroEntry macro_2 = new CMacroEntry("MACRO_2", "",
final CLibraryFileEntry libraryFile_2 = new CLibraryFileEntry("lib_2.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); ICSettingEntry.BUILTIN | ICSettingEntry.READONLY | ICSettingEntry.UNDEFINED);
final CMacroFileEntry macroFile_1 = new CMacroFileEntry(new Path("/macro.file1"),
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CMacroFileEntry macroFile_2 = new CMacroFileEntry(new Path("/macro.file2"),
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryPathEntry libraryPath_1 = new CLibraryPathEntry(new Path("/lib/path_1"),
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryPathEntry libraryPath_2 = new CLibraryPathEntry(new Path("/lib/path_2"),
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryFileEntry libraryFile_1 = new CLibraryFileEntry("lib_1.a",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CLibraryFileEntry libraryFile_2 = new CLibraryFileEntry("lib_2.a",
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
// Define mock detector adding unorganized entries // Define mock detector adding unorganized entries
MockBuiltinSpecsDetector provider = new MockBuiltinSpecsDetector() { MockBuiltinSpecsDetector provider = new MockBuiltinSpecsDetector() {

View file

@ -25,6 +25,7 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider; import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider;
import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper; import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
@ -55,9 +56,11 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
* Test that null arguments don't crash the provider. * Test that null arguments don't crash the provider.
*/ */
public void testNulls() throws Exception { public void testNulls() throws Exception {
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager
.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER_ID);
assertNotNull(provider); assertNotNull(provider);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null,
null);
assertEquals(null, entries); assertEquals(null, entries);
} }
@ -76,7 +79,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
{ {
ILanguageSettingsProvider provider = providers.get(0); ILanguageSettingsProvider provider = providers.get(0);
String id = provider.getId(); String id = provider.getId();
@ -110,8 +114,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
} }
/** /**
* Test that no unnecessary storage file is created for language settings for default set * Test that no unnecessary storage file is created for language settings for default set of language
* of language settings providers. * settings providers.
*/ */
public void testProjectPersistence_Defaults() throws Exception { public void testProjectPersistence_Defaults() throws Exception {
// create a new project // create a new project
@ -125,8 +129,10 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds(); String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription)
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); .getDefaultLanguageSettingsProvidersIds();
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
assertEquals(defaultIds.length, providers.size()); assertEquals(defaultIds.length, providers.size());
for (int i = 0; i < defaultIds.length; i++) { for (int i = 0; i < defaultIds.length; i++) {
assertEquals(providers.get(i).getId(), defaultIds[i]); assertEquals(providers.get(i).getId(), defaultIds[i]);
@ -140,7 +146,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertEquals(false, xmlStorageFile.getParent().exists()); // .settings folder assertEquals(false, xmlStorageFile.getParent().exists()); // .settings folder
// no settings file in workspace area // no settings file in workspace area
String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests.getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML); String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests
.getStoreLocationInWorkspaceArea(project.getName() + '.' + LANGUAGE_SETTINGS_WORKSPACE_XML);
java.io.File xmlStorageFilePrjWsp = new java.io.File(xmlPrjWspStorageFileLocation); java.io.File xmlStorageFilePrjWsp = new java.io.File(xmlPrjWspStorageFileLocation);
assertEquals(false, xmlStorageFilePrjWsp.exists()); assertEquals(false, xmlStorageFilePrjWsp.exists());
} }
@ -160,8 +167,10 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>()); ((ILanguageSettingsProvidersKeeper) cfgDescription)
assertTrue(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders().size() == 0); .setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>());
assertTrue(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()
.size() == 0);
} }
CoreModel.getDefault().setProjectDescription(project, prjDescription); CoreModel.getDefault().setProjectDescription(project, prjDescription);
@ -171,7 +180,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertEquals(true, xmlStorageFile.exists()); assertEquals(true, xmlStorageFile.exists());
// no settings file in workspace area // no settings file in workspace area
String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests.getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML); String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests
.getStoreLocationInWorkspaceArea(project.getName() + '.' + LANGUAGE_SETTINGS_WORKSPACE_XML);
java.io.File xmlStorageFilePrjWsp = new java.io.File(xmlPrjWspStorageFileLocation); java.io.File xmlStorageFilePrjWsp = new java.io.File(xmlPrjWspStorageFileLocation);
assertEquals(false, xmlStorageFilePrjWsp.exists()); assertEquals(false, xmlStorageFilePrjWsp.exists());

View file

@ -1,4 +1,3 @@
#Thu Apr 29 13:15:20 EDT 2010
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
@ -81,262 +80,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=110
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=110
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true

View file

@ -0,0 +1,2 @@
eclipse.preferences.version=1
formatter_settings_version=12

View file

@ -31,6 +31,7 @@ import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
@ -41,10 +42,17 @@ import org.eclipse.core.variables.VariablesPlugin;
/** /**
* Implementation of language settings provider for CDT Managed Build System. * Implementation of language settings provider for CDT Managed Build System.
*/ */
public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsBroadcastingProvider { public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
implements ILanguageSettingsBroadcastingProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (cfgDescription == null || rc == null) { String languageId) {
if (config == null || rc == null) {
return null;
}
ICConfigurationDescription cfgDescription = config.getAdapter(ICConfigurationDescription.class);
if (cfgDescription == null) {
return null; return null;
} }
@ -56,7 +64,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
if (ls != null) { if (ls != null) {
languageSettings = new ICLanguageSetting[] { ls }; languageSettings = new ICLanguageSetting[] { ls };
} else { } else {
return getSettingEntries(cfgDescription, rc.getParent(), languageId); return getSettingEntries(config, rc.getParent(), languageId);
} }
} else { } else {
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(projectPath, false); ICResourceDescription rcDescription = cfgDescription.getResourceDescription(projectPath, false);
@ -72,9 +80,10 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
String id = langSetting.getLanguageId(); String id = langSetting.getLanguageId();
if (id == languageId || (id != null && id.equals(languageId))) { if (id == languageId || (id != null && id.equals(languageId))) {
int kindsBits = langSetting.getSupportedEntryKinds(); int kindsBits = langSetting.getSupportedEntryKinds();
for (int kind=1; kind <= kindsBits; kind <<= 1) { for (int kind = 1; kind <= kindsBits; kind <<= 1) {
if ((kindsBits & kind) != 0) { if ((kindsBits & kind) != 0) {
List<ICLanguageSettingEntry> additions = langSetting.getSettingEntriesList(kind); List<ICLanguageSettingEntry> additions = langSetting
.getSettingEntriesList(kind);
for (ICLanguageSettingEntry entry : additions) { for (ICLanguageSettingEntry entry : additions) {
if (entry instanceof ICPathEntry) { if (entry instanceof ICPathEntry) {
// have to use getName() rather than getLocation() and not use IPath operations to avoid collapsing ".." // have to use getName() rather than getLocation() and not use IPath operations to avoid collapsing ".."
@ -83,17 +92,26 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
// We need to add project-rooted entry for relative path as MBS counts it this way in some UI // We need to add project-rooted entry for relative path as MBS counts it this way in some UI
// The relative entry below also should be added for indexer to resolve from source file locations // The relative entry below also should be added for indexer to resolve from source file locations
ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager(); ICdtVariableManager varManager = CCorePlugin.getDefault()
.getCdtVariableManager();
try { try {
// Substitute build/environment variables // Substitute build/environment variables
String location = varManager.resolveValue(pathStr, "", null, cfgDescription); //$NON-NLS-1$ String location = varManager.resolveValue(pathStr, "", null, //$NON-NLS-1$
cfgDescription);
if (!new Path(location).isAbsolute()) { if (!new Path(location).isAbsolute()) {
IStringVariableManager mngr = VariablesPlugin.getDefault().getStringVariableManager(); IStringVariableManager mngr = VariablesPlugin.getDefault()
String projectRootedPath = mngr.generateVariableExpression("workspace_loc", rc.getProject().getName()) + Path.SEPARATOR + pathStr; //$NON-NLS-1$ .getStringVariableManager();
String projectRootedPath = mngr
.generateVariableExpression("workspace_loc", //$NON-NLS-1$
rc.getProject().getName())
+ Path.SEPARATOR + pathStr;
// clear "RESOLVED" flag // clear "RESOLVED" flag
int flags = entry.getFlags() & ~(ICSettingEntry.RESOLVED | ICSettingEntry.VALUE_WORKSPACE_PATH); int flags = entry.getFlags() & ~(ICSettingEntry.RESOLVED
ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil.createEntry(kind, projectRootedPath, projectRootedPath, null, flags); | ICSettingEntry.VALUE_WORKSPACE_PATH);
if (! list.contains(projectRootedEntry)) { ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil
.createEntry(kind, projectRootedPath,
projectRootedPath, null, flags);
if (!list.contains(projectRootedEntry)) {
list.add(projectRootedEntry); list.add(projectRootedEntry);
} }
} }
@ -101,10 +119,10 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
// Swallow exceptions but also log them // Swallow exceptions but also log them
ManagedBuilderCorePlugin.log(e); ManagedBuilderCorePlugin.log(e);
} }
} }
} }
if (! list.contains(entry)) { if (!list.contains(entry)) {
list.add(entry); list.add(entry);
} }
} }
@ -126,11 +144,11 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
case ICSettingBase.SETTING_PROJECT: case ICSettingBase.SETTING_PROJECT:
case ICSettingBase.SETTING_CONFIGURATION: case ICSettingBase.SETTING_CONFIGURATION:
case ICSettingBase.SETTING_FOLDER: case ICSettingBase.SETTING_FOLDER:
ICFolderDescription foDes = (ICFolderDescription)rcDescription; ICFolderDescription foDes = (ICFolderDescription) rcDescription;
array = foDes.getLanguageSettings(); array = foDes.getLanguageSettings();
break; break;
case ICSettingBase.SETTING_FILE: case ICSettingBase.SETTING_FILE:
ICFileDescription fiDes = (ICFileDescription)rcDescription; ICFileDescription fiDes = (ICFileDescription) rcDescription;
ICLanguageSetting ls = fiDes.getLanguageSetting(); ICLanguageSetting ls = fiDes.getLanguageSetting();
if (ls != null) { if (ls != null) {
array = new ICLanguageSetting[] { ls }; array = new ICLanguageSetting[] { ls };
@ -149,10 +167,12 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
public boolean isEmpty() { public boolean isEmpty() {
return false; return false;
} }
@Override @Override
public LanguageSettingsStorage clone() throws CloneNotSupportedException { public LanguageSettingsStorage clone() throws CloneNotSupportedException {
return this; return this;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
// Note that this always triggers change event even if nothing changed in MBS // Note that this always triggers change event even if nothing changed in MBS

View file

@ -23,17 +23,21 @@ import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Adapters;
/** /**
* Abstract class for providers parsing compiler option from build command when present in build output. * Abstract class for providers parsing compiler option from build command when present in build
* output.
* <p> * <p>
* <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as * <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as it is not currently (CDT
* it is not currently (CDT 8.1, Juno) clear how it may need to be used in future. * 8.1, Juno) clear how it may need to be used in future. There is no guarantee that this API will
* There is no guarantee that this API will work or that it will remain the same. * work or that it will remain the same. Please do not use this API without consulting with the CDT
* Please do not use this API without consulting with the CDT team. * team.
* </p> * </p>
*
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* *
* @since 8.1 * @since 8.1
@ -47,12 +51,11 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
private static final String VALUE_FOLDER_SCOPE = "per-folder"; //$NON-NLS-1$ private static final String VALUE_FOLDER_SCOPE = "per-folder"; //$NON-NLS-1$
private static final String VALUE_PROJECT_SCOPE = "per-project"; //$NON-NLS-1$ private static final String VALUE_PROJECT_SCOPE = "per-project"; //$NON-NLS-1$
private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$ private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$
/** /**
* "foo" * "foo" Using look-ahead and look-behind to resolve ambiguity with "\"
* Using look-ahead and look-behind to resolve ambiguity with "\" {@link #QUOTE_BSLASH_QUOTE} * {@link #QUOTE_BSLASH_QUOTE}
*/ */
private static final String QUOTE = "(\"(?!\\\\).*?(?<!\\\\)\")"; //$NON-NLS-1$ private static final String QUOTE = "(\"(?!\\\\).*?(?<!\\\\)\")"; //$NON-NLS-1$
/** \"foo\" */ /** \"foo\" */
@ -62,7 +65,8 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
/** "\"foo\"" */ /** "\"foo\"" */
private static final String QUOTE_BSLASH_QUOTE = "(\"\\\\\".*?\\\\\"\")"; //$NON-NLS-1$ private static final String QUOTE_BSLASH_QUOTE = "(\"\\\\\".*?\\\\\"\")"; //$NON-NLS-1$
private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"'\\\\]*(\\s*(" + QUOTE +"|" + QUOTE_BSLASH_QUOTE + "|" + BSLASH_QUOTE + "|" + SINGLE_QUOTE + "|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$< private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"'\\\\]*(\\s*(" + QUOTE + "|" //$NON-NLS-1$ //$NON-NLS-2$
+ QUOTE_BSLASH_QUOTE + "|" + BSLASH_QUOTE + "|" + SINGLE_QUOTE + "|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final int OPTION_GROUP = 0; private static final int OPTION_GROUP = 0;
public enum ResourceScope { public enum ResourceScope {
@ -76,22 +80,22 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
*/ */
@SuppressWarnings("nls") @SuppressWarnings("nls")
private static final String[] COMPILER_COMMAND_PATTERN_TEMPLATES = { private static final String[] COMPILER_COMMAND_PATTERN_TEMPLATES = {
"${COMPILER_PATTERN}.*\\s" + "()([^'\"\\s]*\\.${EXTENSIONS_PATTERN})(\\s.*)?[\r\n]*", // compiling unquoted file "${COMPILER_PATTERN}.*\\s" + "()([^'\"\\s]*\\.${EXTENSIONS_PATTERN})(\\s.*)?[\r\n]*", // compiling unquoted file
"${COMPILER_PATTERN}.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file "${COMPILER_PATTERN}.*\\s"
+ "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file
}; };
private static final int FILE_GROUP = 2; private static final int FILE_GROUP = 2;
// cached value from properties, do not need to use in equals() and hashCode() // cached value from properties, do not need to use in equals() and hashCode()
private ResourceScope resourceScope = null; private ResourceScope resourceScope = null;
// Used to handle line continuations in the build output. // Used to handle line continuations in the build output.
private String partialLine; private String partialLine;
/** /**
* The compiler command pattern without specifying compiler options. * The compiler command pattern without specifying compiler options. The options are intended to
* The options are intended to be handled with option parsers, * be handled with option parsers, see {@link #getOptionParsers()}. This is regular expression
* see {@link #getOptionParsers()}. * pattern.
* This is regular expression pattern.
* *
* @return the compiler command pattern. * @return the compiler command pattern.
*/ */
@ -101,8 +105,9 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
/** /**
* Set compiler command pattern for the provider. See {@link #getCompilerPattern()}. * Set compiler command pattern for the provider. See {@link #getCompilerPattern()}.
* @param commandPattern - value of the command pattern to set. *
* This is regular expression pattern. * @param commandPattern
* - value of the command pattern to set. This is regular expression pattern.
*/ */
public void setCompilerPattern(String commandPattern) { public void setCompilerPattern(String commandPattern) {
setProperty(ATTR_PARAMETER, commandPattern); setProperty(ATTR_PARAMETER, commandPattern);
@ -114,15 +119,19 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
@SuppressWarnings("nls") @SuppressWarnings("nls")
private String getCompilerPatternExtended() { private String getCompilerPatternExtended() {
String compilerPattern = getCompilerPattern(); String compilerPattern = getCompilerPattern();
return "\\s*\"?("+LEADING_PATH_PATTERN+")?(" + compilerPattern + ")\"?"; return "\\s*\"?(" + LEADING_PATH_PATTERN + ")?(" + compilerPattern + ")\"?";
} }
/** /**
* @return resource scope of the entries, i.e. level in resource hierarchy where language settings entries * @return resource scope of the entries, i.e. level in resource hierarchy where language
* will be applied by the provider. Resource scope can be one of the following: * settings entries will be applied by the provider. Resource scope can be one of the
* <br>- {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file being parsed. * following: <br>
* <br>- {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the enclosing folder. * - {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file
* <br>- {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the project level. * being parsed. <br>
* - {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the
* enclosing folder. <br>
* - {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the
* project level.
*/ */
public ResourceScope getResourceScope() { public ResourceScope getResourceScope() {
if (resourceScope == null) { if (resourceScope == null) {
@ -141,13 +150,17 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
/** /**
* Set resource scope of the entries, i.e. level in resource hierarchy where language settings entries * Set resource scope of the entries, i.e. level in resource hierarchy where language settings
* will be applied by the provider. * entries will be applied by the provider.
* *
* @param rcScope - resource scope can be one of the following: * @param rcScope
* <br>- {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file being parsed. * - resource scope can be one of the following: <br>
* <br>- {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the enclosing folder. * - {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the
* <br>- {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the project level. * file being parsed. <br>
* - {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the
* enclosing folder. <br>
* - {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the
* project level.
*/ */
public void setResourceScope(ResourceScope rcScope) { public void setResourceScope(ResourceScope rcScope) {
resourceScope = rcScope; resourceScope = rcScope;
@ -187,11 +200,13 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
setSettingEntries(currentCfgDescription, rc, currentLanguageId, entries); IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription, IBuildConfiguration.class);
setSettingEntries(currentConfig, rc, currentLanguageId, entries);
} }
/** /**
* Adjust count for file group taking into consideration extra groups added by {@link #getCompilerPatternExtended()}. * Adjust count for file group taking into consideration extra groups added by
* {@link #getCompilerPatternExtended()}.
*/ */
private int adjustFileGroup() { private int adjustFileGroup() {
return countGroups(getCompilerPatternExtended()) + FILE_GROUP; return countGroups(getCompilerPatternExtended()) + FILE_GROUP;
@ -202,10 +217,9 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
*/ */
private String makePattern(String template) { private String makePattern(String template) {
@SuppressWarnings("nls") @SuppressWarnings("nls")
String pattern = template String pattern = template.replace("${COMPILER_PATTERN}", getCompilerPatternExtended())
.replace("${COMPILER_PATTERN}", getCompilerPatternExtended()) .replace("${EXTENSIONS_PATTERN}", getPatternFileExtensions()).replace("${COMPILER_GROUPS+1}",
.replace("${EXTENSIONS_PATTERN}", getPatternFileExtensions()) new Integer(countGroups(getCompilerPatternExtended()) + 1).toString());
.replace("${COMPILER_GROUPS+1}", new Integer(countGroups(getCompilerPatternExtended()) + 1).toString());
return pattern; return pattern;
} }
@ -237,7 +251,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
Matcher optionMatcher = OPTIONS_PATTERN.matcher(line); Matcher optionMatcher = OPTIONS_PATTERN.matcher(line);
while (optionMatcher.find()) { while (optionMatcher.find()) {
String option = optionMatcher.group(OPTION_GROUP); String option = optionMatcher.group(OPTION_GROUP);
if (option!=null) { if (option != null) {
options.add(option); options.add(option);
} }
} }
@ -263,29 +277,29 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
processLine(partialLine); processLine(partialLine);
partialLine = null; partialLine = null;
} }
serializeLanguageSettingsInBackground(); serializeLanguageSettingsInBackground();
super.shutdown(); super.shutdown();
} }
@Override @Override
public boolean processLine(String line) { public boolean processLine(String line) {
line = handleLineContinuation(line); line = handleLineContinuation(line);
return super.processLine(line); return super.processLine(line);
} }
/** /**
* Handle line continuations ('\' at the end of a line, indicating that the next line is a * Handle line continuations ('\' at the end of a line, indicating that the next line is a
* continuation of this one). * continuation of this one).
*/ */
private String handleLineContinuation(String line) { private String handleLineContinuation(String line) {
if (line == null) if (line == null)
return null; return null;
// If the character preceding the '\' is also '\', it's not a line continuation - // If the character preceding the '\' is also '\', it's not a line continuation -
// the first '\' escapes the second. // the first '\' escapes the second.
if (line.length() > 0 && line.charAt(line.length() - 1) == '\\' && if (line.length() > 0 && line.charAt(line.length() - 1) == '\\'
(line.length() == 1 || line.charAt(line.length() - 2) != '\\')) { && (line.length() == 1 || line.charAt(line.length() - 2) != '\\')) {
// Line ends in line continuation - save it for later. // Line ends in line continuation - save it for later.
String fragment = line.substring(0, line.length() - 1); String fragment = line.substring(0, line.length() - 1);
if (partialLine == null) { if (partialLine == null) {
@ -293,7 +307,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} else { } else {
partialLine += fragment; partialLine += fragment;
} }
return null; // line will not be processed now return null; // line will not be processed now
} else if (partialLine != null) { } else if (partialLine != null) {
// Line doesn't end in continuation but previous lines did - use their contents. // Line doesn't end in continuation but previous lines did - use their contents.
line = partialLine + line; line = partialLine + line;
@ -303,14 +317,18 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
/** /**
* Trivial Error Parser which allows highlighting of output lines matching the patterns * Trivial Error Parser which allows highlighting of output lines matching the patterns of this
* of this parser. Intended for better troubleshooting experience. * parser. Intended for better troubleshooting experience. Implementers are supposed to add the
* Implementers are supposed to add the error parser via extension point {@code org.eclipse.cdt.core.ErrorParser}. * error parser via extension point {@code org.eclipse.cdt.core.ErrorParser}.
*/ */
protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser implements IErrorParser2 { protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser
implements IErrorParser2 {
/** /**
* Constructor. * Constructor.
* @param parserId - build command parser ID specified in the extension {@code org.eclipse.cdt.core.LanguageSettingsProvider}. *
* @param parserId
* - build command parser ID specified in the extension
* {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
*/ */
public AbstractBuildCommandPatternHighlighter(String parserId) { public AbstractBuildCommandPatternHighlighter(String parserId) {
init(parserId); init(parserId);
@ -318,16 +336,20 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
/** /**
* Initialize the error parser. * Initialize the error parser.
* @param parserId - language settings provider (the build command parser) ID. *
* @param parserId
* - language settings provider (the build command parser) ID.
*/ */
protected void init(String parserId) { protected void init(String parserId) {
AbstractBuildCommandParser buildCommandParser = (AbstractBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(parserId, false); AbstractBuildCommandParser buildCommandParser = (AbstractBuildCommandParser) LanguageSettingsManager
.getExtensionProviderCopy(parserId, false);
if (buildCommandParser != null) { if (buildCommandParser != null) {
for (String template : COMPILER_COMMAND_PATTERN_TEMPLATES) { for (String template : COMPILER_COMMAND_PATTERN_TEMPLATES) {
String pattern = buildCommandParser.makePattern(template); String pattern = buildCommandParser.makePattern(template);
String fileExpr = "$"+buildCommandParser.adjustFileGroup(); //$NON-NLS-1$ String fileExpr = "$" + buildCommandParser.adjustFileGroup(); //$NON-NLS-1$
String descExpr = "$0"; //$NON-NLS-1$ String descExpr = "$0"; //$NON-NLS-1$
addPattern(new RegexErrorPattern(pattern, fileExpr, null, descExpr, null, IMarkerGenerator.SEVERITY_WARNING, true)); addPattern(new RegexErrorPattern(pattern, fileExpr, null, descExpr, null,
IMarkerGenerator.SEVERITY_WARNING, true));
} }
} }
} }
@ -338,5 +360,4 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
} }
} }

View file

@ -55,11 +55,13 @@ import org.eclipse.cdt.utils.CommandLineUtil;
import org.eclipse.cdt.utils.PathUtil; import org.eclipse.cdt.utils.PathUtil;
import org.eclipse.cdt.utils.envvar.IEnvironmentChangeEvent; import org.eclipse.cdt.utils.envvar.IEnvironmentChangeEvent;
import org.eclipse.cdt.utils.envvar.IEnvironmentChangeListener; import org.eclipse.cdt.utils.envvar.IEnvironmentChangeListener;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
@ -77,14 +79,14 @@ import org.eclipse.core.runtime.jobs.Job;
import org.w3c.dom.Element; import org.w3c.dom.Element;
/** /**
* Abstract parser capable to execute compiler command printing built-in compiler * Abstract parser capable to execute compiler command printing built-in compiler specs and parse built-in
* specs and parse built-in language settings out of it. * language settings out of it.
* <p> * <p>
* <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as * <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as it is not currently (CDT 8.1,
* it is not currently (CDT 8.1, Juno) clear how it may need to be used in future. * Juno) clear how it may need to be used in future. There is no guarantee that this API will work or that it
* There is no guarantee that this API will work or that it will remain the same. * will remain the same. Please do not use this API without consulting with the CDT team.
* Please do not use this API without consulting with the CDT team.
* </p> * </p>
*
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* *
* @since 8.1 * @since 8.1
@ -159,12 +161,15 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
final String providerName = getName(); final String providerName = getName();
final String providerId = getId(); final String providerId = getId();
// Add markers in a job to avoid deadlocks // Add markers in a job to avoid deadlocks
Job markerJob = new Job(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.AddScannerDiscoveryMarkers")) { //$NON-NLS-1$ Job markerJob = new Job(ManagedMakeMessages
.getResourceString("AbstractBuiltinSpecsDetector.AddScannerDiscoveryMarkers")) { //$NON-NLS-1$
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
// Avoid duplicates as different languages can generate identical errors // Avoid duplicates as different languages can generate identical errors
try { try {
IMarker[] markers = problemMarkerInfo.file.findMarkers(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); IMarker[] markers = problemMarkerInfo.file.findMarkers(
SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER, false,
IResource.DEPTH_ZERO);
for (IMarker marker : markers) { for (IMarker marker : markers) {
int sev = ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue(); int sev = ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue();
if (sev == problemMarkerInfo.severity) { if (sev == problemMarkerInfo.severity) {
@ -175,24 +180,31 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
} }
} catch (CoreException e) { } catch (CoreException e) {
return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error checking markers.", e); //$NON-NLS-1$ return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
"Error checking markers.", e); //$NON-NLS-1$
} }
try { try {
IMarker marker = problemMarkerInfo.file.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER); IMarker marker = problemMarkerInfo.file
.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER);
marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description); marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description);
marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity); marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity);
marker.setAttribute(SDMarkerGenerator.ATTR_PROVIDER, providerId); marker.setAttribute(SDMarkerGenerator.ATTR_PROVIDER, providerId);
if (problemMarkerInfo.file instanceof IWorkspaceRoot) { if (problemMarkerInfo.file instanceof IWorkspaceRoot) {
String msgPreferences = ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationPreferences", providerName); //$NON-NLS-1$ String msgPreferences = ManagedMakeMessages.getFormattedString(
"AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationPreferences", //$NON-NLS-1$
providerName);
marker.setAttribute(IMarker.LOCATION, msgPreferences); marker.setAttribute(IMarker.LOCATION, msgPreferences);
} else { } else {
String msgProperties = ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationProperties", providerName); //$NON-NLS-1$ String msgProperties = ManagedMakeMessages.getFormattedString(
"AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationProperties", //$NON-NLS-1$
providerName);
marker.setAttribute(IMarker.LOCATION, msgProperties); marker.setAttribute(IMarker.LOCATION, msgProperties);
} }
} catch (CoreException e) { } catch (CoreException e) {
return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error adding markers.", e); //$NON-NLS-1$ return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
"Error adding markers.", e); //$NON-NLS-1$
} }
return Status.OK_STATUS; return Status.OK_STATUS;
@ -206,19 +218,22 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Delete markers previously set by this provider for the resource. * Delete markers previously set by this provider for the resource.
* *
* @param rc - resource to check markers. * @param rc
* - resource to check markers.
*/ */
public void deleteMarkers(IResource rc) { public void deleteMarkers(IResource rc) {
String providerId = getId(); String providerId = getId();
try { try {
IMarker[] markers = rc.findMarkers(SCANNER_DISCOVERY_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); IMarker[] markers = rc.findMarkers(SCANNER_DISCOVERY_PROBLEM_MARKER, false,
IResource.DEPTH_ZERO);
for (IMarker marker : markers) { for (IMarker marker : markers) {
if (providerId.equals(marker.getAttribute(ATTR_PROVIDER))) { if (providerId.equals(marker.getAttribute(ATTR_PROVIDER))) {
marker.delete(); marker.delete();
} }
} }
} catch (CoreException e) { } catch (CoreException e) {
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error deleting markers.", e)); //$NON-NLS-1$ ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
"Error deleting markers.", e)); //$NON-NLS-1$
} }
} }
@ -229,13 +244,16 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
*/ */
private class ConsoleParserAdapter implements ICBuildOutputParser { private class ConsoleParserAdapter implements ICBuildOutputParser {
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException { public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker)
throws CoreException {
AbstractBuiltinSpecsDetector.this.cwdTracker = cwdTracker; AbstractBuiltinSpecsDetector.this.cwdTracker = cwdTracker;
} }
@Override @Override
public boolean processLine(String line) { public boolean processLine(String line) {
return AbstractBuiltinSpecsDetector.this.processLine(line); return AbstractBuiltinSpecsDetector.this.processLine(line);
} }
@Override @Override
public void shutdown() { public void shutdown() {
AbstractBuiltinSpecsDetector.this.cwdTracker = null; AbstractBuiltinSpecsDetector.this.cwdTracker = null;
@ -243,11 +261,12 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Compiler command without arguments. This value is used to replace macro ${COMMAND}. * Compiler command without arguments. This value is used to replace macro ${COMMAND}. In particular, this
* In particular, this method is implemented in {@link ToolchainBuiltinSpecsDetector} * method is implemented in {@link ToolchainBuiltinSpecsDetector} which retrieves the command from
* which retrieves the command from tool-chain. * tool-chain.
* *
* @param languageId - language ID. * @param languageId
* - language ID.
* @return compiler command without arguments, i.e. compiler program. * @return compiler command without arguments, i.e. compiler program.
*/ */
protected abstract String getCompilerCommand(String languageId); protected abstract String getCompilerCommand(String languageId);
@ -255,13 +274,12 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* The command to run. Some macros could be specified in there: * The command to run. Some macros could be specified in there:
* <ul> * <ul>
* <b>${COMMAND}</b> - compiler command without arguments (compiler program). * <b>${COMMAND}</b> - compiler command without arguments (compiler program). Normally would come from the
* Normally would come from the tool-chain.<br> * tool-chain.<br>
* <b>${INPUTS}</b> - path to spec file which will be placed in workspace area.<br> * <b>${INPUTS}</b> - path to spec file which will be placed in workspace area.<br>
* <b>${EXT}</b> - file extension calculated from language ID. * <b>${EXT}</b> - file extension calculated from language ID.
* </ul> * </ul>
* The parameter could be taken from the extension * The parameter could be taken from the extension in {@code plugin.xml} or from property file.
* in {@code plugin.xml} or from property file.
* *
* @return the command to run or empty string if command is not defined. * @return the command to run or empty string if command is not defined.
*/ */
@ -271,7 +289,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Set custom command for the provider. See {@link #getCommand()}. * Set custom command for the provider. See {@link #getCommand()}.
* @param command - value of custom command to set. *
* @param command
* - value of custom command to set.
*/ */
public void setCommand(String command) { public void setCommand(String command) {
setProperty(ATTR_PARAMETER, command); setProperty(ATTR_PARAMETER, command);
@ -287,19 +307,22 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Enable or disable console output for this provider. * Enable or disable console output for this provider.
* *
* @param enable - {@code true} to enable console output or {@code false} to disable. * @param enable
* - {@code true} to enable console output or {@code false} to disable.
*/ */
public void setConsoleEnabled(boolean enable) { public void setConsoleEnabled(boolean enable) {
isConsoleEnabled = enable; isConsoleEnabled = enable;
} }
/** /**
* Expand macros specified in the compiler command. See {@link #getCommand()} for * Expand macros specified in the compiler command. See {@link #getCommand()} for the recognized list of
* the recognized list of macros. * macros.
* *
* @param languageId - language ID. * @param languageId
* - language ID.
* @return - resolved command to run. * @return - resolved command to run.
* @throws CoreException if something goes wrong. * @throws CoreException
* if something goes wrong.
*/ */
protected String resolveCommand(String languageId) throws CoreException { protected String resolveCommand(String languageId) throws CoreException {
String cmd = getCommand(); String cmd = getCommand();
@ -388,7 +411,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException { public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker)
throws CoreException {
super.startup(cfgDescription, cwdTracker); super.startup(cfgDescription, cwdTracker);
mappedRootURI = null; mappedRootURI = null;
@ -414,14 +438,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
List<String> languageIds = getLanguageScope(); List<String> languageIds = getLanguageScope();
if (languageIds == null) { if (languageIds == null) {
languageIds = new ArrayList<String>(1); languageIds = new ArrayList<String>(1);
// "null" language indicates that the provider provides for any language // "null" language indicates that the provider provides for any language
languageIds.add(null); languageIds.add(null);
} }
for (String languageId : languageIds) { for (String languageId : languageIds) {
try { try {
String command = resolveCommand(languageId); String command = resolveCommand(languageId);
if (command != null) { if (command != null) {
envHashNew = 31*envHashNew + command.hashCode(); envHashNew = 31 * envHashNew + command.hashCode();
} }
String[] cmdArray = CommandLineUtil.argumentsToArray(command); String[] cmdArray = CommandLineUtil.argumentsToArray(command);
@ -433,14 +457,15 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (location != null) { if (location != null) {
java.io.File file = new java.io.File(location.toString()); java.io.File file = new java.io.File(location.toString());
try { try {
// handles symbolic links as java.io.File.getCanonicalPath() resolves symlinks on UNIX // handles symbolic links as java.io.File.getCanonicalPath() resolves symlinks on
// UNIX
file = file.getCanonicalFile(); file = file.getCanonicalFile();
} catch (IOException e) { } catch (IOException e) {
ManagedBuilderCorePlugin.log(e); ManagedBuilderCorePlugin.log(e);
} }
long lastModified = file.lastModified(); long lastModified = file.lastModified();
envHashNew = 31*envHashNew + location.hashCode(); envHashNew = 31 * envHashNew + location.hashCode();
envHashNew = 31*envHashNew + lastModified; envHashNew = 31 * envHashNew + lastModified;
} }
} }
} catch (CoreException e) { } catch (CoreException e) {
@ -451,12 +476,10 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* This method does 2 related things: * This method does 2 related things: <br>
* <br> * 1. Validate environment, i.e. check that environment for running the command has not changed. If
* 1. Validate environment, i.e. check that environment for running the command has not changed. * environment changed {@link #execute()} will rerun the command even if flag {@link #isExecuted} suggests
* If environment changed {@link #execute()} will rerun the command even if flag {@link #isExecuted} * that it was run already. <br>
* suggests that it was run already.
* <br>
* 2. The relevant environment is cached here so the new one is validated against it at the next call. * 2. The relevant environment is cached here so the new one is validated against it at the next call.
* {@link #validateEnvironment()} will be called right before running the job to execute the command. * {@link #validateEnvironment()} will be called right before running the job to execute the command.
* *
@ -473,8 +496,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Execute provider's command which is expected to print built-in compiler options (specs) to build output. * Execute provider's command which is expected to print built-in compiler options (specs) to build
* The parser will parse output and generate language settings for corresponding resources. * output. The parser will parse output and generate language settings for corresponding resources.
*/ */
protected void execute() { protected void execute() {
environmentMap = createEnvironmentMap(currentCfgDescription); environmentMap = createEnvironmentMap(currentCfgDescription);
@ -482,7 +505,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
return; return;
} }
WorkspaceJob job = new WorkspaceJob(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.DiscoverBuiltInSettingsJobName")) { //$NON-NLS-1$ WorkspaceJob job = new WorkspaceJob(ManagedMakeMessages
.getResourceString("AbstractBuiltinSpecsDetector.DiscoverBuiltInSettingsJobName")) { //$NON-NLS-1$
@Override @Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
isExecuted = false; isExecuted = false;
@ -496,7 +520,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
status = runForEachLanguage(monitor); status = runForEachLanguage(monitor);
} catch (CoreException e) { } catch (CoreException e) {
ManagedBuilderCorePlugin.log(e); ManagedBuilderCorePlugin.log(e);
status = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e); //$NON-NLS-1$ status = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR,
"Error running Builtin Specs Detector", e); //$NON-NLS-1$
} finally { } finally {
isExecuted = true; isExecuted = true;
shutdown(); shutdown();
@ -504,6 +529,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
return status; return status;
} }
@Override @Override
public boolean belongsTo(Object family) { public boolean belongsTo(Object family) {
return family == JOB_FAMILY_BUILTIN_SPECS_DETECTOR; return family == JOB_FAMILY_BUILTIN_SPECS_DETECTOR;
@ -527,12 +553,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Run built-in specs command for each language. * Run built-in specs command for each language.
* *
* @param monitor - progress monitor in the initial state where {@link IProgressMonitor#beginTask(String, int)} * @param monitor
* has not been called yet. * - progress monitor in the initial state where
* {@link IProgressMonitor#beginTask(String, int)} has not been called yet.
* @return status of operation. * @return status of operation.
*/ */
protected IStatus runForEachLanguage(IProgressMonitor monitor) { protected IStatus runForEachLanguage(IProgressMonitor monitor) {
MultiStatus status = new MultiStatus(ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.OK, "Problem running CDT Scanner Discovery provider " + getId(), null); //$NON-NLS-1$ MultiStatus status = new MultiStatus(ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.OK,
"Problem running CDT Scanner Discovery provider " + getId(), null); //$NON-NLS-1$
if (monitor == null) { if (monitor == null) {
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
@ -543,32 +571,44 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
List<String> languageIds = getLanguageScope(); List<String> languageIds = getLanguageScope();
if (languageIds != null) { if (languageIds != null) {
monitor.beginTask(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.ScannerDiscoveryTaskTitle"), //$NON-NLS-1$ monitor.beginTask(
TICKS_REMOVE_MARKERS + languageIds.size()*TICKS_RUN_FOR_ONE_LANGUAGE + TICKS_SERIALIZATION); ManagedMakeMessages
.getResourceString("AbstractBuiltinSpecsDetector.ScannerDiscoveryTaskTitle"), //$NON-NLS-1$
TICKS_REMOVE_MARKERS + languageIds.size() * TICKS_RUN_FOR_ONE_LANGUAGE
+ TICKS_SERIALIZATION);
IResource markersResource = currentProject != null ? currentProject : ResourcesPlugin.getWorkspace().getRoot(); IResource markersResource = currentProject != null ? currentProject
: ResourcesPlugin.getWorkspace().getRoot();
monitor.subTask(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ClearingMarkers", markersResource.getFullPath().toString())); //$NON-NLS-1$ monitor.subTask(
ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ClearingMarkers", //$NON-NLS-1$
markersResource.getFullPath().toString()));
markerGenerator.deleteMarkers(markersResource); markerGenerator.deleteMarkers(markersResource);
if (monitor.isCanceled()) if (monitor.isCanceled())
throw new OperationCanceledException(); throw new OperationCanceledException();
monitor.worked(TICKS_REMOVE_MARKERS); monitor.worked(TICKS_REMOVE_MARKERS);
IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription,
IBuildConfiguration.class);
for (String languageId : languageIds) { for (String languageId : languageIds) {
List<ICLanguageSettingEntry> oldEntries = getSettingEntries(currentCfgDescription, null, languageId); List<ICLanguageSettingEntry> oldEntries = getSettingEntries(currentConfig, null,
languageId);
try { try {
startupForLanguage(languageId); startupForLanguage(languageId);
runForLanguage(new SubProgressMonitor(monitor, TICKS_RUN_FOR_ONE_LANGUAGE)); runForLanguage(new SubProgressMonitor(monitor, TICKS_RUN_FOR_ONE_LANGUAGE));
} catch (Exception e) { } catch (Exception e) {
IStatus s = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e); //$NON-NLS-1$ IStatus s = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
IStatus.ERROR, "Error running Builtin Specs Detector", e); //$NON-NLS-1$
ManagedBuilderCorePlugin.log(s); ManagedBuilderCorePlugin.log(s);
status.merge(s); status.merge(s);
} finally { } finally {
shutdownForLanguage(); shutdownForLanguage();
} }
if (!isChanged) { if (!isChanged) {
List<ICLanguageSettingEntry> newEntries = getSettingEntries(currentCfgDescription, null, languageId); List<ICLanguageSettingEntry> newEntries = getSettingEntries(currentConfig, null,
languageId);
isChanged = newEntries != oldEntries; isChanged = newEntries != oldEntries;
} }
@ -577,7 +617,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
} }
monitor.subTask(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.SerializingResults")); //$NON-NLS-1$ monitor.subTask(
ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.SerializingResults")); //$NON-NLS-1$
if (isChanged) { // avoids resource and settings change notifications if (isChanged) { // avoids resource and settings change notifications
IStatus s = serializeLanguageSettings(currentCfgDescription); IStatus s = serializeLanguageSettings(currentCfgDescription);
status.merge(s); status.merge(s);
@ -587,7 +628,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} catch (OperationCanceledException e) { } catch (OperationCanceledException e) {
// user chose to cancel operation, do not threaten them with red error signs // user chose to cancel operation, do not threaten them with red error signs
} catch (Exception e) { } catch (Exception e) {
status.merge(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e)); //$NON-NLS-1$ status.merge(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR,
"Error running Builtin Specs Detector", e)); //$NON-NLS-1$
ManagedBuilderCorePlugin.log(status); ManagedBuilderCorePlugin.log(status);
} finally { } finally {
monitor.done(); monitor.done();
@ -599,8 +641,10 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Initialize provider before running for a language. * Initialize provider before running for a language.
* *
* @param languageId - language ID. * @param languageId
* @throws CoreException if something goes wrong. * - language ID.
* @throws CoreException
* if something goes wrong.
*/ */
protected void startupForLanguage(String languageId) throws CoreException { protected void startupForLanguage(String languageId) throws CoreException {
currentLanguageId = languageId; currentLanguageId = languageId;
@ -618,12 +662,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
protected void shutdownForLanguage() { protected void shutdownForLanguage() {
if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) { if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) {
collected = detectedSettingEntries.size(); collected = detectedSettingEntries.size();
setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, detectedSettingEntries); IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription,
IBuildConfiguration.class);
setSettingEntries(currentConfig, currentResource, currentLanguageId, detectedSettingEntries);
} }
detectedSettingEntries = null; detectedSettingEntries = null;
currentCommandResolved = null; currentCommandResolved = null;
if (specFile!=null && !preserveSpecFile) { if (specFile != null && !preserveSpecFile) {
specFile.delete(); specFile.delete();
specFile = null; specFile = null;
} }
@ -634,8 +680,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Run built-in specs command for one language. * Run built-in specs command for one language.
* *
* @param monitor - progress monitor in the initial state where {@link IProgressMonitor#beginTask(String, int)} * @param monitor
* has not been called yet. * - progress monitor in the initial state where
* {@link IProgressMonitor#beginTask(String, int)} has not been called yet.
*/ */
private void runForLanguage(IProgressMonitor monitor) throws CoreException { private void runForLanguage(IProgressMonitor monitor) throws CoreException {
buildRunnerHelper = new BuildRunnerHelper(currentProject); buildRunnerHelper = new BuildRunnerHelper(currentProject);
@ -644,7 +691,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
} }
try { try {
monitor.beginTask(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName()), //$NON-NLS-1$ monitor.beginTask(
ManagedMakeMessages.getFormattedString(
"AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName()), //$NON-NLS-1$
TICKS_EXECUTE_COMMAND + TICKS_OUTPUT_PARSING); TICKS_EXECUTE_COMMAND + TICKS_OUTPUT_PARSING);
IConsole console; IConsole console;
@ -652,7 +701,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
console = startProviderConsole(); console = startProviderConsole();
} else { } else {
// that looks in extension points registry and won't find the id, this console is not shown // that looks in extension points registry and won't find the id, this console is not shown
console = CCorePlugin.getDefault().getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$ console = CCorePlugin.getDefault()
.getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$
} }
console.start(currentProject); console.start(currentProject);
@ -665,7 +715,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (cmdArray != null && cmdArray.length > 0) { if (cmdArray != null && cmdArray.length > 0) {
program = new Path(cmdArray[0]); program = new Path(cmdArray[0]);
if (cmdArray.length > 1) { if (cmdArray.length > 1) {
args = new String[cmdArray.length-1]; args = new String[cmdArray.length - 1];
System.arraycopy(cmdArray, 1, args, 0, args.length); System.arraycopy(cmdArray, 1, args, 0, args.length);
} }
} }
@ -673,27 +723,32 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
String[] envp = toEnvp(environmentMap); String[] envp = toEnvp(environmentMap);
// Using GMAKE_ERROR_PARSER_ID as it can handle generated error messages // Using GMAKE_ERROR_PARSER_ID as it can handle generated error messages
ErrorParserManager epm = new ErrorParserManager(currentProject, buildDirURI, markerGenerator, new String[] {GMAKE_ERROR_PARSER_ID}); ErrorParserManager epm = new ErrorParserManager(currentProject, buildDirURI, markerGenerator,
new String[] { GMAKE_ERROR_PARSER_ID });
ConsoleParserAdapter consoleParser = new ConsoleParserAdapter(); ConsoleParserAdapter consoleParser = new ConsoleParserAdapter();
consoleParser.startup(currentCfgDescription, epm); consoleParser.startup(currentCfgDescription, epm);
List<IConsoleParser> parsers = new ArrayList<IConsoleParser>(); List<IConsoleParser> parsers = new ArrayList<IConsoleParser>();
parsers.add(consoleParser); parsers.add(consoleParser);
buildRunnerHelper.setLaunchParameters(launcher, program, args, buildDirURI, envp); buildRunnerHelper.setLaunchParameters(launcher, program, args, buildDirURI, envp);
buildRunnerHelper.prepareStreams(epm, parsers, console, new SubProgressMonitor(monitor, TICKS_OUTPUT_PARSING)); buildRunnerHelper.prepareStreams(epm, parsers, console,
new SubProgressMonitor(monitor, TICKS_OUTPUT_PARSING));
buildRunnerHelper.greeting(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName())); //$NON-NLS-1$ buildRunnerHelper.greeting(ManagedMakeMessages
.getFormattedString("AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName())); //$NON-NLS-1$
OutputStream outStream = buildRunnerHelper.getOutputStream(); OutputStream outStream = buildRunnerHelper.getOutputStream();
OutputStream errStream = buildRunnerHelper.getErrorStream(); OutputStream errStream = buildRunnerHelper.getErrorStream();
runProgramForLanguage(currentLanguageId, currentCommandResolved, envp, buildDirURI, outStream, errStream, runProgramForLanguage(currentLanguageId, currentCommandResolved, envp, buildDirURI, outStream,
new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK)); errStream, new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND,
SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
buildRunnerHelper.close(); buildRunnerHelper.close();
buildRunnerHelper.goodbye(); buildRunnerHelper.goodbye();
} catch (Exception e) { } catch (Exception e) {
ManagedBuilderCorePlugin.log(new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error running Builtin Specs Detector" , e))); //$NON-NLS-1$ ManagedBuilderCorePlugin.log(new CoreException(new Status(IStatus.ERROR,
ManagedBuilderCorePlugin.PLUGIN_ID, "Error running Builtin Specs Detector", e))); //$NON-NLS-1$
} finally { } finally {
try { try {
buildRunnerHelper.close(); buildRunnerHelper.close();
@ -705,8 +760,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Returns list of environment variables to be used during execution of provider's command. * Returns list of environment variables to be used during execution of provider's command. Implementers
* Implementers are expected to add their variables to the end of the list. * are expected to add their variables to the end of the list.
* *
* @return list of environment variables. * @return list of environment variables.
* @since 8.2 * @since 8.2
@ -715,7 +770,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (envMngr == null) { if (envMngr == null) {
envMngr = CCorePlugin.getDefault().getBuildEnvironmentManager(); envMngr = CCorePlugin.getDefault().getBuildEnvironmentManager();
} }
List<IEnvironmentVariable> vars = new ArrayList<IEnvironmentVariable>(Arrays.asList(envMngr.getVariables(currentCfgDescription, true))); List<IEnvironmentVariable> vars = new ArrayList<IEnvironmentVariable>(
Arrays.asList(envMngr.getVariables(currentCfgDescription, true)));
// On POSIX (Linux, UNIX) systems reset language variables to default (English) // On POSIX (Linux, UNIX) systems reset language variables to default (English)
// with UTF-8 encoding since GNU compilers can handle only UTF-8 characters. // with UTF-8 encoding since GNU compilers can handle only UTF-8 characters.
@ -749,13 +805,15 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
*/ */
private String[] toEnvp(Map<String, String> environmentMap) { private String[] toEnvp(Map<String, String> environmentMap) {
Set<String> envp = new HashSet<String>(); Set<String> envp = new HashSet<String>();
for (Entry<String, String> var: environmentMap.entrySet()) { for (Entry<String, String> var : environmentMap.entrySet()) {
envp.add(var.getKey() + '=' + var.getValue()); envp.add(var.getKey() + '=' + var.getValue());
} }
return envp.toArray(new String[envp.size()]); return envp.toArray(new String[envp.size()]);
} }
protected int runProgramForLanguage(String languageId, String command, String[] envp, URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr, IProgressMonitor monitor) throws CoreException, IOException { protected int runProgramForLanguage(String languageId, String command, String[] envp,
URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr,
IProgressMonitor monitor) throws CoreException, IOException {
return buildRunnerHelper.build(monitor); return buildRunnerHelper.build(monitor);
} }
@ -774,6 +832,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Create and start the provider console. * Create and start the provider console.
*
* @return CDT console. * @return CDT console.
*/ */
private IConsole startProviderConsole() { private IConsole startProviderConsole() {
@ -788,32 +847,39 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
ILanguage ld = LanguageManager.getInstance().getLanguage(currentLanguageId); ILanguage ld = LanguageManager.getInstance().getLanguage(currentLanguageId);
if (ld != null) { if (ld != null) {
String consoleId = ManagedBuilderCorePlugin.PLUGIN_ID + '.' + getId() + '.' + currentLanguageId; String consoleId = ManagedBuilderCorePlugin.PLUGIN_ID + '.' + getId() + '.'
+ currentLanguageId;
String consoleName = getName() + ", " + ld.getName(); //$NON-NLS-1$ String consoleName = getName() + ", " + ld.getName(); //$NON-NLS-1$
URL defaultIcon = Platform.getBundle(CDT_MANAGEDBUILDER_UI_PLUGIN_ID).getEntry(DEFAULT_CONSOLE_ICON); URL defaultIcon = Platform.getBundle(CDT_MANAGEDBUILDER_UI_PLUGIN_ID)
.getEntry(DEFAULT_CONSOLE_ICON);
if (defaultIcon == null) { if (defaultIcon == null) {
@SuppressWarnings("nls") @SuppressWarnings("nls")
String msg = "Unable to find icon " + DEFAULT_CONSOLE_ICON + " in plugin " + CDT_MANAGEDBUILDER_UI_PLUGIN_ID; String msg = "Unable to find icon " + DEFAULT_CONSOLE_ICON + " in plugin "
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg)); + CDT_MANAGEDBUILDER_UI_PLUGIN_ID;
ManagedBuilderCorePlugin
.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg));
} }
console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, defaultIcon); console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName,
defaultIcon);
} }
} }
if (console == null) { if (console == null) {
// that looks in extension points registry and won't find the id, this console is not shown // that looks in extension points registry and won't find the id, this console is not shown
console = CCorePlugin.getDefault().getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$ console = CCorePlugin.getDefault()
.getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$
} }
return console; return console;
} }
/** /**
* Get path to spec file which normally would be placed in workspace area. * Get path to spec file which normally would be placed in workspace area. This value is used to replace
* This value is used to replace macro ${INPUTS}. * macro ${INPUTS}.
* *
* @param languageId - language ID. * @param languageId
* - language ID.
* @return full path to the specs file. * @return full path to the specs file.
*/ */
protected String getSpecFile(String languageId) { protected String getSpecFile(String languageId) {
@ -843,11 +909,12 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Determine file extension by language id. This implementation retrieves first extension * Determine file extension by language id. This implementation retrieves first extension from the list as
* from the list as there could be multiple extensions associated with the given language. * there could be multiple extensions associated with the given language. This value is used to replace
* This value is used to replace macro ${EXT}. * macro ${EXT}.
* *
* @param languageId - given language ID. * @param languageId
* - given language ID.
* @return file extension associated with the language or {@code null} if not found. * @return file extension associated with the language or {@code null} if not found.
*/ */
protected String getSpecFileExtension(String languageId) { protected String getSpecFileExtension(String languageId) {
@ -864,16 +931,18 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
if (ext == null) { if (ext == null) {
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Unable to find file extension for language " + languageId)); //$NON-NLS-1$ ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
"Unable to find file extension for language " + languageId)); //$NON-NLS-1$
} }
return ext; return ext;
} }
/** /**
* Determine additional options to pass to scanner discovery command. * Determine additional options to pass to scanner discovery command. These options are intended to come
* These options are intended to come from the tool-chain. * from the tool-chain.
* *
* @param languageId - language ID. * @param languageId
* - language ID.
* @return additional options to pass to scanner discovery command. * @return additional options to pass to scanner discovery command.
* *
* @since 8.3 * @since 8.3
@ -907,7 +976,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
try { try {
envPathHash = Long.parseLong(envPathHashStr); envPathHash = Long.parseLong(envPathHashStr);
} catch (Exception e) { } catch (Exception e) {
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Wrong integer format [" + envPathHashStr + "]", e)); //$NON-NLS-1$ //$NON-NLS-2$ ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID,
"Wrong integer format [" + envPathHashStr + "]", e)); //$NON-NLS-1$ //$NON-NLS-2$
} }
} }
} }

View file

@ -42,12 +42,14 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.utils.EFSExtensionManager; import org.eclipse.cdt.utils.EFSExtensionManager;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver; import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
@ -61,19 +63,22 @@ import org.w3c.dom.Element;
/** /**
* Abstract class for language settings providers capable to parse build output. * Abstract class for language settings providers capable to parse build output.
* <p> * <p>
* <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as * <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as it is not currently (CDT
* it is not currently (CDT 8.1, Juno) clear how it may need to be used in future. * 8.1, Juno) clear how it may need to be used in future. There is no guarantee that this API will
* There is no guarantee that this API will work or that it will remain the same. * work or that it will remain the same. Please do not use this API without consulting with the CDT
* Please do not use this API without consulting with the CDT team. * team.
* </p> * </p>
*
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* *
* @since 8.1 * @since 8.1
*/ */
public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSettingsSerializableProvider implements ICBuildOutputParser { public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSettingsSerializableProvider
implements ICBuildOutputParser {
protected static final String ATTR_KEEP_RELATIVE_PATHS = "keep-relative-paths"; //$NON-NLS-1$ protected static final String ATTR_KEEP_RELATIVE_PATHS = "keep-relative-paths"; //$NON-NLS-1$
// evaluates to "/${ProjName)/" // evaluates to "/${ProjName)/"
private static final String PROJ_NAME_PREFIX = '/' + CdtVariableResolver.createVariableReference(CdtVariableResolver.VAR_PROJ_NAME) + '/'; private static final String PROJ_NAME_PREFIX = '/'
+ CdtVariableResolver.createVariableReference(CdtVariableResolver.VAR_PROJ_NAME) + '/';
protected ICConfigurationDescription currentCfgDescription = null; protected ICConfigurationDescription currentCfgDescription = null;
protected IWorkingDirectoryTracker cwdTracker = null; protected IWorkingDirectoryTracker cwdTracker = null;
@ -89,26 +94,32 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
private static final EFSExtensionProvider efsProviderDefault = new EFSExtensionProvider() { private static final EFSExtensionProvider efsProviderDefault = new EFSExtensionProvider() {
final EFSExtensionManager efsManager = EFSExtensionManager.getDefault(); final EFSExtensionManager efsManager = EFSExtensionManager.getDefault();
@Override @Override
public String getPathFromURI(URI locationURI) { public String getPathFromURI(URI locationURI) {
return efsManager.getPathFromURI(locationURI); return efsManager.getPathFromURI(locationURI);
} }
@Override @Override
public URI getLinkedURI(URI locationURI) { public URI getLinkedURI(URI locationURI) {
return efsManager.getLinkedURI(locationURI); return efsManager.getLinkedURI(locationURI);
} }
@Override @Override
public URI createNewURIFromPath(URI locationOnSameFilesystem, String path) { public URI createNewURIFromPath(URI locationOnSameFilesystem, String path) {
return efsManager.createNewURIFromPath(locationOnSameFilesystem, path); return efsManager.createNewURIFromPath(locationOnSameFilesystem, path);
} }
@Override @Override
public String getMappedPath(URI locationURI) { public String getMappedPath(URI locationURI) {
return efsManager.getMappedPath(locationURI); return efsManager.getMappedPath(locationURI);
} }
@Override @Override
public boolean isVirtual(URI locationURI) { public boolean isVirtual(URI locationURI) {
return efsManager.isVirtual(locationURI); return efsManager.isVirtual(locationURI);
} }
@Override @Override
public URI append(URI baseURI, String extension) { public URI append(URI baseURI, String extension) {
return efsManager.append(baseURI, extension); return efsManager.append(baseURI, extension);
@ -116,9 +127,9 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
}; };
/** /**
* Abstract class defining common functionality for option parsers. * Abstract class defining common functionality for option parsers. The purpose of this parser
* The purpose of this parser is to parse a portion of string representing * is to parse a portion of string representing a single option and create a language settings
* a single option and create a language settings entry out of it. * entry out of it.
* *
* See {@link GCCBuildCommandParser} for an example how to define the parsers. * See {@link GCCBuildCommandParser} for an example how to define the parsers.
*/ */
@ -136,13 +147,19 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Constructor. * Constructor.
* *
* @param kind - kind of language settings entries being parsed by the parser. * @param kind
* @param pattern - regular expression pattern being parsed by the parser. * - kind of language settings entries being parsed by the parser.
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param valueExpression - capturing group expression defining value of an entry. * - regular expression pattern being parsed by the parser.
* @param extraFlag - extra-flag to add while creating language settings entry. * @param nameExpression
* - capturing group expression defining name of an entry.
* @param valueExpression
* - capturing group expression defining value of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public AbstractOptionParser(int kind, String pattern, String nameExpression, String valueExpression, int extraFlag) { public AbstractOptionParser(int kind, String pattern, String nameExpression, String valueExpression,
int extraFlag) {
this.kind = kind; this.kind = kind;
this.patternStr = pattern; this.patternStr = pattern;
this.nameExpression = nameExpression; this.nameExpression = nameExpression;
@ -153,11 +170,16 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Create language settings entry of appropriate kind and considering extra-flag passed in constructor. * Create language settings entry of appropriate kind and considering extra-flag passed in
* constructor.
* *
* @param name - name of language settings entry. * @param name
* @param value - value of language settings entry. * - name of language settings entry.
* @param flag - flag to set. Note that the flag will be amended with the extra-flag defined in constructor. * @param value
* - value of language settings entry.
* @param flag
* - flag to set. Note that the flag will be amended with the extra-flag defined
* in constructor.
* @return new language settings entry. * @return new language settings entry.
*/ */
public ICLanguageSettingEntry createEntry(String name, String value, int flag) { public ICLanguageSettingEntry createEntry(String name, String value, int flag) {
@ -192,12 +214,13 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Test for a match and parse a portion of input string representing a single option * Test for a match and parse a portion of input string representing a single option to
* to retrieve name and value. * retrieve name and value.
* *
* @param optionString - an option to test and parse, possibly with an argument. * @param optionString
* @return {@code true} if the option is a match to parser's regular expression * - an option to test and parse, possibly with an argument.
* or {@code false} otherwise. * @return {@code true} if the option is a match to parser's regular expression or
* {@code false} otherwise.
*/ */
public boolean parseOption(String optionString) { public boolean parseOption(String optionString) {
// get rid of extra text at the end (for example file name could be confused for an argument) // get rid of extra text at the end (for example file name could be confused for an argument)
@ -221,6 +244,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
public IncludePathOptionParser(String pattern, String nameExpression) { public IncludePathOptionParser(String pattern, String nameExpression) {
super(ICLanguageSettingEntry.INCLUDE_PATH, pattern, nameExpression, nameExpression, 0); super(ICLanguageSettingEntry.INCLUDE_PATH, pattern, nameExpression, nameExpression, 0);
} }
public IncludePathOptionParser(String pattern, String nameExpression, int extraFlag) { public IncludePathOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.INCLUDE_PATH, pattern, nameExpression, nameExpression, extraFlag); super(ICLanguageSettingEntry.INCLUDE_PATH, pattern, nameExpression, nameExpression, extraFlag);
} }
@ -232,17 +256,25 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
protected static class IncludeFileOptionParser extends AbstractOptionParser { protected static class IncludeFileOptionParser extends AbstractOptionParser {
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
*/ */
public IncludeFileOptionParser(String pattern, String nameExpression) { public IncludeFileOptionParser(String pattern, String nameExpression) {
super(ICLanguageSettingEntry.INCLUDE_FILE, pattern, nameExpression, nameExpression, 0); super(ICLanguageSettingEntry.INCLUDE_FILE, pattern, nameExpression, nameExpression, 0);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param extraFlag - extra-flag to add while creating language settings entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public IncludeFileOptionParser(String pattern, String nameExpression, int extraFlag) { public IncludeFileOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.INCLUDE_FILE, pattern, nameExpression, nameExpression, extraFlag); super(ICLanguageSettingEntry.INCLUDE_FILE, pattern, nameExpression, nameExpression, extraFlag);
@ -255,28 +287,44 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
protected static class MacroOptionParser extends AbstractOptionParser { protected static class MacroOptionParser extends AbstractOptionParser {
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param valueExpression - capturing group expression defining value of an entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param valueExpression
* - capturing group expression defining value of an entry.
*/ */
public MacroOptionParser(String pattern, String nameExpression, String valueExpression) { public MacroOptionParser(String pattern, String nameExpression, String valueExpression) {
super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, valueExpression, 0); super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, valueExpression, 0);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param valueExpression - capturing group expression defining value of an entry. * - regular expression pattern being parsed by the parser.
* @param extraFlag - extra-flag to add while creating language settings entry. * @param nameExpression
* - capturing group expression defining name of an entry.
* @param valueExpression
* - capturing group expression defining value of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public MacroOptionParser(String pattern, String nameExpression, String valueExpression, int extraFlag) { public MacroOptionParser(String pattern, String nameExpression, String valueExpression,
int extraFlag) {
super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, valueExpression, extraFlag); super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, valueExpression, extraFlag);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param extraFlag - extra-flag to add while creating language settings entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public MacroOptionParser(String pattern, String nameExpression, int extraFlag) { public MacroOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, null, extraFlag); super(ICLanguageSettingEntry.MACRO, pattern, nameExpression, null, extraFlag);
@ -289,17 +337,25 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
protected static class MacroFileOptionParser extends AbstractOptionParser { protected static class MacroFileOptionParser extends AbstractOptionParser {
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
*/ */
public MacroFileOptionParser(String pattern, String nameExpression) { public MacroFileOptionParser(String pattern, String nameExpression) {
super(ICLanguageSettingEntry.MACRO_FILE, pattern, nameExpression, nameExpression, 0); super(ICLanguageSettingEntry.MACRO_FILE, pattern, nameExpression, nameExpression, 0);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param extraFlag - extra-flag to add while creating language settings entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public MacroFileOptionParser(String pattern, String nameExpression, int extraFlag) { public MacroFileOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.MACRO_FILE, pattern, nameExpression, nameExpression, extraFlag); super(ICLanguageSettingEntry.MACRO_FILE, pattern, nameExpression, nameExpression, extraFlag);
@ -312,17 +368,25 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
protected static class LibraryPathOptionParser extends AbstractOptionParser { protected static class LibraryPathOptionParser extends AbstractOptionParser {
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
*/ */
public LibraryPathOptionParser(String pattern, String nameExpression) { public LibraryPathOptionParser(String pattern, String nameExpression) {
super(ICLanguageSettingEntry.LIBRARY_PATH, pattern, nameExpression, nameExpression, 0); super(ICLanguageSettingEntry.LIBRARY_PATH, pattern, nameExpression, nameExpression, 0);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param extraFlag - extra-flag to add while creating language settings entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public LibraryPathOptionParser(String pattern, String nameExpression, int extraFlag) { public LibraryPathOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.LIBRARY_PATH, pattern, nameExpression, nameExpression, extraFlag); super(ICLanguageSettingEntry.LIBRARY_PATH, pattern, nameExpression, nameExpression, extraFlag);
@ -335,17 +399,25 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
protected static class LibraryFileOptionParser extends AbstractOptionParser { protected static class LibraryFileOptionParser extends AbstractOptionParser {
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
*/ */
public LibraryFileOptionParser(String pattern, String nameExpression) { public LibraryFileOptionParser(String pattern, String nameExpression) {
super(ICLanguageSettingEntry.LIBRARY_FILE, pattern, nameExpression, nameExpression, 0); super(ICLanguageSettingEntry.LIBRARY_FILE, pattern, nameExpression, nameExpression, 0);
} }
/** /**
* Constructor. * Constructor.
* @param pattern - regular expression pattern being parsed by the parser. *
* @param nameExpression - capturing group expression defining name of an entry. * @param pattern
* @param extraFlag - extra-flag to add while creating language settings entry. * - regular expression pattern being parsed by the parser.
* @param nameExpression
* - capturing group expression defining name of an entry.
* @param extraFlag
* - extra-flag to add while creating language settings entry.
*/ */
public LibraryFileOptionParser(String pattern, String nameExpression, int extraFlag) { public LibraryFileOptionParser(String pattern, String nameExpression, int extraFlag) {
super(ICLanguageSettingEntry.LIBRARY_FILE, pattern, nameExpression, nameExpression, extraFlag); super(ICLanguageSettingEntry.LIBRARY_FILE, pattern, nameExpression, nameExpression, extraFlag);
@ -353,60 +425,63 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Parse the line returning the resource name as appears in the output. * Parse the line returning the resource name as appears in the output. This is the resource
* This is the resource where {@link ICLanguageSettingEntry} list is being added. * where {@link ICLanguageSettingEntry} list is being added.
* *
* @param line - one input line from the output stripped from end of line characters. * @param line
* @return the resource name as appears in the output or {@code null}. * - one input line from the output stripped from end of line characters.
* Note that {@code null} can have different semantics and can mean "no resource found" * @return the resource name as appears in the output or {@code null}. Note that {@code null}
* or "applicable to any resource". By default "no resource found" is used in this * can have different semantics and can mean "no resource found" or "applicable to any
* abstract class but extenders can handle otherwise. * resource". By default "no resource found" is used in this abstract class but
* extenders can handle otherwise.
*/ */
protected abstract String parseResourceName(String line); protected abstract String parseResourceName(String line);
/** /**
* Parse the line returning the list of substrings to be treated each as input to * Parse the line returning the list of substrings to be treated each as input to the option
* the option parsers. It is assumed that each substring presents one * parsers. It is assumed that each substring presents one {@link ICLanguageSettingEntry} (for
* {@link ICLanguageSettingEntry} (for example compiler options {@code -I/path} or * example compiler options {@code -I/path} or {@code -DMACRO=1}).
* {@code -DMACRO=1}).
* *
* @param line - one input line from the output stripped from end of line characters. * @param line
* - one input line from the output stripped from end of line characters.
* @return list of substrings representing language settings entries. * @return list of substrings representing language settings entries.
*/ */
protected abstract List<String> parseOptions(String line); protected abstract List<String> parseOptions(String line);
/** /**
* @return array of option parsers defining how to parse a string to * @return array of option parsers defining how to parse a string to
* {@link ICLanguageSettingEntry}. * {@link ICLanguageSettingEntry}. See {@link AbstractOptionParser} and its specific
* See {@link AbstractOptionParser} and its specific extenders. * extenders.
*/ */
protected abstract AbstractOptionParser[] getOptionParsers(); protected abstract AbstractOptionParser[] getOptionParsers();
/** /**
* @return {@code true} when the provider tries to resolve relative or remote paths * @return {@code true} when the provider tries to resolve relative or remote paths to the
* to the existing paths in the workspace or local file-system using certain heuristics. * existing paths in the workspace or local file-system using certain heuristics.
*/ */
public boolean isResolvingPaths() { public boolean isResolvingPaths() {
return isResolvingPaths; return isResolvingPaths;
} }
/** /**
* Enable or disable resolving relative or remote paths to the existing paths * Enable or disable resolving relative or remote paths to the existing paths in the workspace
* in the workspace or local file-system. * or local file-system.
* *
* @param resolvePaths - set {@code true} to enable or {@code false} to disable * @param resolvePaths
* resolving paths. When this parameter is set to {@code false} the paths will * - set {@code true} to enable or {@code false} to disable resolving paths. When
* be kept as they appear in the build output. * this parameter is set to {@code false} the paths will be kept as they appear in
* the build output.
*/ */
public void setResolvingPaths(boolean resolvePaths) { public void setResolvingPaths(boolean resolvePaths) {
this.isResolvingPaths = resolvePaths; this.isResolvingPaths = resolvePaths;
} }
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException { public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker)
throws CoreException {
this.currentCfgDescription = cfgDescription; this.currentCfgDescription = cfgDescription;
this.currentProject = cfgDescription != null ? cfgDescription.getProjectDescription().getProject() : null; this.currentProject = cfgDescription != null ? cfgDescription.getProjectDescription().getProject()
: null;
this.cwdTracker = cwdTracker; this.cwdTracker = cwdTracker;
this.efsProvider = getEFSProvider(); this.efsProvider = getEFSProvider();
} }
@ -432,18 +507,18 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* URI of directory where the build is happening. This URI could point to a remote file-system * URI of directory where the build is happening. This URI could point to a remote
* for remote builds. Most often it is the same file-system as for currentResource but * file-system for remote builds. Most often it is the same file-system as for
* it can be different file-system (and different URI schema). * currentResource but it can be different file-system (and different URI schema).
*/ */
URI buildDirURI = null; URI buildDirURI = null;
/** /**
* Where source tree starts if mapped. This kind of mapping is useful for example in cases when * Where source tree starts if mapped. This kind of mapping is useful for example in cases
* the absolute path to the source file on the remote system is simulated inside a project in the * when the absolute path to the source file on the remote system is simulated inside a
* workspace. * project in the workspace. This URI is rooted on the same file-system where
* This URI is rooted on the same file-system where currentResource resides. In general this file-system * currentResource resides. In general this file-system (or even URI schema) does not have
* (or even URI schema) does not have to match that of buildDirURI. * to match that of buildDirURI.
*/ */
URI mappedRootURI = null; URI mappedRootURI = null;
@ -462,7 +537,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
try { try {
if (optionParser.parseOption(option)) { if (optionParser.parseOption(option)) {
ICLanguageSettingEntry entry = null; ICLanguageSettingEntry entry = null;
if (isResolvingPaths && (optionParser.isForFile() || optionParser.isForFolder())) { if (isResolvingPaths
&& (optionParser.isForFile() || optionParser.isForFolder())) {
URI baseURI = mappedRootURI; URI baseURI = mappedRootURI;
if (buildDirURI != null && !new Path(optionParser.parsedName).isAbsolute()) { if (buildDirURI != null && !new Path(optionParser.parsedName).isAbsolute()) {
if (mappedRootURI != null) { if (mappedRootURI != null) {
@ -471,9 +547,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
baseURI = buildDirURI; baseURI = buildDirURI;
} }
} }
entry = createResolvedPathEntry(optionParser, optionParser.parsedName, 0, baseURI); entry = createResolvedPathEntry(optionParser, optionParser.parsedName, 0,
baseURI);
} else { } else {
entry = optionParser.createEntry(optionParser.parsedName, optionParser.parsedValue, 0); entry = optionParser.createEntry(optionParser.parsedName,
optionParser.parsedValue, 0);
} }
if (entry != null && !entries.contains(entry)) { if (entry != null && !entries.contains(entry)) {
@ -483,8 +561,10 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
} catch (Throwable e) { } catch (Throwable e) {
@SuppressWarnings("nls") @SuppressWarnings("nls")
String msg = "Exception trying to parse option [" + option + "], class " + getClass().getSimpleName(); String msg = "Exception trying to parse option [" + option + "], class "
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg, e)); + getClass().getSimpleName();
ManagedBuilderCorePlugin
.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg, e));
} }
} }
} }
@ -498,13 +578,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* In case when absolute path is mapped to the source tree in a project * In case when absolute path is mapped to the source tree in a project this function will try
* this function will try to figure mapping and return "mapped root", * to figure mapping and return "mapped root", i.e URI where the root path would be mapped. The
* i.e URI where the root path would be mapped. The mapped root will be * mapped root will be used to prepend to other "absolute" paths where appropriate.
* used to prepend to other "absolute" paths where appropriate.
* *
* @param resource - a resource referred by parsed path * @param resource
* @param parsedResourceName - path as appears in the output * - a resource referred by parsed path
* @param parsedResourceName
* - path as appears in the output
* @return mapped path as URI * @return mapped path as URI
*/ */
protected URI getMappedRootURI(IResource resource, String parsedResourceName) { protected URI getMappedRootURI(IResource resource, String parsedResourceName) {
@ -542,7 +623,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
* Determine current build directory considering currentResource (resource being compiled), * Determine current build directory considering currentResource (resource being compiled),
* parsedResourceName and mappedRootURI. * parsedResourceName and mappedRootURI.
* *
* @param mappedRootURI - root of the source tree when mapped to remote file-system. * @param mappedRootURI
* - root of the source tree when mapped to remote file-system.
* @return {@link URI} of current build directory * @return {@link URI} of current build directory
*/ */
protected URI getBuildDirURI(URI mappedRootURI) { protected URI getBuildDirURI(URI mappedRootURI) {
@ -550,7 +632,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
// try to deduce build directory from full path of currentResource and partial path of parsedResourceName // try to deduce build directory from full path of currentResource and partial path of parsedResourceName
URI cwdURI = null; URI cwdURI = null;
if (currentResource != null && parsedResourceName != null && !new Path(parsedResourceName).isAbsolute()) { if (currentResource != null && parsedResourceName != null
&& !new Path(parsedResourceName).isAbsolute()) {
cwdURI = findBaseLocationURI(currentResource.getLocationURI(), parsedResourceName); cwdURI = findBaseLocationURI(currentResource.getLocationURI(), parsedResourceName);
} }
String cwdPath = cwdURI != null ? efsProvider.getPathFromURI(cwdURI) : null; String cwdPath = cwdURI != null ? efsProvider.getPathFromURI(cwdURI) : null;
@ -603,13 +686,15 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Sets language settings entries for current configuration description, current resource * Sets language settings entries for current configuration description, current resource and
* and current language ID. * current language ID.
* *
* @param entries - language settings entries to set. * @param entries
* - language settings entries to set.
*/ */
protected void setSettingEntries(List<? extends ICLanguageSettingEntry> entries) { protected void setSettingEntries(List<? extends ICLanguageSettingEntry> entries) {
setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, entries); IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription, IBuildConfiguration.class);
setSettingEntries(currentConfig, currentResource, currentLanguageId, entries);
} }
/** /**
@ -638,7 +723,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Determine if the language is in scope of the provider. * Determine if the language is in scope of the provider.
* *
* @param languageId - language ID. * @param languageId
* - language ID.
* @return {@code true} if the language is in scope, {@code false } otherwise. * @return {@code true} if the language is in scope, {@code false } otherwise.
*/ */
protected boolean isLanguageInScope(String languageId) { protected boolean isLanguageInScope(String languageId) {
@ -647,10 +733,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Find file resource in the workspace for a given URI with a preference for the resource * Find file resource in the workspace for a given URI with a preference for the resource to
* to reside in the given project. * reside in the given project.
*/ */
private static IResource findFileForLocationURI(URI uri, IProject preferredProject, boolean checkExistence) { private static IResource findFileForLocationURI(URI uri, IProject preferredProject,
boolean checkExistence) {
IResource sourceFile = null; IResource sourceFile = null;
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IResource[] resources = root.findFilesForLocationURI(uri); IResource[] resources = root.findFilesForLocationURI(uri);
@ -669,10 +756,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Return a resource in workspace corresponding the given folder {@link URI} preferable residing in * Return a resource in workspace corresponding the given folder {@link URI} preferable residing
* the provided project. * in the provided project.
*/ */
private static IResource findContainerForLocationURI(URI uri, IProject preferredProject, boolean checkExistence) { private static IResource findContainerForLocationURI(URI uri, IProject preferredProject,
boolean checkExistence) {
IResource resource = null; IResource resource = null;
IResource[] resources = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(uri); IResource[] resources = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(uri);
for (IResource rc : resources) { for (IResource rc : resources) {
@ -707,7 +795,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
// try to find absolute path in the workspace // try to find absolute path in the workspace
if (sourceFile == null && new Path(parsedResourceName).isAbsolute()) { if (sourceFile == null && new Path(parsedResourceName).isAbsolute()) {
URI uri = org.eclipse.core.filesystem.URIUtil.toURI(parsedResourceName); URI uri = org.eclipse.core.filesystem.URIUtil.toURI(parsedResourceName);
sourceFile = findFileForLocationURI(uri, currentProject, /*checkExistence*/ true); sourceFile = findFileForLocationURI(uri, currentProject, /* checkExistence */ true);
} }
// try last known current working directory from build output // try last known current working directory from build output
@ -715,7 +803,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
URI cwdURI = cwdTracker.getWorkingDirectoryURI(); URI cwdURI = cwdTracker.getWorkingDirectoryURI();
if (cwdURI != null) { if (cwdURI != null) {
URI uri = efsProvider.append(cwdURI, parsedResourceName); URI uri = efsProvider.append(cwdURI, parsedResourceName);
sourceFile = findFileForLocationURI(uri, currentProject, /*checkExistence*/ true); sourceFile = findFileForLocationURI(uri, currentProject, /* checkExistence */ true);
} }
} }
@ -730,13 +818,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} catch (Exception e) { } catch (Exception e) {
@SuppressWarnings("nls") @SuppressWarnings("nls")
String msg = "Exception trying to resolve value [" + strBuilderCWD + "]"; String msg = "Exception trying to resolve value [" + strBuilderCWD + "]";
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg, e)); ManagedBuilderCorePlugin
.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg, e));
} }
builderCWD = new Path(strBuilderCWD); builderCWD = new Path(strBuilderCWD);
IPath path = builderCWD.append(parsedResourceName); IPath path = builderCWD.append(parsedResourceName);
URI uri = org.eclipse.core.filesystem.URIUtil.toURI(path); URI uri = org.eclipse.core.filesystem.URIUtil.toURI(path);
sourceFile = findFileForLocationURI(uri, currentProject, /*checkExistence*/ true); sourceFile = findFileForLocationURI(uri, currentProject, /* checkExistence */ true);
} }
} }
@ -749,9 +838,9 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Find base location of the file, i.e. location of the directory which * Find base location of the file, i.e. location of the directory which results from removing
* results from removing trailing relativeFileName from fileURI or * trailing relativeFileName from fileURI or {@code null} if fileURI doesn't represent
* {@code null} if fileURI doesn't represent relativeFileName. * relativeFileName.
*/ */
private static URI findBaseLocationURI(URI fileURI, String relativeFileName) { private static URI findBaseLocationURI(URI fileURI, String relativeFileName) {
URI cwdURI = null; URI cwdURI = null;
@ -780,8 +869,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
try { try {
cwdURI = new URI(fileURI.getScheme(), fileURI.getUserInfo(), fileURI.getHost(), cwdURI = new URI(fileURI.getScheme(), fileURI.getUserInfo(), fileURI.getHost(), fileURI.getPort(),
fileURI.getPort(), path + '/', fileURI.getQuery(), fileURI.getFragment()); path + '/', fileURI.getQuery(), fileURI.getFragment());
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
// It should be valid URI here or something is really wrong // It should be valid URI here or something is really wrong
ManagedBuilderCorePlugin.log(e); ManagedBuilderCorePlugin.log(e);
@ -791,10 +880,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* The manipulations here are done to resolve problems such as "../" navigation for symbolic links where * The manipulations here are done to resolve problems such as "../" navigation for symbolic
* "link/.." cannot be collapsed as it must follow the real file-system path. {@link java.io.File#getCanonicalPath()} * links where "link/.." cannot be collapsed as it must follow the real file-system path.
* deals with that correctly but {@link Path} or {@link URI} try to normalize the path which would be incorrect here. * {@link java.io.File#getCanonicalPath()} deals with that correctly but {@link Path} or
* Another issue being resolved here is fixing drive letters in URI syntax. * {@link URI} try to normalize the path which would be incorrect here. Another issue being
* resolved here is fixing drive letters in URI syntax.
*/ */
private static URI resolvePathFromBaseLocation(String pathStr0, IPath baseLocation) { private static URI resolvePathFromBaseLocation(String pathStr0, IPath baseLocation) {
String pathStr = pathStr0; String pathStr = pathStr0;
@ -851,8 +941,10 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Determine URI on the local file-system considering possible mapping. * Determine URI on the local file-system considering possible mapping.
* *
* @param pathStr - path to the resource, can be absolute or relative * @param pathStr
* @param baseURI - base {@link URI} where path to the resource is rooted * - path to the resource, can be absolute or relative
* @param baseURI
* - base {@link URI} where path to the resource is rooted
* @return {@link URI} of the resource * @return {@link URI} of the resource
*/ */
private URI determineMappedURI(String pathStr, URI baseURI) { private URI determineMappedURI(String pathStr, URI baseURI) {
@ -869,7 +961,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
uri = resolvePathFromBaseLocation(pathStr, baseLocation); uri = resolvePathFromBaseLocation(pathStr, baseLocation);
} else { } else {
// location on a remote file-system // location on a remote file-system
IPath path = new Path(pathStr); // use canonicalized path here, in particular replace all '\' with '/' for Windows paths IPath path = new Path(pathStr); // use canonicalized path here, in particular replace all '\' with
// '/' for Windows paths
URI remoteUri = efsProvider.append(baseURI, path.toString()); URI remoteUri = efsProvider.append(baseURI, path.toString());
if (remoteUri != null) { if (remoteUri != null) {
String localPath = efsProvider.getMappedPath(remoteUri); String localPath = efsProvider.getMappedPath(remoteUri);
@ -915,7 +1008,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
private IResource findBestFitInWorkspace(String parsedName) { private IResource findBestFitInWorkspace(String parsedName) {
Set<String> referencedProjectsNames = new LinkedHashSet<String>(); Set<String> referencedProjectsNames = new LinkedHashSet<String>();
if (currentCfgDescription != null) { if (currentCfgDescription != null) {
Map<String,String> refs = currentCfgDescription.getReferenceInfo(); Map<String, String> refs = currentCfgDescription.getReferenceInfo();
referencedProjectsNames.addAll(refs.keySet()); referencedProjectsNames.addAll(refs.keySet());
} }
@ -964,7 +1057,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
if (projects.length > 0) { if (projects.length > 0) {
IResource rc = null; IResource rc = null;
for (IProject prj : projects) { for (IProject prj : projects) {
if (!prj.equals(currentProject) && !referencedProjectsNames.contains(prj.getName()) && prj.isOpen()) { if (!prj.equals(currentProject) && !referencedProjectsNames.contains(prj.getName())
&& prj.isOpen()) {
List<IResource> result = findPathInFolder(path, prj); List<IResource> result = findPathInFolder(path, prj);
int size = result.size(); int size = result.size();
if (size == 1 && rc == null) { if (size == 1 && rc == null) {
@ -986,7 +1080,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Get location on the local file-system considering possible mapping by EFS provider. See {@link EFSExtensionManager}. * Get location on the local file-system considering possible mapping by EFS provider. See
* {@link EFSExtensionManager}.
*/ */
private IPath getFilesystemLocation(URI uri) { private IPath getFilesystemLocation(URI uri) {
if (uri == null) if (uri == null)
@ -1013,14 +1108,17 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Resolve and create language settings path entry. * Resolve and create language settings path entry.
*/ */
private ICLanguageSettingEntry createResolvedPathEntry(AbstractOptionParser optionParser, String parsedPath, int flag, URI baseURI) { private ICLanguageSettingEntry createResolvedPathEntry(AbstractOptionParser optionParser,
String parsedPath, int flag, URI baseURI) {
URI uri = determineMappedURI(parsedPath, baseURI); URI uri = determineMappedURI(parsedPath, baseURI);
boolean isRelative = !new Path(parsedPath).isAbsolute(); boolean isRelative = !new Path(parsedPath).isAbsolute();
// is mapped something that is not a project root // is mapped something that is not a project root
boolean isRemapped = baseURI != null && currentProject != null && !baseURI.equals(currentProject.getLocationURI()); boolean isRemapped = baseURI != null && currentProject != null
&& !baseURI.equals(currentProject.getLocationURI());
boolean presentAsRelative = isRelative || isRemapped; boolean presentAsRelative = isRelative || isRemapped;
ICLanguageSettingEntry entry = resolvePathEntryInWorkspace(optionParser, uri, flag, presentAsRelative); ICLanguageSettingEntry entry = resolvePathEntryInWorkspace(optionParser, uri, flag,
presentAsRelative);
if (entry != null) { if (entry != null) {
return entry; return entry;
} }
@ -1044,10 +1142,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Create a language settings entry for a given resource. * Create a language settings entry for a given resource. This will represent relative path
* This will represent relative path using CDT variable ${ProjName}. * using CDT variable ${ProjName}.
*/ */
private ICLanguageSettingEntry createPathEntry(AbstractOptionParser optionParser, IResource rc, boolean isRelative, int flag) { private ICLanguageSettingEntry createPathEntry(AbstractOptionParser optionParser, IResource rc,
boolean isRelative, int flag) {
String path; String path;
if (isRelative && rc.getProject().equals(currentProject)) { if (isRelative && rc.getProject().equals(currentProject)) {
path = PROJ_NAME_PREFIX + rc.getFullPath().removeFirstSegments(1); path = PROJ_NAME_PREFIX + rc.getFullPath().removeFirstSegments(1);
@ -1062,13 +1161,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Find an existing resource in the workspace and create a language settings entry for it. * Find an existing resource in the workspace and create a language settings entry for it.
*/ */
private ICLanguageSettingEntry resolvePathEntryInWorkspace(AbstractOptionParser optionParser, URI uri, int flag, boolean isRelative) { private ICLanguageSettingEntry resolvePathEntryInWorkspace(AbstractOptionParser optionParser, URI uri,
int flag, boolean isRelative) {
if (uri != null && uri.isAbsolute()) { if (uri != null && uri.isAbsolute()) {
IResource rc = null; IResource rc = null;
if (optionParser.isForFolder()) { if (optionParser.isForFolder()) {
rc = findContainerForLocationURI(uri, currentProject, /*checkExistence*/ true); rc = findContainerForLocationURI(uri, currentProject, /* checkExistence */ true);
} else if (optionParser.isForFile()) { } else if (optionParser.isForFile()) {
rc = findFileForLocationURI(uri, currentProject, /*checkExistence*/ true); rc = findFileForLocationURI(uri, currentProject, /* checkExistence */ true);
} }
if (rc != null) { if (rc != null) {
return createPathEntry(optionParser, rc, isRelative, flag); return createPathEntry(optionParser, rc, isRelative, flag);
@ -1080,7 +1180,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
/** /**
* Find a resource on the file-system and create a language settings entry for it. * Find a resource on the file-system and create a language settings entry for it.
*/ */
private ICLanguageSettingEntry resolvePathEntryInFilesystem(AbstractOptionParser optionParser, URI uri, int flag) { private ICLanguageSettingEntry resolvePathEntryInFilesystem(AbstractOptionParser optionParser, URI uri,
int flag) {
IPath location = getFilesystemLocation(uri); IPath location = getFilesystemLocation(uri);
if (location != null) { if (location != null) {
String loc = location.toString(); String loc = location.toString();
@ -1092,9 +1193,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Find a best fit for the resource in the workspace and create a language settings entry for it. * Find a best fit for the resource in the workspace and create a language settings entry for
* it.
*/ */
private ICLanguageSettingEntry resolvePathEntryInWorkspaceAsBestFit(AbstractOptionParser optionParser, String parsedPath, int flag, boolean isRelative) { private ICLanguageSettingEntry resolvePathEntryInWorkspaceAsBestFit(AbstractOptionParser optionParser,
String parsedPath, int flag, boolean isRelative) {
IResource rc = findBestFitInWorkspace(parsedPath); IResource rc = findBestFitInWorkspace(parsedPath);
if (rc != null) { if (rc != null) {
return createPathEntry(optionParser, rc, isRelative, flag); return createPathEntry(optionParser, rc, isRelative, flag);
@ -1103,15 +1206,17 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Try to map a resource in the workspace even if it does not exist and create a language settings entry for it. * Try to map a resource in the workspace even if it does not exist and create a language
* settings entry for it.
*/ */
private ICLanguageSettingEntry resolvePathEntryInWorkspaceToNonexistingResource(AbstractOptionParser optionParser, URI uri, int flag, boolean isRelative) { private ICLanguageSettingEntry resolvePathEntryInWorkspaceToNonexistingResource(
AbstractOptionParser optionParser, URI uri, int flag, boolean isRelative) {
if (uri != null && uri.isAbsolute()) { if (uri != null && uri.isAbsolute()) {
IResource rc = null; IResource rc = null;
if (optionParser.isForFolder()) { if (optionParser.isForFolder()) {
rc = findContainerForLocationURI(uri, currentProject, /*checkExistence*/ false); rc = findContainerForLocationURI(uri, currentProject, /* checkExistence */ false);
} else if (optionParser.isForFile()) { } else if (optionParser.isForFile()) {
rc = findFileForLocationURI(uri, currentProject, /*checkExistence*/ false); rc = findFileForLocationURI(uri, currentProject, /* checkExistence */ false);
} }
if (rc != null) { if (rc != null) {
return createPathEntry(optionParser, rc, isRelative, flag); return createPathEntry(optionParser, rc, isRelative, flag);
@ -1121,9 +1226,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Try to map a resource on the file-system even if it does not exist and create a language settings entry for it. * Try to map a resource on the file-system even if it does not exist and create a language
* settings entry for it.
*/ */
private ICLanguageSettingEntry resolvePathEntryInFilesystemToNonExistingResource(AbstractOptionParser optionParser, URI uri, int flag) { private ICLanguageSettingEntry resolvePathEntryInFilesystemToNonExistingResource(
AbstractOptionParser optionParser, URI uri, int flag) {
IPath location = getFilesystemLocation(uri); IPath location = getFilesystemLocation(uri);
if (location != null) { if (location != null) {
return optionParser.createEntry(location.toString(), location.toString(), flag); return optionParser.createEntry(location.toString(), location.toString(), flag);
@ -1132,10 +1239,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Count how many groups are present in regular expression. * Count how many groups are present in regular expression. The implementation is simplistic but
* The implementation is simplistic but should be sufficient for the cause. * should be sufficient for the cause.
* *
* @param str - regular expression to count the groups. * @param str
* - regular expression to count the groups.
* @return number of the groups (groups are enclosed in round brackets) present. * @return number of the groups (groups are enclosed in round brackets) present.
*/ */
protected static int countGroups(String str) { protected static int countGroups(String str) {
@ -1164,8 +1272,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
/** /**
* Construct regular expression to find any file extension for C or C++. * Construct regular expression to find any file extension for C or C++. Returns expression
* Returns expression shaped in form of "((cpp)|(c++)|(c))". * shaped in form of "((cpp)|(c++)|(c))".
* *
* @return regular expression for searching C/C++ file extensions. * @return regular expression for searching C/C++ file extensions.
*/ */
@ -1184,14 +1292,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
return pattern; return pattern;
} }
/** /**
* This {@link EFSExtensionProvider} is capable to translate EFS paths to and from local * This {@link EFSExtensionProvider} is capable to translate EFS paths to and from local
* file-system. Added mostly for Cygwin translations. * file-system. Added mostly for Cygwin translations.
* *
* This usage of {@link EFSExtensionProvider} is somewhat a misnomer. This provider is not * This usage of {@link EFSExtensionProvider} is somewhat a misnomer. This provider is not an
* an "extension" provider but rather a wrapper on {@link EFSExtensionManager} which in fact * "extension" provider but rather a wrapper on {@link EFSExtensionManager} which in fact will
* will use genuine {@link EFSExtensionProvider}s defined as extensions. * use genuine {@link EFSExtensionProvider}s defined as extensions.
* *
* @since 8.2 * @since 8.2
*/ */
@ -1202,7 +1310,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
@Override @Override
public Element serializeAttributes(Element parentElement) { public Element serializeAttributes(Element parentElement) {
Element elementProvider = super.serializeAttributes(parentElement); Element elementProvider = super.serializeAttributes(parentElement);
elementProvider.setAttribute(ATTR_KEEP_RELATIVE_PATHS, Boolean.toString( ! isResolvingPaths )); elementProvider.setAttribute(ATTR_KEEP_RELATIVE_PATHS, Boolean.toString(!isResolvingPaths));
return elementProvider; return elementProvider;
} }
@ -1210,9 +1318,10 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
public void loadAttributes(Element providerNode) { public void loadAttributes(Element providerNode) {
super.loadAttributes(providerNode); super.loadAttributes(providerNode);
String expandRelativePathsValue = XmlUtil.determineAttributeValue(providerNode, ATTR_KEEP_RELATIVE_PATHS); String expandRelativePathsValue = XmlUtil.determineAttributeValue(providerNode,
if (expandRelativePathsValue!=null) ATTR_KEEP_RELATIVE_PATHS);
isResolvingPaths = ! Boolean.parseBoolean(expandRelativePathsValue); if (expandRelativePathsValue != null)
isResolvingPaths = !Boolean.parseBoolean(expandRelativePathsValue);
} }
@Override @Override

View file

@ -59,288 +59,4 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=120
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

View file

@ -1,4 +1,3 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
formatter_settings_version=12 formatter_settings_version=12
internal.default.compliance=user internal.default.compliance=user

View file

@ -14,8 +14,6 @@ package org.eclipse.cdt.core.language.settings.providers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.AbstractExecutableExtensionBase; import org.eclipse.cdt.core.AbstractExecutableExtensionBase;
import org.eclipse.cdt.core.settings.model.CIncludeFileEntry; import org.eclipse.cdt.core.settings.model.CIncludeFileEntry;
import org.eclipse.cdt.core.settings.model.CIncludePathEntry; import org.eclipse.cdt.core.settings.model.CIncludePathEntry;
@ -31,12 +29,18 @@ import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSetting
import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider; import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider;
import org.eclipse.cdt.internal.core.settings.model.CConfigurationDescription; import org.eclipse.cdt.internal.core.settings.model.CConfigurationDescription;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import junit.framework.TestSuite;
/** /**
* Test cases testing {@link LanguageSettingsManager} utility methods. * Test cases testing {@link LanguageSettingsManager} utility methods.
@ -62,48 +66,85 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
/** /**
* Mock configuration description. * Mock configuration description.
*/ */
class MockConfigurationDescription extends CModelMock.DummyCConfigurationDescription implements ILanguageSettingsProvidersKeeper { class MockConfigurationDescription extends CModelMock.DummyCConfigurationDescription
implements ILanguageSettingsProvidersKeeper {
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
String[] defaultProvidersIds = null; String[] defaultProvidersIds = null;
public MockConfigurationDescription(String id) { public MockConfigurationDescription(String id) {
super(id); super(id);
} }
@Override @Override
public void setLanguageSettingProviders(List<? extends ILanguageSettingsProvider> providers) { public void setLanguageSettingProviders(List<? extends ILanguageSettingsProvider> providers) {
this.providers = new ArrayList<ILanguageSettingsProvider>(providers); this.providers = new ArrayList<ILanguageSettingsProvider>(providers);
} }
@Override @Override
public List<ILanguageSettingsProvider> getLanguageSettingProviders() { public List<ILanguageSettingsProvider> getLanguageSettingProviders() {
return providers; return providers;
} }
@Override @Override
public void setDefaultLanguageSettingsProvidersIds(String[] ids) { public void setDefaultLanguageSettingsProvidersIds(String[] ids) {
defaultProvidersIds = ids; defaultProvidersIds = ids;
} }
@Override @Override
public String[] getDefaultLanguageSettingsProvidersIds() { public String[] getDefaultLanguageSettingsProvidersIds() {
return defaultProvidersIds; return defaultProvidersIds;
} }
} }
private class MockBuildConfiguration implements IBuildConfiguration {
private final MockConfigurationDescription cfgDesc;
public MockBuildConfiguration(MockConfigurationDescription cfgDesc) {
this.cfgDesc = cfgDesc;
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter.isInstance(cfgDesc)) {
return (T) cfgDesc;
}
return null;
}
@Override
public IProject getProject() {
return null;
}
@Override
public String getName() {
return cfgDesc.getId();
}
}
/** /**
* Mock language sttings provider. * Mock language sttings provider.
*/ */
private class MockProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { private class MockProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider {
private List<ICLanguageSettingEntry> entries; private List<ICLanguageSettingEntry> entries;
public MockProvider(String id, String name, List<ICLanguageSettingEntry> entries) { public MockProvider(String id, String name, List<ICLanguageSettingEntry> entries) {
super(id, name); super(id, name);
this.entries = entries; this.entries = entries;
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
return entries; return entries;
} }
} }
/** /**
* Constructor. * Constructor.
* @param name - name of the test. *
* @param name
* - name of the test.
*/ */
public LanguageSettingsManagerTests(String name) { public LanguageSettingsManagerTests(String name) {
super(name); super(name);
@ -113,6 +154,18 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
Platform.getAdapterManager().registerAdapters(new IAdapterFactory() {
@Override
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
MockConfigurationDescription cfgDesc = (MockConfigurationDescription) adaptableObject;
return (T) new MockBuildConfiguration(cfgDesc);
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { IBuildConfiguration.class };
}
}, MockConfigurationDescription.class);
} }
@Override @Override
@ -131,7 +184,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
/** /**
* main function of the class. * main function of the class.
* *
* @param args - arguments * @param args
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -174,7 +228,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// Create model project and accompanied descriptions // Create model project and accompanied descriptions
String projectName = getName(); String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, true);
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
@ -202,6 +257,9 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
public void testRudeProviders() throws Exception { public void testRudeProviders() throws Exception {
// mock configuration description // mock configuration description
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// set impolite provider returning null by getSettingEntries() // set impolite provider returning null by getSettingEntries()
ILanguageSettingsProvider providerNull = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null); ILanguageSettingsProvider providerNull = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null);
{ {
@ -212,25 +270,25 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// use provider returning null, no exception should be recorded // use provider returning null, no exception should be recorded
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(providerNull,
.getSettingEntriesUpResourceTree(providerNull, cfgDescription, FILE_0, LANG_ID); config, FILE_0, LANG_ID);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, 0); FILE_0, LANG_ID, 0);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
// set impolite provider returning null in getSettingEntries() array // set impolite provider returning null in getSettingEntries() array
ILanguageSettingsProvider providerNull_2 = new MockProvider(PROVIDER_2, PROVIDER_NAME_2, ILanguageSettingsProvider providerNull_2 = new MockProvider(PROVIDER_2, PROVIDER_NAME_2,
new ArrayList<ICLanguageSettingEntry>() { new ArrayList<ICLanguageSettingEntry>() {
{ // init via static initializer { // init via static initializer
add(null); add(null);
} }
}); });
{ {
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(providerNull); providers.add(providerNull);
@ -240,13 +298,13 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// use provider returning null as item in array // use provider returning null as item in array
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager
.getSettingEntriesUpResourceTree(providerNull_2, cfgDescription, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(providerNull_2, config, FILE_0, LANG_ID);
assertNotNull(actual); assertNotNull(actual);
assertEquals(1, actual.size()); assertEquals(1, actual.size());
} }
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, 0); FILE_0, LANG_ID, 0);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
@ -257,7 +315,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
ILanguageSettingsProvider providerNPE = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) { ILanguageSettingsProvider providerNPE = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
throw new NullPointerException("Can you handle me?"); throw new NullPointerException("Can you handle me?");
} }
}; };
@ -277,16 +336,20 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testProvider_Basic() throws Exception { public void testProvider_Basic() throws Exception {
final MockConfigurationDescription modelCfgDescription = new MockConfigurationDescription(CFG_ID); final MockConfigurationDescription modelCfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration modelConfig = Adapters.adapt(modelCfgDescription, IBuildConfiguration.class);
assertNotNull(modelConfig);
final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
// define provider returning entries when configuration id matches and null otherwise // define provider returning entries when configuration id matches and
ILanguageSettingsProvider providerYes = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) { // null otherwise
ILanguageSettingsProvider providerYes = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (cfgDescription.getId().equals(modelCfgDescription.getId())) { String languageId) {
if (config.getName().equals(modelCfgDescription.getId())) {
return entries; return entries;
} }
return null; return null;
@ -294,11 +357,13 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
}; };
providers.add(providerYes); providers.add(providerYes);
// define provider returning entries when configuration id does NOT match and null otherwise // define provider returning entries when configuration id does NOT
ILanguageSettingsProvider providerNo = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) { // match and null otherwise
ILanguageSettingsProvider providerNo = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (cfgDescription!= null && !cfgDescription.getId().equals(modelCfgDescription.getId())) { String languageId) {
if (config != null && !config.getName().equals(modelCfgDescription.getId())) {
return entries; return entries;
} }
return null; return null;
@ -310,16 +375,16 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve the entries with provider returning the given list // retrieve the entries with provider returning the given list
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(providerYes,
.getSettingEntriesUpResourceTree(providerYes, modelCfgDescription, FILE_0, LANG_ID); modelConfig, FILE_0, LANG_ID);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
} }
{ {
// retrieve the entries with provider returning empty list // retrieve the entries with provider returning empty list
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(providerNo,
.getSettingEntriesUpResourceTree(providerNo, modelCfgDescription, FILE_0, LANG_ID); modelConfig, FILE_0, LANG_ID);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
} }
@ -329,6 +394,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testProvider_Regular() throws Exception { public void testProvider_Regular() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// create couple of providers // create couple of providers
List<ICLanguageSettingEntry> entries1 = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries1 = new ArrayList<ICLanguageSettingEntry>();
@ -349,28 +416,28 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve the entries for provider-1 // retrieve the entries for provider-1
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider1,
.getSettingEntriesUpResourceTree(provider1, cfgDescription, FILE_0, LANG_ID); config, FILE_0, LANG_ID);
assertNotSame(entries1, actual); assertNotSame(entries1, actual);
ICLanguageSettingEntry[] entriesArray = entries1.toArray(new ICLanguageSettingEntry[0]); ICLanguageSettingEntry[] entriesArray = entries1.toArray(new ICLanguageSettingEntry[0]);
ICLanguageSettingEntry[] actualArray = actual.toArray(new ICLanguageSettingEntry[0]); ICLanguageSettingEntry[] actualArray = actual.toArray(new ICLanguageSettingEntry[0]);
for (int i=0;i<entries1.size();i++) { for (int i = 0; i < entries1.size(); i++) {
assertEquals("i="+i, entriesArray[i], actualArray[i]); assertEquals("i=" + i, entriesArray[i], actualArray[i]);
} }
assertEquals(entries1.size(), actual.size()); assertEquals(entries1.size(), actual.size());
} }
{ {
// retrieve the entries for provider-2 // retrieve the entries for provider-2
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider2,
.getSettingEntriesUpResourceTree(provider2, cfgDescription, FILE_0, LANG_ID); config, FILE_0, LANG_ID);
assertNotSame(entries2, actual); assertNotSame(entries2, actual);
ICLanguageSettingEntry[] entriesArray = entries2.toArray(new ICLanguageSettingEntry[0]); ICLanguageSettingEntry[] entriesArray = entries2.toArray(new ICLanguageSettingEntry[0]);
ICLanguageSettingEntry[] actualArray = actual.toArray(new ICLanguageSettingEntry[0]); ICLanguageSettingEntry[] actualArray = actual.toArray(new ICLanguageSettingEntry[0]);
for (int i=0;i<entries2.size();i++) { for (int i = 0; i < entries2.size(); i++) {
assertEquals("i="+i, entriesArray[i], actualArray[i]); assertEquals("i=" + i, entriesArray[i], actualArray[i]);
} }
assertEquals(entries2.size(), actual.size()); assertEquals(entries2.size(), actual.size());
} }
@ -383,11 +450,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// Create model project and accompanied descriptions // Create model project and accompanied descriptions
String projectName = getName(); String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, true);
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
assertTrue(cfgDescriptionWritable instanceof CConfigurationDescription); assertTrue(cfgDescriptionWritable instanceof CConfigurationDescription);
IBuildConfiguration configWritable = Adapters.adapt(cfgDescriptionWritable, IBuildConfiguration.class);
assertNotNull(configWritable);
final IFolder parentFolder = ResourceHelper.createFolder(project, "/ParentFolder/"); final IFolder parentFolder = ResourceHelper.createFolder(project, "/ParentFolder/");
assertNotNull(parentFolder); assertNotNull(parentFolder);
@ -398,13 +468,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
ILanguageSettingsProvider provider = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) { ILanguageSettingsProvider provider = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (rc!=null && rc.equals(parentFolder)) { String languageId) {
if (rc != null && rc.equals(parentFolder)) {
return entries; return entries;
} }
if (rc!=null && rc.equals(emptySettingsPath)) { if (rc != null && rc.equals(emptySettingsPath)) {
return new ArrayList<ICLanguageSettingEntry>(0); return new ArrayList<ICLanguageSettingEntry>(0);
} }
return null; return null;
@ -417,25 +488,26 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve entries for a derived resource (in a subfolder) // retrieve entries for a derived resource (in a subfolder)
IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource"); IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource");
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider,
.getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, derived, LANG_ID); configWritable, derived, LANG_ID);
// taken from parent folder // taken from parent folder
assertEquals(entries.get(0),actual.get(0)); assertEquals(entries.get(0), actual.get(0));
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
} }
{ {
// retrieve entries for not related resource // retrieve entries for not related resource
IFile notRelated = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path("/AnotherFolder/Subfolder/resource")); IFile notRelated = ResourcesPlugin.getWorkspace().getRoot()
List<ICLanguageSettingEntry> actual = LanguageSettingsManager .getFile(new Path("/AnotherFolder/Subfolder/resource"));
.getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, notRelated, LANG_ID); List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider,
configWritable, notRelated, LANG_ID);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
{ {
// test distinction between no settings and empty settings // test distinction between no settings and empty settings
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider,
.getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, emptySettingsPath, LANG_ID); configWritable, emptySettingsPath, LANG_ID);
// NOT taken from parent folder // NOT taken from parent folder
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
@ -448,11 +520,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// Create model project and accompanied descriptions // Create model project and accompanied descriptions
String projectName = getName(); String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, true);
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
assertTrue(cfgDescriptionWritable instanceof CConfigurationDescription); assertTrue(cfgDescriptionWritable instanceof CConfigurationDescription);
IBuildConfiguration configWritable = Adapters.adapt(cfgDescriptionWritable, IBuildConfiguration.class);
assertNotNull(configWritable);
final IFolder parentFolder = ResourceHelper.createFolder(project, "/ParentFolder/"); final IFolder parentFolder = ResourceHelper.createFolder(project, "/ParentFolder/");
assertNotNull(parentFolder); assertNotNull(parentFolder);
@ -463,10 +538,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); final List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
ILanguageSettingsProvider provider = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) { ILanguageSettingsProvider provider = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (cfgDescription==null && rc==null) { String languageId) {
if (config == null && rc == null) {
return entries; return entries;
} }
return null; return null;
@ -479,10 +555,10 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve entries for a resource // retrieve entries for a resource
IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource"); IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource");
List<ICLanguageSettingEntry> actual = LanguageSettingsManager List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider,
.getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, derived, LANG_ID); configWritable, derived, LANG_ID);
// default entries given // default entries given
assertEquals(entries.get(0),actual.get(0)); assertEquals(entries.get(0), actual.get(0));
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
} }
} }
@ -492,13 +568,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_Regular() throws Exception { public void testEntriesByKind_Regular() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// contribute the entries // contribute the entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
entries.add(new CMacroEntry("MACRO0", "value0",0)); entries.add(new CMacroEntry("MACRO0", "value0", 0));
entries.add(new CIncludePathEntry("path1", 0)); entries.add(new CIncludePathEntry("path1", 0));
entries.add(new CMacroEntry("MACRO1", "value1",0)); entries.add(new CMacroEntry("MACRO1", "value1", 0));
entries.add(new CIncludePathEntry("path2", 0)); entries.add(new CIncludePathEntry("path2", 0));
ILanguageSettingsProvider provider0 = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, entries); ILanguageSettingsProvider provider0 = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, entries);
@ -507,17 +585,17 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(new CIncludePathEntry("path0", 0),includes.get(0)); assertEquals(new CIncludePathEntry("path0", 0), includes.get(0));
assertEquals(new CIncludePathEntry("path1", 0),includes.get(1)); assertEquals(new CIncludePathEntry("path1", 0), includes.get(1));
assertEquals(new CIncludePathEntry("path2", 0),includes.get(2)); assertEquals(new CIncludePathEntry("path2", 0), includes.get(2));
assertEquals(3, includes.size()); assertEquals(3, includes.size());
List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.MACRO); FILE_0, LANG_ID, ICSettingEntry.MACRO);
assertEquals(new CMacroEntry("MACRO0", "value0",0), macros.get(0)); assertEquals(new CMacroEntry("MACRO0", "value0", 0), macros.get(0));
assertEquals(new CMacroEntry("MACRO1", "value1",0), macros.get(1)); assertEquals(new CMacroEntry("MACRO1", "value1", 0), macros.get(1));
assertEquals(2, macros.size()); assertEquals(2, macros.size());
} }
@ -526,6 +604,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_ConflictingEntries() throws Exception { public void testEntriesByKind_ConflictingEntries() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// contribute the entries // contribute the entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -539,9 +619,10 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind, only first entry should be returned // retrieve entries by kind, only first entry should be returned
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(1, includes.size()); assertEquals(1, includes.size());
assertEquals(entries.get(0),includes.get(0)); assertEquals(entries.get(0), includes.get(0));
} }
/** /**
@ -549,6 +630,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_Undefined() throws Exception { public void testEntriesByKind_Undefined() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// contribute the entries // contribute the entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -561,8 +644,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind, no entries should be returned // retrieve entries by kind, no entries should be returned
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(0, includes.size()); assertEquals(0, includes.size());
} }
@ -571,6 +654,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_LocalAndSystem() throws Exception { public void testEntriesByKind_LocalAndSystem() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// contribute the entries // contribute the entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -587,7 +672,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve local entries // retrieve local entries
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
.getLocalSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getLocalSettingEntriesByKind(config, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(localIncludeEntry, includes.get(0)); assertEquals(localIncludeEntry, includes.get(0));
assertEquals(1, includes.size()); assertEquals(1, includes.size());
} }
@ -595,15 +680,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve system entries // retrieve system entries
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
.getSystemSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSystemSettingEntriesByKind(config, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(systemIncludeEntry, includes.get(0)); assertEquals(systemIncludeEntry, includes.get(0));
assertEquals(1, includes.size()); assertEquals(1, includes.size());
} }
{ {
// retrieve both local and system // retrieve both local and system
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(entries.get(0), includes.get(0)); assertEquals(entries.get(0), includes.get(0));
assertEquals(entries.get(1), includes.get(1)); assertEquals(entries.get(1), includes.get(1));
assertEquals(2, includes.size()); assertEquals(2, includes.size());
@ -615,6 +700,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_ConflictingProviders() throws Exception { public void testEntriesByKind_ConflictingProviders() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// contribute the entries // contribute the entries
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -639,15 +726,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
// path0 is taken from higher priority provider // path0 is taken from higher priority provider
assertEquals(entriesHigh.get(0),includes.get(0)); assertEquals(entriesHigh.get(0), includes.get(0));
// path1 disablement by lower priority provider is ignored // path1 disablement by lower priority provider is ignored
assertEquals(entriesHigh.get(1),includes.get(1)); assertEquals(entriesHigh.get(1), includes.get(1));
// path2 is removed because of DISABLED flag of high priority provider // path2 is removed because of DISABLED flag of high priority provider
// path3 gets there from low priority provider // path3 gets there from low priority provider
assertEquals(entriesLow.get(3),includes.get(2)); assertEquals(entriesLow.get(3), includes.get(2));
assertEquals(3, includes.size()); assertEquals(3, includes.size());
} }
@ -656,13 +743,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testEntriesByKind_CompositeKind() throws Exception { public void testEntriesByKind_CompositeKind() throws Exception {
MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID); MockConfigurationDescription cfgDescription = new MockConfigurationDescription(CFG_ID);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
// contribute the entries // contribute the entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
entries.add(new CMacroEntry("MACRO0", "value0",0)); entries.add(new CMacroEntry("MACRO0", "value0", 0));
entries.add(new CIncludePathEntry("path1", 0)); entries.add(new CIncludePathEntry("path1", 0));
entries.add(new CMacroEntry("MACRO1", "value1",0)); entries.add(new CMacroEntry("MACRO1", "value1", 0));
entries.add(new CIncludePathEntry("path2", 0)); entries.add(new CIncludePathEntry("path2", 0));
entries.add(new CIncludeFileEntry("include-path-file", 0)); entries.add(new CIncludeFileEntry("include-path-file", 0));
@ -673,12 +761,12 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> result = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> result = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config,
.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH | ICSettingEntry.MACRO); FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH | ICSettingEntry.MACRO);
assertEquals(new CIncludePathEntry("path0", 0), result.get(0)); assertEquals(new CIncludePathEntry("path0", 0), result.get(0));
assertEquals(new CMacroEntry("MACRO0", "value0",0), result.get(1)); assertEquals(new CMacroEntry("MACRO0", "value0", 0), result.get(1));
assertEquals(new CIncludePathEntry("path1", 0), result.get(2)); assertEquals(new CIncludePathEntry("path1", 0), result.get(2));
assertEquals(new CMacroEntry("MACRO1", "value1",0), result.get(3)); assertEquals(new CMacroEntry("MACRO1", "value1", 0), result.get(3));
assertEquals(new CIncludePathEntry("path2", 0), result.get(4)); assertEquals(new CIncludePathEntry("path2", 0), result.get(4));
assertEquals(5, result.size()); assertEquals(5, result.size());
} }
@ -690,19 +778,22 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// Create model project and accompanied descriptions // Create model project and accompanied descriptions
String projectName = getName(); String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true); ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, true);
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
assertTrue(cfgDescription instanceof CConfigurationDescription); assertTrue(cfgDescription instanceof CConfigurationDescription);
// Select a sample workspace provider for the test // Select a sample workspace provider for the test
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID);
assertNotNull(workspaceProvider); assertNotNull(workspaceProvider);
{ {
// ensure no test provider is set yet but default providers // ensure no test provider is set yet but default providers
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(0).getId()); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(0).getId());
assertEquals(ReferencedProjectsLanguageSettingsProvider.ID, providers.get(1).getId()); assertEquals(ReferencedProjectsLanguageSettingsProvider.ID, providers.get(1).getId());
assertEquals(ScannerDiscoveryLegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(2).getId()); assertEquals(ScannerDiscoveryLegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(2).getId());
@ -716,7 +807,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
} }
{ {
// check that test provider got there // check that test provider got there
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
assertEquals(workspaceProvider, providers.get(0)); assertEquals(workspaceProvider, providers.get(0));
} }
@ -730,12 +822,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// check that test provider got loaded // check that test provider got loaded
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, false);
ICConfigurationDescription[] loadedCfgDescriptions = prjDescription.getConfigurations(); ICConfigurationDescription[] loadedCfgDescriptions = prjDescription.getConfigurations();
ICConfigurationDescription loadedCfgDescription = loadedCfgDescriptions[0]; ICConfigurationDescription loadedCfgDescription = loadedCfgDescriptions[0];
assertTrue(cfgDescription instanceof CConfigurationDescription); assertTrue(cfgDescription instanceof CConfigurationDescription);
List<ILanguageSettingsProvider> loadedProviders = ((ILanguageSettingsProvidersKeeper) loadedCfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> loadedProviders = ((ILanguageSettingsProvidersKeeper) loadedCfgDescription)
.getLanguageSettingProviders();
assertTrue(LanguageSettingsManager.isWorkspaceProvider(loadedProviders.get(0))); assertTrue(LanguageSettingsManager.isWorkspaceProvider(loadedProviders.get(0)));
} }
@ -746,7 +840,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testWorkspaceProvider_Basic() throws Exception { public void testWorkspaceProvider_Basic() throws Exception {
// get workspace provider // get workspace provider
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, provider.getId()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, provider.getId());
assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, provider.getName()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, provider.getName());
@ -760,9 +855,10 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// make sure entries are the same // make sure entries are the same
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null);
assertEquals(1, entries.size()); // defined in the extension assertEquals(1, entries.size()); // defined in the extension
List<ICLanguageSettingEntry> rawEntries = rawProvider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> rawEntries = rawProvider.getSettingEntries((IBuildConfiguration) null, null,
null);
assertEquals(entries, rawEntries); assertEquals(entries, rawEntries);
} }
@ -771,10 +867,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
List<ICLanguageSettingEntry> newEntries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> newEntries = new ArrayList<ICLanguageSettingEntry>();
newEntries.add(new CIncludePathEntry("path0", 0)); newEntries.add(new CIncludePathEntry("path0", 0));
newEntries.add(new CIncludePathEntry("path1", 0)); newEntries.add(new CIncludePathEntry("path1", 0));
((LanguageSettingsSerializableProvider)rawProvider).setSettingEntries(null, null, null, newEntries); ((LanguageSettingsSerializableProvider) rawProvider).setSettingEntries(null, null, null, newEntries);
// check that the workspace provider gets them too // check that the workspace provider gets them too
List<ICLanguageSettingEntry> newRawEntries = rawProvider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> newRawEntries = rawProvider.getSettingEntries((IBuildConfiguration) null, null,
null);
assertEquals(newEntries, newRawEntries); assertEquals(newEntries, newRawEntries);
assertEquals(2, newEntries.size()); assertEquals(2, newEntries.size());
} }
@ -784,8 +881,10 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
* Test workspace providers equality. * Test workspace providers equality.
*/ */
public void testWorkspaceProvider_Equals() throws Exception { public void testWorkspaceProvider_Equals() throws Exception {
ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider providerA = LanguageSettingsManager
ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); .getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
ILanguageSettingsProvider providerB = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
assertEquals(providerA, providerB); assertEquals(providerA, providerB);
} }
@ -794,10 +893,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testWorkspaceProvider_ReplaceRawProvider() throws Exception { public void testWorkspaceProvider_ReplaceRawProvider() throws Exception {
// get sample workspace provider // get sample workspace provider
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
{ {
// check on its entries (1 predefined entry via extension point) // check on its entries (1 predefined entry via extension point)
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null);
assertEquals(1, entries.size()); // defined in the extension assertEquals(1, entries.size()); // defined in the extension
} }
@ -810,7 +910,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// replace raw provider // replace raw provider
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
LanguageSettingsSerializableProvider newRawProvider = new LanguageSettingsSerializableProvider(EXTENSION_EDITABLE_PROVIDER_ID, PROVIDER_NAME_0); LanguageSettingsSerializableProvider newRawProvider = new LanguageSettingsSerializableProvider(
EXTENSION_EDITABLE_PROVIDER_ID, PROVIDER_NAME_0);
newRawProvider.setSettingEntries(null, null, null, newEntries); newRawProvider.setSettingEntries(null, null, null, newEntries);
providers.add(newRawProvider); providers.add(newRawProvider);
LanguageSettingsManager.setWorkspaceProviders(providers); LanguageSettingsManager.setWorkspaceProviders(providers);
@ -818,7 +919,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// check that provider provides the new entries // check that provider provides the new entries
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null);
assertEquals(newEntries.size(), entries.size()); assertEquals(newEntries.size(), entries.size());
assertEquals(newEntries, entries); assertEquals(newEntries, entries);
} }
@ -829,7 +930,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testWorkspaceProvider_ReplaceWithWorkspaceProvider() throws Exception { public void testWorkspaceProvider_ReplaceWithWorkspaceProvider() throws Exception {
// get sample workspace provider // get sample workspace provider
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertNotSame(provider, rawProvider); assertNotSame(provider, rawProvider);

View file

@ -18,8 +18,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CIncludePathEntry; import org.eclipse.cdt.core.settings.model.CIncludePathEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
@ -31,16 +29,22 @@ import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider; import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import junit.framework.TestSuite;
/** /**
* Test cases testing ReferencedProjectsLanguageSettingsProvider functionality * Test cases testing ReferencedProjectsLanguageSettingsProvider functionality
*/ */
public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCase { public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCase {
/** /**
* Constructor. * Constructor.
* @param name - name of the test. *
* @param name
* - name of the test.
*/ */
public LanguageSettingsProviderReferencedProjectsTests(String name) { public LanguageSettingsProviderReferencedProjectsTests(String name) {
super(name); super(name);
@ -67,7 +71,8 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
/** /**
* main function of the class. * main function of the class.
* *
* @param args - arguments * @param args
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -103,8 +108,13 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
ICConfigurationDescription[] cfgDescriptions = projectDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = projectDescription.getConfigurations();
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
final ICConfigurationDescription cfgDescriptionReferenced = getConfigurationDescriptions(projectReferenced)[0]; final ICConfigurationDescription cfgDescriptionReferenced = getConfigurationDescriptions(
cfgDescription.setReferenceInfo(new HashMap<String, String>() {{ put(projectReferenced.getName(), cfgDescriptionReferenced.getId()); }}); projectReferenced)[0];
cfgDescription.setReferenceInfo(new HashMap<String, String>() {
{
put(projectReferenced.getName(), cfgDescriptionReferenced.getId());
}
});
coreModel.setProjectDescription(project, projectDescription); coreModel.setProjectDescription(project, projectDescription);
} }
@ -112,7 +122,7 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
// doublecheck that it's set as expected // doublecheck that it's set as expected
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
Map<String,String> refs = cfgDescription.getReferenceInfo(); Map<String, String> refs = cfgDescription.getReferenceInfo();
assertEquals(1, refs.size()); assertEquals(1, refs.size());
Set<String> referencedProjectsNames = new LinkedHashSet<String>(refs.keySet()); Set<String> referencedProjectsNames = new LinkedHashSet<String>(refs.keySet());
assertEquals(projectReferenced.getName(), referencedProjectsNames.toArray()[0]); assertEquals(projectReferenced.getName(), referencedProjectsNames.toArray()[0]);
@ -124,9 +134,10 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
* Test that null arguments don't crash the provider. * Test that null arguments don't crash the provider.
*/ */
public void testNulls() throws Exception { public void testNulls() throws Exception {
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID); ILanguageSettingsProvider provider = LanguageSettingsManager
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(provider); assertNotNull(provider);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null);
assertEquals(null, entries); assertEquals(null, entries);
} }
@ -137,34 +148,41 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
// Create model project and accompanied descriptions // Create model project and accompanied descriptions
String projectName = getName(); String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
IProject nonReferencedProject = ResourceHelper.createCDTProjectWithConfig(projectName+"-non-referenced"); IProject nonReferencedProject = ResourceHelper.createCDTProjectWithConfig(projectName + "-non-referenced");
IProject referencedProject = ResourceHelper.createCDTProjectWithConfig(projectName+"-referenced"); IProject referencedProject = ResourceHelper.createCDTProjectWithConfig(projectName + "-referenced");
setReference(project, referencedProject); setReference(project, referencedProject);
// get cfgDescription // get cfgDescription
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
{ {
// double-check that provider for referenced projects is set in the configuration // double-check that provider for referenced projects is set in the configuration
ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID); ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(refProjectsProvider); assertNotNull(refProjectsProvider);
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
assertTrue(providers.contains(refProjectsProvider)); assertTrue(providers.contains(refProjectsProvider));
} }
// Check that no setting entries are set initially // Check that no setting entries are set initially
{ {
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(config, project,
null, ICSettingEntry.ALL);
assertEquals(0, entries.size()); assertEquals(0, entries.size());
} }
// Add an entry into a non-referenced project // Add an entry into a non-referenced project
CIncludePathEntry nonRefEntry = CDataUtil.createCIncludePathEntry("non-referenced-exported", ICSettingEntry.EXPORTED); CIncludePathEntry nonRefEntry = CDataUtil.createCIncludePathEntry("non-referenced-exported",
ICSettingEntry.EXPORTED);
{ {
ICConfigurationDescription[] nonRefCfgDescriptions = getConfigurationDescriptions(nonReferencedProject); ICConfigurationDescription[] nonRefCfgDescriptions = getConfigurationDescriptions(nonReferencedProject);
ICConfigurationDescription nonRefCfgDescription = nonRefCfgDescriptions[0]; ICConfigurationDescription nonRefCfgDescription = nonRefCfgDescriptions[0];
List<ILanguageSettingsProvider> providersNonRef = ((ILanguageSettingsProvidersKeeper) nonRefCfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providersNonRef = ((ILanguageSettingsProvidersKeeper) nonRefCfgDescription)
.getLanguageSettingProviders();
// get user provider which is the first one // get user provider which is the first one
ILanguageSettingsProvider userProviderNonRef = providersNonRef.get(0); ILanguageSettingsProvider userProviderNonRef = providersNonRef.get(0);
assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderNonRef.getId()); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderNonRef.getId());
@ -176,7 +194,8 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
} }
// Confirm that that does not add entries to the main project // Confirm that that does not add entries to the main project
{ {
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(config, project,
null, ICSettingEntry.ALL);
assertEquals(0, entries.size()); assertEquals(0, entries.size());
} }
@ -185,7 +204,10 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
{ {
ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(referencedProject); ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(referencedProject);
ICConfigurationDescription refCfgDescription = refCfgDescriptions[0]; ICConfigurationDescription refCfgDescription = refCfgDescriptions[0];
List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders(); IBuildConfiguration refConfig = Adapters.adapt(refCfgDescription, IBuildConfiguration.class);
assertNotNull(refConfig);
List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription)
.getLanguageSettingProviders();
// get user provider which is the first one // get user provider which is the first one
ILanguageSettingsProvider userProviderRef = providersRef.get(0); ILanguageSettingsProvider userProviderRef = providersRef.get(0);
assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId()); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId());
@ -196,12 +218,15 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
entries.add(refEntry); entries.add(refEntry);
entries.add(refEntryNotExported); entries.add(refEntryNotExported);
((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries);
List<ICLanguageSettingEntry> entriesActual = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, project, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entriesActual = LanguageSettingsManager.getSettingEntriesByKind(refConfig,
project, null, ICSettingEntry.ALL);
assertEquals(entries, entriesActual); assertEquals(entries, entriesActual);
} }
// Check that the new entries from referenced project made it to the main project // Check that the new entries from referenced project made it to the
// main project
{ {
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(config, project,
null, ICSettingEntry.ALL);
assertEquals(CDataUtil.createCIncludePathEntry(refEntry.getName(), 0), entries.get(0)); assertEquals(CDataUtil.createCIncludePathEntry(refEntry.getName(), 0), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -222,30 +247,41 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
// get cfgDescriptions to work with // get cfgDescriptions to work with
ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA); ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA);
ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0]; ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0];
IBuildConfiguration configA = Adapters.adapt(cfgDescriptionA, IBuildConfiguration.class);
assertNotNull(configA);
ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB); ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB);
ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0]; ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0];
IBuildConfiguration configB = Adapters.adapt(cfgDescriptionB, IBuildConfiguration.class);
assertNotNull(configB);
// double-check that provider for referenced projects is set in the configurations // double-check that provider for referenced projects is set in the configurations
ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID); ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(refProjectsProvider); assertNotNull(refProjectsProvider);
List<ILanguageSettingsProvider> providersA = ((ILanguageSettingsProvidersKeeper) cfgDescriptionA).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providersA = ((ILanguageSettingsProvidersKeeper) cfgDescriptionA)
.getLanguageSettingProviders();
assertTrue(providersA.contains(refProjectsProvider)); assertTrue(providersA.contains(refProjectsProvider));
List<ILanguageSettingsProvider> providersB = ((ILanguageSettingsProvidersKeeper) cfgDescriptionB).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providersB = ((ILanguageSettingsProvidersKeeper) cfgDescriptionB)
.getLanguageSettingProviders();
assertTrue(providersB.contains(refProjectsProvider)); assertTrue(providersB.contains(refProjectsProvider));
// Check that no setting entries are set initially // Check that no setting entries are set initially
List<ICLanguageSettingEntry> entriesA = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectA, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entriesA = LanguageSettingsManager.getSettingEntriesByKind(configA, projectA,
null, ICSettingEntry.ALL);
assertEquals(0, entriesA.size()); assertEquals(0, entriesA.size());
List<ICLanguageSettingEntry> entriesB = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectB, null, ICSettingEntry.ALL); List<ICLanguageSettingEntry> entriesB = LanguageSettingsManager.getSettingEntriesByKind(configB, projectB,
null, ICSettingEntry.ALL);
assertEquals(0, entriesB.size()); assertEquals(0, entriesB.size());
} }
CIncludePathEntry entryExportedA = CDataUtil.createCIncludePathEntry("referenced-exported-A", ICSettingEntry.EXPORTED); CIncludePathEntry entryExportedA = CDataUtil.createCIncludePathEntry("referenced-exported-A",
ICSettingEntry.EXPORTED);
CIncludePathEntry entryNotExportedA = CDataUtil.createCIncludePathEntry("referenced-not-exported-A", 0); CIncludePathEntry entryNotExportedA = CDataUtil.createCIncludePathEntry("referenced-not-exported-A", 0);
// Add entries into a project A // Add entries into a project A
{ {
ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(projectA); ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(projectA);
ICConfigurationDescription refCfgDescription = refCfgDescriptions[0]; ICConfigurationDescription refCfgDescription = refCfgDescriptions[0];
List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription)
.getLanguageSettingProviders();
// get user provider which is the first one // get user provider which is the first one
ILanguageSettingsProvider userProviderRef = providersRef.get(0); ILanguageSettingsProvider userProviderRef = providersRef.get(0);
assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId()); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId());
@ -257,13 +293,15 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries);
} }
CIncludePathEntry entryExportedB = CDataUtil.createCIncludePathEntry("referenced-exported-B", ICSettingEntry.EXPORTED); CIncludePathEntry entryExportedB = CDataUtil.createCIncludePathEntry("referenced-exported-B",
ICSettingEntry.EXPORTED);
CIncludePathEntry entryNotExportedB = CDataUtil.createCIncludePathEntry("referenced-not-exported-B", 0); CIncludePathEntry entryNotExportedB = CDataUtil.createCIncludePathEntry("referenced-not-exported-B", 0);
// Add entries into a project B // Add entries into a project B
{ {
ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(projectB); ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(projectB);
ICConfigurationDescription refCfgDescription = refCfgDescriptions[0]; ICConfigurationDescription refCfgDescription = refCfgDescriptions[0];
List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription)
.getLanguageSettingProviders();
// get user provider which is the first one // get user provider which is the first one
ILanguageSettingsProvider userProviderRef = providersRef.get(0); ILanguageSettingsProvider userProviderRef = providersRef.get(0);
assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId()); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId());
@ -279,7 +317,10 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
{ {
ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA); ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA);
ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0]; ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0];
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectA, null, ICSettingEntry.ALL); IBuildConfiguration configA = Adapters.adapt(cfgDescriptionA, IBuildConfiguration.class);
assertNotNull(configA);
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(configA, projectA,
null, ICSettingEntry.ALL);
assertEquals(entryExportedA, entries.get(0)); assertEquals(entryExportedA, entries.get(0));
assertEquals(entryNotExportedA, entries.get(1)); assertEquals(entryNotExportedA, entries.get(1));
assertEquals(CDataUtil.createCIncludePathEntry(entryExportedB.getName(), 0), entries.get(2)); assertEquals(CDataUtil.createCIncludePathEntry(entryExportedB.getName(), 0), entries.get(2));
@ -289,7 +330,9 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
{ {
ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB); ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB);
ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0]; ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0];
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionB, projectB, null, ICSettingEntry.ALL); IBuildConfiguration configB = Adapters.adapt(cfgDescriptionB, IBuildConfiguration.class);
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(configB, projectB,
null, ICSettingEntry.ALL);
assertEquals(entryExportedB, entries.get(0)); assertEquals(entryExportedB, entries.get(0));
assertEquals(entryNotExportedB, entries.get(1)); assertEquals(entryNotExportedB, entries.get(1));
assertEquals(CDataUtil.createCIncludePathEntry(entryExportedA.getName(), 0), entries.get(2)); assertEquals(CDataUtil.createCIncludePathEntry(entryExportedA.getName(), 0), entries.get(2));

View file

@ -15,8 +15,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.cdt.core.model.LanguageManager;
import org.eclipse.cdt.core.parser.ExtendedScannerInfo; import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
@ -34,15 +32,19 @@ import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsScannerInfoProvider; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsScannerInfoProvider;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import junit.framework.TestSuite;
/** /**
* Test cases testing LanguageSettingsProvider functionality * Test cases testing LanguageSettingsProvider functionality
*/ */
@ -65,14 +67,17 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
return entries; return entries;
} }
} }
/** /**
* Constructor. * Constructor.
* @param name - name of the test. *
* @param name
* - name of the test.
*/ */
public LanguageSettingsScannerInfoProviderTests(String name) { public LanguageSettingsScannerInfoProviderTests(String name) {
super(name); super(name);
@ -99,7 +104,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
/** /**
* main function of the class. * main function of the class.
* *
* @param args - arguments * @param args
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -124,7 +130,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
{ {
// triplecheck builderCWD for different project/configuration descriptions // triplecheck builderCWD for different project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -153,7 +160,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
{ {
// Handle prjDescription==null // Handle prjDescription==null
IProject project = FAKE_FILE.getProject(); IProject project = FAKE_FILE.getProject();
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, READ_ONLY);
assertNull(prjDescription); assertNull(prjDescription);
LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider();
@ -171,7 +179,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
IFile file = ResourceHelper.createFile(project, "file"); IFile file = ResourceHelper.createFile(project, "file");
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance()
.getProjectDescription(project, READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -199,7 +208,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
IFile file = ResourceHelper.createFile(project, "file.c"); IFile file = ResourceHelper.createFile(project, "file.c");
// confirm that language==null // confirm that language==null
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -221,7 +231,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
public void testRegular() throws Exception { public void testRegular() throws Exception {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -242,7 +253,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
CIncludePathEntry includePathEntry = new CIncludePathEntry(includeFolder, 0); CIncludePathEntry includePathEntry = new CIncludePathEntry(includeFolder, 0);
CIncludePathEntry includeLocalPathEntry = new CIncludePathEntry(includeLocalFolder, ICSettingEntry.LOCAL); // #include "..." CIncludePathEntry includeLocalPathEntry = new CIncludePathEntry(includeLocalFolder, ICSettingEntry.LOCAL); // #include "..."
CMacroEntry macroEntry = new CMacroEntry("MACRO", "value",0); CMacroEntry macroEntry = new CMacroEntry("MACRO", "value", 0);
CIncludeFileEntry includeFileEntry = new CIncludeFileEntry(includeFile, 0); CIncludeFileEntry includeFileEntry = new CIncludeFileEntry(includeFile, 0);
CMacroFileEntry macroFileEntry = new CMacroFileEntry(macroFile, 0); CMacroFileEntry macroFileEntry = new CMacroFileEntry(macroFile, 0);
@ -293,7 +304,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
public void testLocal() throws Exception { public void testLocal() throws Exception {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -347,7 +359,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
public void testFramework() throws Exception { public void testFramework() throws Exception {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -390,7 +403,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
public void testDuplicate() throws Exception { public void testDuplicate() throws Exception {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -440,7 +454,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
public void testWorkspacePath() throws Exception { public void testWorkspacePath() throws Exception {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -467,9 +482,12 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// contribute the entries // contribute the entries
CIncludePathEntry incWorkspaceEntry_1 = new CIncludePathEntry(incWorkspace_1, 0); CIncludePathEntry incWorkspaceEntry_1 = new CIncludePathEntry(incWorkspace_1, 0);
CIncludePathEntry incWorkspaceEntry_2 = new CIncludePathEntry(incWorkspacePath_2, ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED); CIncludePathEntry incWorkspaceEntry_2 = new CIncludePathEntry(incWorkspacePath_2,
CIncludePathEntry incWorkspaceEntry_3 = new CIncludePathEntry(incWorkspaceRelativePath_3, ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED); ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED);
CIncludePathEntry incWorkspaceEntry_4 = new CIncludePathEntry(incWorkspacePathNoResolved_4, ICSettingEntry.VALUE_WORKSPACE_PATH); CIncludePathEntry incWorkspaceEntry_3 = new CIncludePathEntry(incWorkspaceRelativePath_3,
ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED);
CIncludePathEntry incWorkspaceEntry_4 = new CIncludePathEntry(incWorkspacePathNoResolved_4,
ICSettingEntry.VALUE_WORKSPACE_PATH);
CIncludePathEntry incFilesystemEntry = new CIncludePathEntry(incFilesystem, 0); CIncludePathEntry incFilesystemEntry = new CIncludePathEntry(incFilesystem, 0);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -511,12 +529,13 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// change drive on build working directory // change drive on build working directory
String buildCwdDevice = project.getLocation().getDevice(); String buildCwdDevice = project.getLocation().getDevice();
// // Test manually with a device which is different from project location device (path should exist) // Test manually with a device which is different from project location device (path should exist)
// IPath buildCWD = new Path("D:/build/path"); // IPath buildCWD = new Path("D:/build/path");
// String buildCwdDevice = buildCWD.getDevice(); // String buildCwdDevice = buildCWD.getDevice();
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -560,15 +579,17 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
IProject project = ResourceHelper.createCDTProjectWithConfig(prjName); IProject project = ResourceHelper.createCDTProjectWithConfig(prjName);
String relativePath = "include"; String relativePath = "include";
IFolder buildFolder = ResourceHelper.createFolder(project, "buildDir"); IFolder buildFolder = ResourceHelper.createFolder(project, "buildDir");
IFolder relativeFolder = ResourceHelper.createFolder(project, "buildDir/"+relativePath); IFolder relativeFolder = ResourceHelper.createFolder(project, "buildDir/" + relativePath);
IFolder relativeFolderProjName = ResourceHelper.createFolder(project, "buildDir/"+prjName); IFolder relativeFolderProjName = ResourceHelper.createFolder(project, "buildDir/" + prjName);
String markedResolved = "-MarkedResolved"; String markedResolved = "-MarkedResolved";
IFolder relativeFolderProjNameResolved = ResourceHelper.createFolder(project, "buildDir/" + prjName+markedResolved); IFolder relativeFolderProjNameResolved = ResourceHelper.createFolder(project,
IPath buildCWD=buildFolder.getLocation(); "buildDir/" + prjName + markedResolved);
IPath buildCWD = buildFolder.getLocation();
setBuilderCWD(project, buildCWD); setBuilderCWD(project, buildCWD);
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -580,7 +601,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// contribute the entries // contribute the entries
CIncludePathEntry incRelativeEntry = new CIncludePathEntry(new Path(relativePath), 0); CIncludePathEntry incRelativeEntry = new CIncludePathEntry(new Path(relativePath), 0);
CIncludePathEntry incProjNameEntry = new CIncludePathEntry(new Path("${ProjName}"), 0); CIncludePathEntry incProjNameEntry = new CIncludePathEntry(new Path("${ProjName}"), 0);
CIncludePathEntry incProjNameMarkedResolvedEntry = new CIncludePathEntry(new Path("${ProjName}"+markedResolved), ICSettingEntry.RESOLVED); CIncludePathEntry incProjNameMarkedResolvedEntry = new CIncludePathEntry(
new Path("${ProjName}" + markedResolved), ICSettingEntry.RESOLVED);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(incRelativeEntry); entries.add(incRelativeEntry);
entries.add(incProjNameEntry); entries.add(incProjNameEntry);
@ -609,7 +631,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
assertEquals(new Path(prjName), new Path(actualIncludePaths[3])); assertEquals(new Path(prjName), new Path(actualIncludePaths[3]));
// if marked RESOLVED only that path stays // if marked RESOLVED only that path stays
assertEquals(new Path("${ProjName}"+markedResolved), new Path(actualIncludePaths[4])); assertEquals(new Path("${ProjName}" + markedResolved), new Path(actualIncludePaths[4]));
assertEquals(5, actualIncludePaths.length); assertEquals(5, actualIncludePaths.length);
} }
@ -622,7 +644,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
// set build CWD // set build CWD
IFolder buildFolder = ResourceHelper.createFolder(project, "buildDir"); IFolder buildFolder = ResourceHelper.createFolder(project, "buildDir");
IPath buildCWD=buildFolder.getLocation(); IPath buildCWD = buildFolder.getLocation();
setBuilderCWD(project, buildCWD); setBuilderCWD(project, buildCWD);
// define a few variations of paths // define a few variations of paths
@ -634,11 +656,12 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
String relativePath_dotdot_slash = "../"; String relativePath_dotdot_slash = "../";
String relativePath_dotdot_slash_path = "../include"; String relativePath_dotdot_slash_path = "../include";
IFolder relativeFolder_dotdot_slash_path = ResourceHelper.createFolder(project, "include"); IFolder relativeFolder_dotdot_slash_path = ResourceHelper.createFolder(project, "include");
String locationPath_dotdot_path = buildCWD.toString()+"/../include2"; String locationPath_dotdot_path = buildCWD.toString() + "/../include2";
IFolder incFolder_dotdot_slash_path = ResourceHelper.createFolder(project, "include2"); // "/ProjPath/buildDir/../include2" IFolder incFolder_dotdot_slash_path = ResourceHelper.createFolder(project, "include2"); // "/ProjPath/buildDir/../include2"
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -649,13 +672,17 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// contribute the entries // contribute the entries
CIncludePathEntry incRelativeEntry_dot = new CIncludePathEntry(new Path(relativePath_dot), 0); CIncludePathEntry incRelativeEntry_dot = new CIncludePathEntry(new Path(relativePath_dot), 0);
CIncludePathEntry incRelativeEntry_dot_slash_path = new CIncludePathEntry(new Path(relativePath_dot_slash_path), 0); CIncludePathEntry incRelativeEntry_dot_slash_path = new CIncludePathEntry(new Path(relativePath_dot_slash_path),
0);
CIncludePathEntry incRelativeEntry_dotdot = new CIncludePathEntry(new Path(relativePath_dotdot), 0); CIncludePathEntry incRelativeEntry_dotdot = new CIncludePathEntry(new Path(relativePath_dotdot), 0);
CIncludePathEntry incRelativeEntry_dotdot_slash_path = new CIncludePathEntry(new Path(relativePath_dotdot_slash_path), 0); CIncludePathEntry incRelativeEntry_dotdot_slash_path = new CIncludePathEntry(
new Path(relativePath_dotdot_slash_path), 0);
CIncludePathEntry incEntry_dotdot_path = new CIncludePathEntry(locationPath_dotdot_path, 0); CIncludePathEntry incEntry_dotdot_path = new CIncludePathEntry(locationPath_dotdot_path, 0);
// use LOCAL flag not to clash with plain dot entries // use LOCAL flag not to clash with plain dot entries
CIncludePathEntry incRelativeEntry_dotdot_slash = new CIncludePathEntry(new Path(relativePath_dotdot_slash), ICSettingEntry.LOCAL); CIncludePathEntry incRelativeEntry_dotdot_slash = new CIncludePathEntry(new Path(relativePath_dotdot_slash),
CIncludePathEntry incRelativeEntry_dot_slash = new CIncludePathEntry(new Path(relativePath_dot_slash), ICSettingEntry.LOCAL); ICSettingEntry.LOCAL);
CIncludePathEntry incRelativeEntry_dot_slash = new CIncludePathEntry(new Path(relativePath_dot_slash),
ICSettingEntry.LOCAL);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(incRelativeEntry_dot); entries.add(incRelativeEntry_dot);
@ -721,7 +748,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
String envPathStr = "${ProjDirPath}/Folder"; String envPathStr = "${ProjDirPath}/Folder";
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -768,7 +796,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
if (this.rc.equals(rc)) if (this.rc.equals(rc))
return entries; return entries;
return null; return null;
@ -777,11 +806,14 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// create a project // create a project
IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(getName());
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
assertNotNull(config);
// sample file // sample file
IFolder parentFolder = ResourceHelper.createFolder(project, "ParentFolder"); IFolder parentFolder = ResourceHelper.createFolder(project, "ParentFolder");
@ -796,8 +828,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
// add provider for parent folder // add provider for parent folder
ILanguageSettingsProvider provider = new MockProviderForResource(parentFolder, entries); ILanguageSettingsProvider provider = new MockProviderForResource(parentFolder, entries);
assertNull(provider.getSettingEntries(cfgDescription, file, null)); assertNull(provider.getSettingEntries(config, file, null));
assertEquals(includePathEntry, provider.getSettingEntries(cfgDescription, parentFolder, null).get(0)); assertEquals(includePathEntry, provider.getSettingEntries(config, parentFolder, null).get(0));
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider); providers.add(provider);
@ -825,7 +857,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
String envPathStr = "${ProjDirPath}/Folder"; String envPathStr = "${ProjDirPath}/Folder";
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -871,7 +904,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
List<String> languageIds = new ArrayList<String>(); List<String> languageIds = new ArrayList<String>();
for (ICLanguageSetting ls : langSettings) { for (ICLanguageSetting ls : langSettings) {
String langId = ls.getLanguageId(); String langId = ls.getLanguageId();
if (langId!=null && !languageIds.contains(langId)) { if (langId != null && !languageIds.contains(langId)) {
languageIds.add(langId); languageIds.add(langId);
} }
} }
@ -882,7 +915,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
* Test composition of 2 languages. * Test composition of 2 languages.
*/ */
public void testResourceLanguages() throws Exception { public void testResourceLanguages() throws Exception {
class MockProviderLang extends LanguageSettingsBaseProvider implements ILanguageSettingsProvider { class MockProviderLang extends LanguageSettingsBaseProvider implements ILanguageSettingsProvider {
private final String langId; private final String langId;
private final List<ICLanguageSettingEntry> entries; private final List<ICLanguageSettingEntry> entries;
@ -893,8 +926,9 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
if (langId==null || langId.equals(languageId)) String languageId) {
if (langId == null || langId.equals(languageId))
return entries; return entries;
return new ArrayList<ICLanguageSettingEntry>(); return new ArrayList<ICLanguageSettingEntry>();
} }
@ -909,7 +943,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
IFolder incFolderC = ResourceHelper.createFolder(project, "includeC"); IFolder incFolderC = ResourceHelper.createFolder(project, "includeC");
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project,
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);

View file

@ -14,8 +14,6 @@ package org.eclipse.cdt.core.language.settings.providers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.settings.model.CIncludeFileEntry; import org.eclipse.cdt.core.settings.model.CIncludeFileEntry;
import org.eclipse.cdt.core.settings.model.CIncludePathEntry; import org.eclipse.cdt.core.settings.model.CIncludePathEntry;
import org.eclipse.cdt.core.settings.model.CLibraryFileEntry; import org.eclipse.cdt.core.settings.model.CLibraryFileEntry;
@ -29,15 +27,21 @@ import org.eclipse.cdt.core.testplugin.CModelMock;
import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.XmlUtil; import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import junit.framework.TestSuite;
/** /**
* Test cases testing serialization of LanguageSettingsProviders. * Test cases testing serialization of LanguageSettingsProviders.
*/ */
@ -67,7 +71,9 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
/** /**
* Constructor. * Constructor.
* @param name - name of the test. *
* @param name
* - name of the test.
*/ */
public LanguageSettingsSerializableProviderTests(String name) { public LanguageSettingsSerializableProviderTests(String name) {
super(name); super(name);
@ -77,6 +83,18 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
Platform.getAdapterManager().registerAdapters(new IAdapterFactory() {
@Override
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
CModelMock.DummyCConfigurationDescription cfgDesc = (CModelMock.DummyCConfigurationDescription) adaptableObject;
return (T) new CModelMock.DummyBuildConfiguration(cfgDesc);
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { IBuildConfiguration.class };
}
}, CModelMock.DummyCConfigurationDescription.class);
} }
@Override @Override
@ -94,7 +112,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
/** /**
* main function of the class. * main function of the class.
* *
* @param args - arguments * @param args
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -111,7 +130,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
languages.add(LANG_ID); languages.add(LANG_ID);
// create a provider // create a provider
LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
// test isEmpty() // test isEmpty()
assertTrue(mockProvider.isEmpty()); assertTrue(mockProvider.isEmpty());
@ -144,7 +164,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
*/ */
public void testProvider_SetStoringEntriesInProjectArea() throws Exception { public void testProvider_SetStoringEntriesInProjectArea() throws Exception {
// create a provider // create a provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
@ -160,7 +181,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
@ -191,12 +213,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER)); assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER));
assertNotNull(provider.getLanguageScope()); assertNotNull(provider.getLanguageScope());
assertTrue(provider.getLanguageScope().size()>0); assertTrue(provider.getLanguageScope().size() > 0);
assertEquals(LANG_ID, provider.getLanguageScope().get(0)); assertEquals(LANG_ID, provider.getLanguageScope().get(0));
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertNotNull(entries); assertNotNull(entries);
assertTrue(entries.size()>0); assertTrue(entries.size() > 0);
assertEquals(new CIncludePathEntry("path0", 1), entries.get(0)); assertEquals(new CIncludePathEntry("path0", 1), entries.get(0));
} }
} }
@ -208,7 +230,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
@ -241,7 +264,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER)); assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER));
assertNotNull(provider.getLanguageScope()); assertNotNull(provider.getLanguageScope());
assertTrue(provider.getLanguageScope().size()>0); assertTrue(provider.getLanguageScope().size() > 0);
assertEquals(LANG_ID, provider.getLanguageScope().get(0)); assertEquals(LANG_ID, provider.getLanguageScope().get(0));
// no entries should be loaded // no entries should be loaded
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
@ -256,7 +279,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element rootElement; Element rootElement;
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
@ -284,20 +308,21 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
} }
{ {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_2, PROVIDER_NAME_2); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_2,
PROVIDER_NAME_2);
provider.loadEntries(rootElement); provider.loadEntries(rootElement);
assertEquals(PROVIDER_2, provider.getId()); assertEquals(PROVIDER_2, provider.getId());
assertEquals(PROVIDER_NAME_2, provider.getName()); assertEquals(PROVIDER_NAME_2, provider.getName());
// no attributes should be loaded // no attributes should be loaded
assertFalse(PROVIDER_1.equals(provider.getId())); assertFalse(PROVIDER_1.equals(provider.getId()));
assertFalse(PROVIDER_NAME_1.equals(provider.getName())); assertFalse(PROVIDER_NAME_1.equals(provider.getName()));
assertFalse(true==LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertFalse(true == LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertFalse(VALUE_PARAMETER.equals(provider.getProperty(ATTR_PARAMETER))); assertFalse(VALUE_PARAMETER.equals(provider.getProperty(ATTR_PARAMETER)));
assertNull(provider.getLanguageScope()); assertNull(provider.getLanguageScope());
// entries should be loaded // entries should be loaded
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertNotNull(entries); assertNotNull(entries);
assertTrue(entries.size()>0); assertTrue(entries.size() > 0);
assertEquals(new CIncludePathEntry("path0", 1), entries.get(0)); assertEquals(new CIncludePathEntry("path0", 1), entries.get(0));
} }
} }
@ -309,7 +334,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create null provider // create null provider
LanguageSettingsSerializableProvider providerNull = new LanguageSettingsSerializableProvider(PROVIDER_NULL, PROVIDER_NAME_NULL); LanguageSettingsSerializableProvider providerNull = new LanguageSettingsSerializableProvider(PROVIDER_NULL,
PROVIDER_NAME_NULL);
assertNull(providerNull.getSettingEntries(null, null, null)); assertNull(providerNull.getSettingEntries(null, null, null));
// set and get null entries // set and get null entries
providerNull.setSettingEntries(null, null, null, null); providerNull.setSettingEntries(null, null, null, null);
@ -337,7 +363,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create provider with custom parameter // create provider with custom parameter
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER)); assertEquals(VALUE_PARAMETER, provider.getProperty(ATTR_PARAMETER));
@ -361,7 +388,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create provider storing entries in project area // create provider storing entries in project area
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider)); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
@ -371,7 +399,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
elementProvider = provider.serialize(rootElement); elementProvider = provider.serialize(rootElement);
String xmlString = XmlUtil.toString(doc); String xmlString = XmlUtil.toString(doc);
assertTrue(xmlString.contains(ATTR_STORE_ENTRIES_WITH_PROJECT)); assertTrue(xmlString.contains(ATTR_STORE_ENTRIES_WITH_PROJECT));
assertTrue(xmlString.contains(ATTR_STORE_ENTRIES_WITH_PROJECT+"=\"true\"")); assertTrue(xmlString.contains(ATTR_STORE_ENTRIES_WITH_PROJECT + "=\"true\""));
} }
{ {
// re-load and check storing mode of the newly loaded provider // re-load and check storing mode of the newly loaded provider
@ -391,7 +419,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create provider with custom language scope // create provider with custom language scope
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setLanguageScope(expectedLanguageIds); provider.setLanguageScope(expectedLanguageIds);
List<String> actualIds = provider.getLanguageScope(); List<String> actualIds = provider.getLanguageScope();
assertEquals(LANG_ID, actualIds.get(0)); assertEquals(LANG_ID, actualIds.get(0));
@ -431,7 +460,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element elementProvider; Element elementProvider;
{ {
// create provider with no scope by default // create provider with no scope by default
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
// set entries for the whole language scope (now langId=null) // set entries for the whole language scope (now langId=null)
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
{ {
@ -511,7 +541,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, MOCK_RC, LANG_ID, entries); provider.setSettingEntries(null, MOCK_RC, LANG_ID, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -536,13 +567,16 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
*/ */
public void testNullLanguageDOM() throws Exception { public void testNullLanguageDOM() throws Exception {
// provider/configuration/language/resource/settingEntry // provider/configuration/language/resource/settingEntry
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
Element elementProvider; Element elementProvider;
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
provider.setSettingEntries(MOCK_CFG, MOCK_RC, null, entries); PROVIDER_NAME_1);
provider.setSettingEntries(config, MOCK_RC, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
@ -556,12 +590,11 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider);
assertEquals(PROVIDER_1, provider.getId()); assertEquals(PROVIDER_1, provider.getId());
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(MOCK_CFG, MOCK_RC, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(config, MOCK_RC, null);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
} }
} }
/** /**
* Test serialization of entries when language scope is null. * Test serialization of entries when language scope is null.
*/ */
@ -572,11 +605,15 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> entriesLanguage = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entriesLanguage = new ArrayList<ICLanguageSettingEntry>();
entriesLanguage.add(new CIncludePathEntry("path", 0)); entriesLanguage.add(new CIncludePathEntry("path", 0));
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
Element elementProvider; Element elementProvider;
{ {
// create a provider // create a provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
assertEquals(null, provider.getLanguageScope()); assertEquals(null, provider.getLanguageScope());
// add null language // add null language
@ -596,7 +633,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
} }
// add non-null language // add non-null language
provider.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, entriesLanguage); provider.setSettingEntries(config, MOCK_RC, LANG_ID, entriesLanguage);
assertNull(provider.getLanguageScope()); assertNull(provider.getLanguageScope());
{ {
// getter by null language // getter by null language
@ -644,12 +681,15 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
public void testNullResourceDOM() throws Exception { public void testNullResourceDOM() throws Exception {
// provider/configuration/language/resource/settingEntry // provider/configuration/language/resource/settingEntry
Element elementProvider; Element elementProvider;
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
provider.setSettingEntries(MOCK_CFG, null, LANG_ID, entries); PROVIDER_NAME_1);
provider.setSettingEntries(config, null, LANG_ID, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
@ -663,7 +703,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider);
assertEquals(PROVIDER_1, provider.getId()); assertEquals(PROVIDER_1, provider.getId());
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(MOCK_CFG, null, LANG_ID); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(config, null, LANG_ID);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
} }
} }
@ -678,7 +718,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, MOCK_RC, null, entries); provider.setSettingEntries(null, MOCK_RC, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -709,7 +750,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, LANG_ID, entries); provider.setSettingEntries(null, null, LANG_ID, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -736,12 +778,15 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
public void testNullLanguageResourceDOM() throws Exception { public void testNullLanguageResourceDOM() throws Exception {
// provider/configuration/language/resource/settingEntry // provider/configuration/language/resource/settingEntry
Element elementProvider; Element elementProvider;
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 0)); entries.add(new CIncludePathEntry("path0", 0));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
provider.setSettingEntries(MOCK_CFG, null, null, entries); PROVIDER_NAME_1);
provider.setSettingEntries(config, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
@ -756,7 +801,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider);
assertEquals(PROVIDER_1, provider.getId()); assertEquals(PROVIDER_1, provider.getId());
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(MOCK_CFG, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(config, null, null);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
} }
} }
@ -772,7 +817,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludePathEntry("path0", flag)); entries.add(new CIncludePathEntry("path0", flag));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -804,7 +850,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludePathEntry("path0", 1)); entries.add(new CIncludePathEntry("path0", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -820,7 +867,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CIncludePathEntry); assertTrue(entry instanceof CIncludePathEntry);
CIncludePathEntry includePathEntry = (CIncludePathEntry)entry; CIncludePathEntry includePathEntry = (CIncludePathEntry) entry;
assertEquals(entries.get(0).getName(), includePathEntry.getName()); assertEquals(entries.get(0).getName(), includePathEntry.getName());
assertEquals(entries.get(0).getValue(), includePathEntry.getValue()); assertEquals(entries.get(0).getValue(), includePathEntry.getValue());
assertEquals(entries.get(0).getKind(), includePathEntry.getKind()); assertEquals(entries.get(0).getKind(), includePathEntry.getKind());
@ -838,7 +885,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CIncludeFileEntry("a-path", 1)); entries.add(new CIncludeFileEntry("a-path", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -853,7 +901,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CIncludeFileEntry); assertTrue(entry instanceof CIncludeFileEntry);
CIncludeFileEntry includeFileEntry = (CIncludeFileEntry)entry; CIncludeFileEntry includeFileEntry = (CIncludeFileEntry) entry;
assertEquals(entries.get(0).getName(), includeFileEntry.getName()); assertEquals(entries.get(0).getName(), includeFileEntry.getName());
assertEquals(entries.get(0).getValue(), includeFileEntry.getValue()); assertEquals(entries.get(0).getValue(), includeFileEntry.getValue());
assertEquals(entries.get(0).getKind(), includeFileEntry.getKind()); assertEquals(entries.get(0).getKind(), includeFileEntry.getKind());
@ -868,10 +916,11 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
public void testCMacroEntryDOM() throws Exception { public void testCMacroEntryDOM() throws Exception {
Element elementProvider; Element elementProvider;
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CMacroEntry("MACRO0", "value0",1)); entries.add(new CMacroEntry("MACRO0", "value0", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -886,7 +935,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CMacroEntry); assertTrue(entry instanceof CMacroEntry);
CMacroEntry macroEntry = (CMacroEntry)entry; CMacroEntry macroEntry = (CMacroEntry) entry;
assertEquals(entries.get(0).getName(), macroEntry.getName()); assertEquals(entries.get(0).getName(), macroEntry.getName());
assertEquals(entries.get(0).getValue(), macroEntry.getValue()); assertEquals(entries.get(0).getValue(), macroEntry.getValue());
assertEquals(entries.get(0).getKind(), macroEntry.getKind()); assertEquals(entries.get(0).getKind(), macroEntry.getKind());
@ -904,7 +953,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CMacroFileEntry("a-path", 1)); entries.add(new CMacroFileEntry("a-path", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -919,7 +969,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CMacroFileEntry); assertTrue(entry instanceof CMacroFileEntry);
CMacroFileEntry macroFileEntry = (CMacroFileEntry)entry; CMacroFileEntry macroFileEntry = (CMacroFileEntry) entry;
assertEquals(entries.get(0).getName(), macroFileEntry.getName()); assertEquals(entries.get(0).getName(), macroFileEntry.getName());
assertEquals(entries.get(0).getValue(), macroFileEntry.getValue()); assertEquals(entries.get(0).getValue(), macroFileEntry.getValue());
assertEquals(entries.get(0).getKind(), macroFileEntry.getKind()); assertEquals(entries.get(0).getKind(), macroFileEntry.getKind());
@ -937,7 +987,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CLibraryPathEntry("a-path", 1)); entries.add(new CLibraryPathEntry("a-path", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -952,7 +1003,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CLibraryPathEntry); assertTrue(entry instanceof CLibraryPathEntry);
CLibraryPathEntry libraryPathEntry = (CLibraryPathEntry)entry; CLibraryPathEntry libraryPathEntry = (CLibraryPathEntry) entry;
assertEquals(entries.get(0).getName(), libraryPathEntry.getName()); assertEquals(entries.get(0).getName(), libraryPathEntry.getName());
assertEquals(entries.get(0).getValue(), libraryPathEntry.getValue()); assertEquals(entries.get(0).getValue(), libraryPathEntry.getValue());
assertEquals(entries.get(0).getKind(), libraryPathEntry.getKind()); assertEquals(entries.get(0).getKind(), libraryPathEntry.getKind());
@ -970,7 +1021,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
entries.add(new CLibraryFileEntry("a-path", 1)); entries.add(new CLibraryFileEntry("a-path", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -985,7 +1037,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CLibraryFileEntry); assertTrue(entry instanceof CLibraryFileEntry);
CLibraryFileEntry libraryFileEntry = (CLibraryFileEntry)entry; CLibraryFileEntry libraryFileEntry = (CLibraryFileEntry) entry;
assertEquals(entries.get(0).getName(), libraryFileEntry.getName()); assertEquals(entries.get(0).getName(), libraryFileEntry.getName());
assertEquals(entries.get(0).getValue(), libraryFileEntry.getValue()); assertEquals(entries.get(0).getValue(), libraryFileEntry.getValue());
assertEquals(entries.get(0).getKind(), libraryFileEntry.getKind()); assertEquals(entries.get(0).getKind(), libraryFileEntry.getKind());
@ -1002,10 +1054,11 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 1)); entries.add(new CIncludePathEntry("path0", 1));
entries.add(new CIncludePathEntry("path1", 1)); entries.add(new CIncludePathEntry("path1", 1));
entries.add(new CMacroEntry("MACRO0", "value0",1)); entries.add(new CMacroEntry("MACRO0", "value0", 1));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -1033,17 +1086,17 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", entries.add(new CIncludePathEntry("path0",
ICSettingEntry.BUILTIN ICSettingEntry.BUILTIN
| ICSettingEntry.READONLY | ICSettingEntry.READONLY
| ICSettingEntry.LOCAL | ICSettingEntry.LOCAL
| ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.VALUE_WORKSPACE_PATH
| ICSettingEntry.RESOLVED | ICSettingEntry.RESOLVED
| ICSettingEntry.UNDEFINED | ICSettingEntry.UNDEFINED
| ICSettingEntry.FRAMEWORKS_MAC | ICSettingEntry.FRAMEWORKS_MAC
| ICSettingEntry.EXPORTED | ICSettingEntry.EXPORTED));
));
{ {
// create a provider and serialize its settings // create a provider and serialize its settings
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
@ -1059,7 +1112,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
ICLanguageSettingEntry entry = actual.get(0); ICLanguageSettingEntry entry = actual.get(0);
assertTrue(entry instanceof CIncludePathEntry); assertTrue(entry instanceof CIncludePathEntry);
CIncludePathEntry includePathEntry = (CIncludePathEntry)entry; CIncludePathEntry includePathEntry = (CIncludePathEntry) entry;
assertEquals(entries.get(0).getName(), includePathEntry.getName()); assertEquals(entries.get(0).getName(), includePathEntry.getName());
assertEquals(entries.get(0).getValue(), includePathEntry.getValue()); assertEquals(entries.get(0).getValue(), includePathEntry.getValue());
assertEquals(entries.get(0).getKind(), includePathEntry.getKind()); assertEquals(entries.get(0).getKind(), includePathEntry.getKind());
@ -1093,7 +1146,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
} }
{ {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(
elementProvider);
List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, null, null);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
@ -1128,11 +1182,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
elementProvider = mockProvider.serialize(rootElement); elementProvider = mockProvider.serialize(rootElement);
String xml = XmlUtil.toString(elementProvider.getOwnerDocument()); String xml = XmlUtil.toString(elementProvider.getOwnerDocument());
// fail(xml); // for debugging // fail(xml); // for debugging
} }
{ {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(
elementProvider);
List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, null, LANG_ID_1); List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, null, LANG_ID_1);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
@ -1175,11 +1230,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
elementProvider = mockProvider.serialize(rootElement); elementProvider = mockProvider.serialize(rootElement);
String xml = XmlUtil.toString(elementProvider.getOwnerDocument()); String xml = XmlUtil.toString(elementProvider.getOwnerDocument());
// fail(xml); // for debugging // fail(xml); // for debugging
} }
{ {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider loadedProvider = new LanguageSettingsSerializableProvider(
elementProvider);
List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, rc1, null); List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(null, rc1, null);
assertEquals(entries.get(0), actual.get(0)); assertEquals(entries.get(0), actual.get(0));
@ -1205,7 +1261,8 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
assertNotNull(emptySettingsPath); assertNotNull(emptySettingsPath);
// Create provider // Create provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
// store the entries in parent folder // store the entries in parent folder
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -1216,7 +1273,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
{ {
// retrieve entries for a parent folder itself // retrieve entries for a parent folder itself
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, parentFolder, LANG_ID); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, parentFolder, LANG_ID);
assertEquals(entries,actual); assertEquals(entries, actual);
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
} }
@ -1225,14 +1282,15 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource"); IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource");
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, derived, LANG_ID); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, derived, LANG_ID);
// NOT taken from parent folder // NOT taken from parent folder
assertEquals(null,actual); assertEquals(null, actual);
} }
{ {
// retrieve entries for not related resource // retrieve entries for not related resource
IFile notRelated = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path("/AnotherFolder/Subfolder/resource")); IFile notRelated = ResourcesPlugin.getWorkspace().getRoot()
.getFile(new Path("/AnotherFolder/Subfolder/resource"));
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, notRelated, LANG_ID); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, notRelated, LANG_ID);
assertEquals(null,actual); assertEquals(null, actual);
} }
{ {
@ -1247,9 +1305,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
* Test equals() and hashCode(). * Test equals() and hashCode().
*/ */
public void testEquals() throws Exception { public void testEquals() throws Exception {
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
// create sample entries // create sample entries
List<ICLanguageSettingEntry> sampleEntries_1 = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> sampleEntries_1 = new ArrayList<ICLanguageSettingEntry>();
sampleEntries_1.add(new CMacroEntry("MACRO0", "value0",1)); sampleEntries_1.add(new CMacroEntry("MACRO0", "value0", 1));
sampleEntries_1.add(new CIncludePathEntry("path0", 1)); sampleEntries_1.add(new CIncludePathEntry("path0", 1));
sampleEntries_1.add(new CIncludePathEntry("path1", 1)); sampleEntries_1.add(new CIncludePathEntry("path1", 1));
@ -1261,46 +1322,48 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
sampleLanguages.add(LANG_ID); sampleLanguages.add(LANG_ID);
// create a model provider // create a model provider
LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider1.setLanguageScope(sampleLanguages); provider1.setLanguageScope(sampleLanguages);
provider1.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider1.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1)); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1));
LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider1.setSettingEntries(config, MOCK_RC, LANG_ID, sampleEntries_1);
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
// create another provider with the same data // create another provider with the same data
LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
{ {
provider2.setLanguageScope(sampleLanguages); provider2.setLanguageScope(sampleLanguages);
provider2.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider2.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true);
provider2.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider2.setSettingEntries(config, MOCK_RC, LANG_ID, sampleEntries_1);
provider2.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider2.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
// All set now, so they should be equal // All set now, so they should be equal
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// start with provider with the same data // start with provider with the same data
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
// replace languages // replace languages
List<String> sampleLanguages2 = new ArrayList<String>(); List<String> sampleLanguages2 = new ArrayList<String>();
sampleLanguages2.add(LANG_ID_1); sampleLanguages2.add(LANG_ID_1);
provider2.setLanguageScope(sampleLanguages2); provider2.setLanguageScope(sampleLanguages2);
assertFalse(provider1.hashCode()==provider2.hashCode()); assertFalse(provider1.hashCode() == provider2.hashCode());
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
// restore provider // restore provider
provider2.setLanguageScope(sampleLanguages); provider2.setLanguageScope(sampleLanguages);
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// start with provider with the same data // start with provider with the same data
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
// replace property // replace property
provider2.setProperty(ATTR_PARAMETER, "changed-parameter"); provider2.setProperty(ATTR_PARAMETER, "changed-parameter");
@ -1308,12 +1371,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
// restore provider // restore provider
provider2.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider2.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// start with provider with the same data // start with provider with the same data
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
// replace property // replace property
LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, false); LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, false);
@ -1321,45 +1384,47 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
// restore provider // restore provider
LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true);
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// start with provider with the same data // start with provider with the same data
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
// replace entries // replace entries
List<ICLanguageSettingEntry> changedEntries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> changedEntries = new ArrayList<ICLanguageSettingEntry>();
changedEntries.add(new CMacroEntry("MACROX", "valueX",1)); changedEntries.add(new CMacroEntry("MACROX", "valueX", 1));
provider2.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, changedEntries); provider2.setSettingEntries(config, MOCK_RC, LANG_ID, changedEntries);
assertFalse(provider1.hashCode()==provider2.hashCode()); assertFalse(provider1.hashCode() == provider2.hashCode());
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
// restore provider // restore provider
provider2.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider2.setSettingEntries(config, MOCK_RC, LANG_ID, sampleEntries_1);
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// start with provider with the same data // start with provider with the same data
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
// replace default entries // replace default entries
List<ICLanguageSettingEntry> changedEntries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> changedEntries = new ArrayList<ICLanguageSettingEntry>();
changedEntries.add(new CIncludePathEntry("pathX", 1)); changedEntries.add(new CIncludePathEntry("pathX", 1));
provider2.setSettingEntries(null, null, LANG_ID, changedEntries); provider2.setSettingEntries(null, null, LANG_ID, changedEntries);
assertFalse(provider1.hashCode()==provider2.hashCode()); assertFalse(provider1.hashCode() == provider2.hashCode());
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
// restore provider // restore provider
provider2.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider2.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
assertTrue(provider1.hashCode()==provider2.hashCode()); assertTrue(provider1.hashCode() == provider2.hashCode());
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
} }
{ {
// check that subclasses are not equal // check that subclasses are not equal
LanguageSettingsSerializableProvider providerSub1 = new LanguageSettingsSerializableProvider() {}; LanguageSettingsSerializableProvider providerSub1 = new LanguageSettingsSerializableProvider() {
LanguageSettingsSerializableProvider providerSub2 = new LanguageSettingsSerializableProvider() {}; };
assertFalse(providerSub1.hashCode()==providerSub2.hashCode()); LanguageSettingsSerializableProvider providerSub2 = new LanguageSettingsSerializableProvider() {
};
assertFalse(providerSub1.hashCode() == providerSub2.hashCode());
assertFalse(providerSub1.equals(providerSub2)); assertFalse(providerSub1.equals(providerSub2));
} }
} }
@ -1369,8 +1434,10 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
*/ */
public void testEquals_DefaultProperties() throws Exception { public void testEquals_DefaultProperties() throws Exception {
// create model providers // create model providers
LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1,
LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); PROVIDER_NAME_1);
LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
// equality for setProperty(String, String) // equality for setProperty(String, String)
{ {
@ -1415,11 +1482,14 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
* Test cloning of provider. * Test cloning of provider.
*/ */
public void testClone() throws Exception { public void testClone() throws Exception {
IBuildConfiguration config = Adapters.adapt(MOCK_CFG, IBuildConfiguration.class);
assertNotNull(config);
// define sample data // define sample data
List<ICLanguageSettingEntry> sampleEntries_1 = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> sampleEntries_1 = new ArrayList<ICLanguageSettingEntry>();
sampleEntries_1.add(new CIncludePathEntry("path0", 1)); sampleEntries_1.add(new CIncludePathEntry("path0", 1));
sampleEntries_1.add(new CIncludePathEntry("path1", 1)); sampleEntries_1.add(new CIncludePathEntry("path1", 1));
sampleEntries_1.add(new CMacroEntry("MACRO0", "value0",1)); sampleEntries_1.add(new CMacroEntry("MACRO0", "value0", 1));
List<ICLanguageSettingEntry> sampleEntries_2 = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> sampleEntries_2 = new ArrayList<ICLanguageSettingEntry>();
sampleEntries_2.add(new CIncludePathEntry("path0", 1)); sampleEntries_2.add(new CIncludePathEntry("path0", 1));
@ -1432,6 +1502,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
public MockSerializableProvider(String id, String name) { public MockSerializableProvider(String id, String name) {
super(id, name); super(id, name);
} }
@Override @Override
public MockSerializableProvider clone() throws CloneNotSupportedException { public MockSerializableProvider clone() throws CloneNotSupportedException {
return (MockSerializableProvider) super.clone(); return (MockSerializableProvider) super.clone();
@ -1443,28 +1514,31 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
provider1.setProperty(ATTR_PARAMETER, VALUE_PARAMETER); provider1.setProperty(ATTR_PARAMETER, VALUE_PARAMETER);
assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1)); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1));
LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider1.setSettingEntries(config, MOCK_RC, LANG_ID, sampleEntries_1);
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
// clone provider // clone provider
MockSerializableProvider providerClone = provider1.clone(); MockSerializableProvider providerClone = provider1.clone();
assertNotSame(provider1, providerClone); assertNotSame(provider1, providerClone);
assertTrue(provider1.equals(providerClone)); assertTrue(provider1.equals(providerClone));
assertTrue(provider1.getClass()==providerClone.getClass()); assertTrue(provider1.getClass() == providerClone.getClass());
assertEquals(provider1.getProperty(ATTR_PARAMETER), providerClone.getProperty(ATTR_PARAMETER)); assertEquals(provider1.getProperty(ATTR_PARAMETER), providerClone.getProperty(ATTR_PARAMETER));
// ensure we did not clone reference // ensure we did not clone reference
provider1.setProperty(ATTR_PARAMETER, ""); provider1.setProperty(ATTR_PARAMETER, "");
assertFalse(provider1.getProperty(ATTR_PARAMETER).equals(providerClone.getProperty(ATTR_PARAMETER))); assertFalse(provider1.getProperty(ATTR_PARAMETER).equals(providerClone.getProperty(ATTR_PARAMETER)));
assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1), LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone)); assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1),
LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
// ensure we did not clone reference // ensure we did not clone reference
LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, !LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone)); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1,
assertFalse(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1) == LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone)); !LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
assertFalse(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1) == LanguageSettingsManager
.isStoringEntriesInProjectArea(providerClone));
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0)); assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
List<ICLanguageSettingEntry> actual1 = providerClone.getSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID); List<ICLanguageSettingEntry> actual1 = providerClone.getSettingEntries(config, MOCK_RC, LANG_ID);
assertNotSame(sampleEntries_1, actual1); assertNotSame(sampleEntries_1, actual1);
assertEquals(sampleEntries_1.get(0), actual1.get(0)); assertEquals(sampleEntries_1.get(0), actual1.get(0));
assertEquals(sampleEntries_1.get(1), actual1.get(1)); assertEquals(sampleEntries_1.get(1), actual1.get(1));
@ -1490,6 +1564,7 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
public MockSerializableProvider(String id, String name) { public MockSerializableProvider(String id, String name) {
super(id, name); super(id, name);
} }
@Override @Override
public MockSerializableProvider cloneShallow() throws CloneNotSupportedException { public MockSerializableProvider cloneShallow() throws CloneNotSupportedException {
return (MockSerializableProvider) super.cloneShallow(); return (MockSerializableProvider) super.cloneShallow();
@ -1510,9 +1585,10 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
MockSerializableProvider providerClone = provider1.cloneShallow(); MockSerializableProvider providerClone = provider1.cloneShallow();
assertNotSame(provider1, providerClone); assertNotSame(provider1, providerClone);
assertFalse(provider1.equals(providerClone)); assertFalse(provider1.equals(providerClone));
assertTrue(provider1.getClass()==providerClone.getClass()); assertTrue(provider1.getClass() == providerClone.getClass());
assertEquals(provider1.getProperty(ATTR_PARAMETER), providerClone.getProperty(ATTR_PARAMETER)); assertEquals(provider1.getProperty(ATTR_PARAMETER), providerClone.getProperty(ATTR_PARAMETER));
assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1), LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone)); assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1),
LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0)); assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
List<ICLanguageSettingEntry> actual = providerClone.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = providerClone.getSettingEntries(null, null, null);
@ -1553,11 +1629,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
unsortedEntries.add(libraryPathEntry2); unsortedEntries.add(libraryPathEntry2);
// create a provider and set the entries // create a provider and set the entries
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, unsortedEntries); provider.setSettingEntries(null, null, null, unsortedEntries);
// retrieve and check that language settings got sorted properly // retrieve and check that language settings got sorted properly
int i=0; int i = 0;
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
assertEquals(includePathEntry1, actual.get(i++)); assertEquals(includePathEntry1, actual.get(i++));
assertEquals(includePathEntry2, actual.get(i++)); assertEquals(includePathEntry2, actual.get(i++));
@ -1611,11 +1688,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
unsortedEntries.add(libraryPathEntry2); unsortedEntries.add(libraryPathEntry2);
// create a provider and set the entries // create a provider and set the entries
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, unsortedEntries); provider.setSettingEntries(null, null, null, unsortedEntries);
// retrieve and check that language settings got sorted properly // retrieve and check that language settings got sorted properly
int i=0; int i = 0;
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
assertEquals(includePathEntry1, actual.get(i++)); assertEquals(includePathEntry1, actual.get(i++));
assertEquals(includePathEntry2, actual.get(i++)); assertEquals(includePathEntry2, actual.get(i++));
@ -1654,11 +1732,12 @@ public class LanguageSettingsSerializableProviderTests extends BaseTestCase {
unsortedEntries.add(macroEntry2C); unsortedEntries.add(macroEntry2C);
// create a provider and set the entries // create a provider and set the entries
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1,
PROVIDER_NAME_1);
provider.setSettingEntries(null, null, null, unsortedEntries); provider.setSettingEntries(null, null, null, unsortedEntries);
// retrieve and check that language settings got sorted properly // retrieve and check that language settings got sorted properly
int i=0; int i = 0;
List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = provider.getSettingEntries(null, null, null);
assertEquals(macroEntry1, actual.get(i++)); assertEquals(macroEntry1, actual.get(i++));
assertEquals(macroEntry2A, actual.get(i++)); assertEquals(macroEntry2A, actual.get(i++));

View file

@ -14,8 +14,8 @@ package org.eclipse.cdt.core.language.settings.providers;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.AbstractExecutableExtensionBase; import org.eclipse.cdt.core.AbstractExecutableExtensionBase;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
/** /**
@ -23,7 +23,7 @@ import org.eclipse.core.resources.IResource;
*/ */
public class MockLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { public class MockLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, String languageId) {
return null; return null;
} }
} }

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting; import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting;
import org.eclipse.cdt.core.settings.model.WriteAccessException; import org.eclipse.cdt.core.settings.model.WriteAccessException;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
@ -42,8 +43,8 @@ import org.eclipse.core.runtime.QualifiedName;
*/ */
public class CModelMock { public class CModelMock {
/** /**
* Dummy implementation of ICProjectDescription for testing. * Dummy implementation of ICProjectDescription for testing. Feel free to
* Feel free to override the methods you are interested to mock. * override the methods you are interested to mock.
*/ */
public static class DummyCProjectDescription implements ICProjectDescription { public static class DummyCProjectDescription implements ICProjectDescription {
@ -88,8 +89,7 @@ public class CModelMock {
} }
@Override @Override
public ICStorageElement getStorage(String id, boolean create) public ICStorageElement getStorage(String id, boolean create) throws CoreException {
throws CoreException {
return null; return null;
} }
@ -136,20 +136,17 @@ public class CModelMock {
} }
@Override @Override
public void setActiveConfiguration(ICConfigurationDescription cfg) public void setActiveConfiguration(ICConfigurationDescription cfg) throws WriteAccessException {
throws WriteAccessException {
} }
@Override @Override
public ICConfigurationDescription createConfiguration(String id, public ICConfigurationDescription createConfiguration(String id, String name, ICConfigurationDescription base)
String name, ICConfigurationDescription base)
throws CoreException, WriteAccessException { throws CoreException, WriteAccessException {
return null; return null;
} }
@Override @Override
public ICConfigurationDescription createConfiguration( public ICConfigurationDescription createConfiguration(String buildSystemId, CConfigurationData data)
String buildSystemId, CConfigurationData data)
throws CoreException, WriteAccessException { throws CoreException, WriteAccessException {
return null; return null;
} }
@ -165,13 +162,11 @@ public class CModelMock {
} }
@Override @Override
public void removeConfiguration(String name) public void removeConfiguration(String name) throws WriteAccessException {
throws WriteAccessException {
} }
@Override @Override
public void removeConfiguration(ICConfigurationDescription cfg) public void removeConfiguration(ICConfigurationDescription cfg) throws WriteAccessException {
throws WriteAccessException {
} }
@Override @Override
@ -200,8 +195,7 @@ public class CModelMock {
} }
@Override @Override
public void setDefaultSettingConfiguration( public void setDefaultSettingConfiguration(ICConfigurationDescription cfg) {
ICConfigurationDescription cfg) {
} }
@Override @Override
@ -216,8 +210,8 @@ public class CModelMock {
} }
/** /**
* Dummy implementation of ICConfigurationDescription for testing. * Dummy implementation of ICConfigurationDescription for testing. Feel free
* Feel free to override the methods you are interested to mock. * to override the methods you are interested to mock.
*/ */
public static class DummyCConfigurationDescription implements ICConfigurationDescription { public static class DummyCConfigurationDescription implements ICConfigurationDescription {
private String id; private String id;
@ -267,8 +261,7 @@ public class CModelMock {
} }
@Override @Override
public ICStorageElement getStorage(String id, boolean create) public ICStorageElement getStorage(String id, boolean create) throws CoreException {
throws CoreException {
return null; return null;
} }
@ -326,27 +319,23 @@ public class CModelMock {
} }
@Override @Override
public ICResourceDescription getResourceDescription(IPath path, public ICResourceDescription getResourceDescription(IPath path, boolean exactPath) {
boolean exactPath) {
return null; return null;
} }
@Override @Override
public void removeResourceDescription(ICResourceDescription des) public void removeResourceDescription(ICResourceDescription des) throws CoreException, WriteAccessException {
}
@Override
public ICFileDescription createFileDescription(IPath path, ICResourceDescription base)
throws CoreException, WriteAccessException { throws CoreException, WriteAccessException {
}
@Override
public ICFileDescription createFileDescription(IPath path,
ICResourceDescription base) throws CoreException,
WriteAccessException {
return null; return null;
} }
@Override @Override
public ICFolderDescription createFolderDescription(IPath path, public ICFolderDescription createFolderDescription(IPath path, ICFolderDescription base)
ICFolderDescription base) throws CoreException, throws CoreException, WriteAccessException {
WriteAccessException {
return null; return null;
} }
@ -407,9 +396,8 @@ public class CModelMock {
} }
@Override @Override
public ICExternalSetting createExternalSetting(String[] languageIDs, public ICExternalSetting createExternalSetting(String[] languageIDs, String[] contentTypeIds,
String[] contentTypeIds, String[] extensions, String[] extensions, ICSettingEntry[] entries) throws WriteAccessException {
ICSettingEntry[] entries) throws WriteAccessException {
return null; return null;
} }
@ -489,6 +477,37 @@ public class CModelMock {
public CConfigurationStatus getConfigurationStatus() { public CConfigurationStatus getConfigurationStatus() {
return null; return null;
} }
}
public static class DummyBuildConfiguration implements IBuildConfiguration {
private final DummyCConfigurationDescription desc;
public DummyBuildConfiguration(DummyCConfigurationDescription desc) {
this.desc = desc;
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter.isInstance(desc)) {
return (T) desc;
}
return null;
}
@Override
public IProject getProject() {
ICProjectDescription projDesc = desc.getProjectDescription();
if (projDesc != null) {
return projDesc.getProject();
} else {
return null;
}
}
@Override
public String getName() {
return desc.getName();
}
} }
} }

View file

@ -78,287 +78,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=110
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

View file

@ -1,4 +1,3 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
formatter_profile=_CDT
formatter_settings_version=12 formatter_settings_version=12
internal.default.compliance=user internal.default.compliance=user

View file

@ -10,32 +10,21 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IResource;
/** /**
* This interface is to be implemented by providers which want to broadcast the changes in their setting entries * This interface is to be implemented by providers which want to broadcast the changes in their
* with {@link ILanguageSettingsChangeEvent}. * setting entries with {@link ILanguageSettingsChangeEvent}.
* *
* @since 5.4 * @since 5.4
*/ */
public interface ILanguageSettingsBroadcastingProvider extends ILanguageSettingsProvider { public interface ILanguageSettingsBroadcastingProvider extends ILanguageSettingsProvider {
@Override
public String getId();
@Override
public String getName();
@Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId);
/** /**
* Return a copy of internal storage. This should be a deep copy/clone of the storage. * Return a copy of internal storage. This should be a deep copy/clone of the storage. It is
* It is used to calculate the delta and being kept in the last state object of configuration * used to calculate the delta and being kept in the last state object of configuration
* description to compare to a new state later. * description to compare to a new state later.
* *
* @return a copy of internal storage. * @return a copy of internal storage.
*/ */
public LanguageSettingsStorage copyStorage(); public LanguageSettingsStorage copyStorage();
} }

View file

@ -14,42 +14,67 @@ import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
/** /**
* This interface is used in UI to identify classes allowing user to modify settings externally * This interface is used in UI to identify classes allowing user to modify settings externally
* contrary to some subclasses of {@link LanguageSettingsSerializableProvider} managing * contrary to some subclasses of {@link LanguageSettingsSerializableProvider} managing their
* their settings themselves and not providing such option to the user. * settings themselves and not providing such option to the user.
* *
* @since 5.4 * @since 5.4
*/ */
public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroadcastingProvider, Cloneable { public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroadcastingProvider, Cloneable {
@Override
public String getId();
@Override
public String getName();
@Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId);
/** /**
* Sets language settings entries for the provider. * Sets language settings entries for the provider.
* *
* @param cfgDescription - configuration description. * @param config
* @param rc - resource such as file or folder. If {@code null} the entries are * configuration.
* considered to be being defined as default entries for resources. * @param rc
* @param languageId - language id. If {@code null}, then entries are considered * resource such as file or folder. If {@code null} the entries are considered to be
* to be defined as default entries for languages. * being defined as default entries for resources.
* @param entries - language settings entries to set. * @param languageId
* language id. If {@code null}, then entries are considered to be defined as default
* entries for languages.
* @param entries
* language settings entries to set.
* @since 6.0
*/ */
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, default public void setSettingEntries(IBuildConfiguration config, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries); List<? extends ICLanguageSettingEntry> entries) {
// Call the old method by default
setSettingEntries(config.getAdapter(ICConfigurationDescription.class), rc, languageId, entries);
}
/** /**
* Shallow clone of the provider. "Shallow" is defined here as the exact copy except that * Sets language settings entries for the provider.
* the copy will have zero language settings entries. *
* @param cfgDescription
* configuration description.
* @param rc
* resource such as file or folder. If {@code null} the entries are considered to be
* being defined as default entries for resources.
* @param languageId
* language id. If {@code null}, then entries are considered to be defined as default
* entries for languages.
* @param entries
* language settings entries to set.
* @deprecated use {@link #getSettingEntries(IBuildConfiguration, IResource, String)}
*/
@Deprecated
default public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries) {
// Do nothing by default
}
/**
* Shallow clone of the provider. "Shallow" is defined here as the exact copy except that the
* copy will have zero language settings entries.
* *
* @return shallow copy of the provider. * @return shallow copy of the provider.
* @throws CloneNotSupportedException in case {@link #clone()} throws the exception. * @throws CloneNotSupportedException
* in case {@link #clone()} throws the exception.
*/ */
public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException;
@ -57,4 +82,5 @@ public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroa
* @see Object#clone() * @see Object#clone()
*/ */
public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException;
} }

View file

@ -17,35 +17,36 @@ import org.eclipse.cdt.core.model.LanguageManager;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
/** /**
* Base interface to provide list of {@link ICLanguageSettingEntry}. * Base interface to provide list of {@link ICLanguageSettingEntry}. This interface is used to
* This interface is used to deliver additions to compiler options such as * deliver additions to compiler options such as include paths (-I) or preprocessor defines (-D) and
* include paths (-I) or preprocessor defines (-D) and others (see * others (see {@link ICSettingEntry#INCLUDE_PATH} and other kinds). <br>
* {@link ICSettingEntry#INCLUDE_PATH} and other kinds). * <br>
* <br><br>
* To define a provider like that use extension point * To define a provider like that use extension point
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this * {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this interface. The
* interface. The recommended way of implementing is to extend * recommended way of implementing is to extend {@link LanguageSettingsSerializableProvider} and
* {@link LanguageSettingsSerializableProvider} and implement {@link ILanguageSettingsEditableProvider}. * implement {@link ILanguageSettingsEditableProvider}. That will give the ability to persist and
* That will give the ability to persist and edit/clean entries by user in UI. * edit/clean entries by user in UI. The clone methods defined by
* The clone methods defined by {@link ILanguageSettingsEditableProvider} should be * {@link ILanguageSettingsEditableProvider} should be chained as done for example by
* chained as done for example by {@link LanguageSettingsGenericProvider}. * {@link LanguageSettingsGenericProvider}. <br>
* <br><br> * <br>
* CDT provides a few general use implementations in the core such as {@link LanguageSettingsBaseProvider} * CDT provides a few general use implementations in the core such as
* or {@link LanguageSettingsSerializableProvider} or {@link LanguageSettingsGenericProvider} * {@link LanguageSettingsBaseProvider} or {@link LanguageSettingsSerializableProvider} or
* which could be used out of the box or built upon. There are also abstract classes in build * {@link LanguageSettingsGenericProvider} which could be used out of the box or built upon. There
* plugins {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} which * are also abstract classes in build plugins {@code AbstractBuildCommandParser} and
* serve as a base for output parsers and built-in compiler language settings detectors. * {@code AbstractBuiltinSpecsDetector} which serve as a base for output parsers and built-in
* See also extension point schema description LanguageSettingsProvider.exsd. * compiler language settings detectors. See also extension point schema description
* LanguageSettingsProvider.exsd.
* *
* @since 5.4 * @since 5.4
*/ */
public interface ILanguageSettingsProvider { public interface ILanguageSettingsProvider {
/** /**
* Id is used to keep track of the providers internally. Use unique id * Id is used to keep track of the providers internally. Use unique id to represent the
* to represent the provider. * provider.
* *
* @return Id of the provider. * @return Id of the provider.
*/ */
@ -59,28 +60,72 @@ public interface ILanguageSettingsProvider {
public String getName(); public String getName();
/** /**
* Returns the list of setting entries for the given configuration description, * Returns the list of setting entries for the given configuration description, resource and
* resource and language. * language. <br>
* <br><br> * <br>
* Note to implementers - this method should not be used to do any long running * Note to implementers - this method should not be used to do any long running operations such
* operations such as extensive calculations or reading files. If you need to do * as extensive calculations or reading files. If you need to do so, the recommended way is to
* so, the recommended way is to do the calculations outside of * do the calculations outside of this function call - in advance and on appropriate event. For
* this function call - in advance and on appropriate event. For example, Build * example, Build Output Parser prepares the list and stores it in internal cache while parsing
* Output Parser prepares the list and stores it in internal cache while parsing output. * output. {@link #getSettingEntries(IBuildConfiguration, IResource, String)} will return cached
* {@link #getSettingEntries(ICConfigurationDescription, IResource, String)} will * entries when asked. You can also implement {@link ICListenerAgent} interface to get
* return cached entries when asked. You can also implement {@link ICListenerAgent} * registered and listen to arbitrary events.
* interface to get registered and listen to arbitrary events.
* *
* @param cfgDescription - configuration description. * @param config
* @param rc - resource such as file or folder. * - configuration.
* If {@code null}, the default entries for all resources are returned. * @param rc
* @param languageId - language id. * - resource such as file or folder. If {@code null}, the default entries for all
* If {@code null}, the default entries for all languages are returned. * resources are returned.
* (see {@link LanguageManager#getLanguageForFile(org.eclipse.core.resources.IFile, ICConfigurationDescription)}). * @param languageId
* - language id. If {@code null}, the default entries for all languages are
* returned. (see
* {@link LanguageManager#getLanguageForFile(org.eclipse.core.resources.IFile, ICConfigurationDescription)}
* ).
* *
* @return the list of setting entries or {@code null} if no settings defined. * @return the list of setting entries or {@code null} if no settings defined. The list needs to
* The list needs to be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)} * be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)} to
* to save memory and avoid deep equality comparisons. * save memory and avoid deep equality comparisons.
* @since 6.0
*/ */
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId); default public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
// call the old one by default
return getSettingEntries(config.getAdapter(ICConfigurationDescription.class), rc, languageId);
}
/**
* Returns the list of setting entries for the given configuration description, resource and
* language. <br>
* <br>
* Note to implementers - this method should not be used to do any long running operations such
* as extensive calculations or reading files. If you need to do so, the recommended way is to
* do the calculations outside of this function call - in advance and on appropriate event. For
* example, Build Output Parser prepares the list and stores it in internal cache while parsing
* output. {@link #getSettingEntries(IBuildConfiguration, IResource, String)} will return cached
* entries when asked. You can also implement {@link ICListenerAgent} interface to get
* registered and listen to arbitrary events.
*
* @param cfgDescription
* - configuration description.
* @param rc
* - resource such as file or folder. If {@code null}, the default entries for all
* resources are returned.
* @param languageId
* - language id. If {@code null}, the default entries for all languages are
* returned. (see
* {@link LanguageManager#getLanguageForFile(org.eclipse.core.resources.IFile, ICConfigurationDescription)}
* ).
*
* @return the list of setting entries or {@code null} if no settings defined. The list needs to
* be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)} to
* save memory and avoid deep equality comparisons.
* @deprecated use {@link #getSettingEntries(IBuildConfiguration, IResource, String)}
*/
@Deprecated
default public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription,
IResource rc, String languageId) {
// return null by default
return null;
}
} }

View file

@ -23,19 +23,24 @@ import org.eclipse.cdt.core.AbstractExecutableExtensionBase;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages; import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
/** /**
* {@code LanguageSettingsBaseProvider} is a basic implementation of {@link ILanguageSettingsProvider} * {@code LanguageSettingsBaseProvider} is a basic implementation of
* for the extensions defined by {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. * {@link ILanguageSettingsProvider} for the extensions defined by
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point.
* *
* This implementation supports "static" list of entries for languages specified in * This implementation supports "static" list of entries for languages specified in the extension
* the extension point. * point.
* *
* @since 5.4 * @since 5.4
*/ */
public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBase
/** Language scope, i.e. list of languages the entries will be provided for. */ implements ILanguageSettingsProvider {
/**
* Language scope, i.e. list of languages the entries will be provided for.
*/
protected List<String> languageScope = null; protected List<String> languageScope = null;
/** Provider-specific properties */ /** Provider-specific properties */
@ -54,8 +59,10 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* Constructor. Creates an "empty" non-configured provider. * Constructor. Creates an "empty" non-configured provider.
* *
* @param id - id of the provider. * @param id
* @param name - name of the provider to be presented to a user. * - id of the provider.
* @param name
* - name of the provider to be presented to a user.
*/ */
public LanguageSettingsBaseProvider(String id, String name) { public LanguageSettingsBaseProvider(String id, String name) {
super(id, name); super(id, name);
@ -64,85 +71,97 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* Constructor. * Constructor.
* *
* @param id - id of the provider. * @param id
* @param name - name of the provider to be presented to a user. * - id of the provider.
* @param languages - list of languages the {@code entries} provided for. * @param name
* {@code languages} can be {@code null}, in this case the {@code entries} * - name of the provider to be presented to a user.
* are provided for any language. * @param languages
* @param entries - the list of language settings entries this provider provides. * - list of languages the {@code entries} provided for. {@code languages} can be
* If {@code null} is passed, the provider creates an empty list. * {@code null}, in this case the {@code entries} are provided for any language.
* @param entries
* - the list of language settings entries this provider provides. If {@code null} is
* passed, the provider creates an empty list.
*/ */
public LanguageSettingsBaseProvider(String id, String name, List<String> languages, public LanguageSettingsBaseProvider(String id, String name, List<String> languages,
List<ICLanguageSettingEntry> entries) { List<ICLanguageSettingEntry> entries) {
super(id, name); super(id, name);
this.languageScope = languages!=null ? new ArrayList<String>(languages) : null; this.languageScope = languages != null ? new ArrayList<String>(languages) : null;
this.entries = getPooledList(entries); this.entries = getPooledList(entries);
} }
/** /**
* Constructor. * Constructor.
* *
* @param id - id of the provider. * @param id
* @param name - name of the provider to be presented to a user. * - id of the provider.
* @param languages - list of languages the {@code entries} provided for. * @param name
* {@code languages} can be {@code null}, in this case the {@code entries} * - name of the provider to be presented to a user.
* are provided for any language. * @param languages
* @param entries - the list of language settings entries this provider provides. * - list of languages the {@code entries} provided for. {@code languages} can be
* If {@code null} is passed, the provider creates an empty list. * {@code null}, in this case the {@code entries} are provided for any language.
* @param properties - custom properties as the means to customize providers. * @param entries
* - the list of language settings entries this provider provides. If {@code null} is
* passed, the provider creates an empty list.
* @param properties
* - custom properties as the means to customize providers.
*/ */
public LanguageSettingsBaseProvider(String id, String name, List<String> languages, public LanguageSettingsBaseProvider(String id, String name, List<String> languages,
List<ICLanguageSettingEntry> entries, Map<String, String> properties) { List<ICLanguageSettingEntry> entries, Map<String, String> properties) {
super(id, name); super(id, name);
this.languageScope = languages!=null ? new ArrayList<String>(languages) : null; this.languageScope = languages != null ? new ArrayList<String>(languages) : null;
this.entries = getPooledList(entries); this.entries = getPooledList(entries);
if (properties != null) if (properties != null)
this.properties = new HashMap<String, String>(properties); this.properties = new HashMap<String, String>(properties);
} }
/** /**
* A method to configure the provider. The initialization of provider from * A method to configure the provider. The initialization of provider from the extension point
* the extension point is done in 2 steps. First, the class is created as * is done in 2 steps. First, the class is created as an executable extension using the default
* an executable extension using the default provider. Then this method is * provider. Then this method is used to configure the provider. <br>
* used to configure the provider. * <br>
*<br><br>
* It is not allowed to reconfigure the provider. * It is not allowed to reconfigure the provider.
* *
* @param id - id of the provider. * @param id
* @param name - name of the provider to be presented to a user. * - id of the provider.
* @param languages - list of languages the {@code entries} provided for. * @param name
* {@code languages} can be {@code null}, in this case the {@code entries} * - name of the provider to be presented to a user.
* are provided for any language. * @param languages
* @param entries - the list of language settings entries this provider provides. * - list of languages the {@code entries} provided for. {@code languages} can be
* If {@code null} is passed, the provider creates an empty list. * {@code null}, in this case the {@code entries} are provided for any language.
* @param properties - custom properties as the means to customize providers. * @param entries
* - the list of language settings entries this provider provides. If {@code null} is
* passed, the provider creates an empty list.
* @param properties
* - custom properties as the means to customize providers.
* *
* @throws UnsupportedOperationException if an attempt to reconfigure provider is made. * @throws UnsupportedOperationException
* if an attempt to reconfigure provider is made.
*/ */
public void configureProvider(String id, String name, List<String> languages, public void configureProvider(String id, String name, List<String> languages,
List<ICLanguageSettingEntry> entries, Map<String, String> properties) { List<ICLanguageSettingEntry> entries, Map<String, String> properties) {
if (this.entries!=null || !this.properties.isEmpty()) if (this.entries != null || !this.properties.isEmpty())
throw new UnsupportedOperationException(SettingsModelMessages.getString("LanguageSettingsBaseProvider.CanBeConfiguredOnlyOnce")); //$NON-NLS-1$ throw new UnsupportedOperationException(
SettingsModelMessages.getString("LanguageSettingsBaseProvider.CanBeConfiguredOnlyOnce")); //$NON-NLS-1$
setId(id); setId(id);
setName(name); setName(name);
this.languageScope = languages!=null ? new ArrayList<String>(languages) : null; this.languageScope = languages != null ? new ArrayList<String>(languages) : null;
this.entries = getPooledList(entries); this.entries = getPooledList(entries);
if (properties != null) if (properties != null)
this.properties = new HashMap<String, String>(properties); this.properties = new HashMap<String, String>(properties);
} }
/** /**
* {@code LanguageSettingsBaseProvider} keeps the list of key-value pairs * {@code LanguageSettingsBaseProvider} keeps the list of key-value pairs so extenders of this
* so extenders of this class can customize the provider. The properties * class can customize the provider. The properties of {@code LanguageSettingsBaseProvider} come
* of {@code LanguageSettingsBaseProvider} come from the extension in plugin.xml * from the extension in plugin.xml although the extenders can provide their own method. <br>
* although the extenders can provide their own method. * <br>
* <br><br> * Please note that empty string value is treated as "default" value and the same as
* Please note that empty string value is treated as "default" value and * {@code null} and the same as missing property, which allows {@link #equals(Object)} evaluate
* the same as {@code null} and the same as missing property, which allows * the property as equal while comparing providers.
* {@link #equals(Object)} evaluate the property as equal while comparing providers.
* *
* @param key - property to check the value. * @param key
* - property to check the value.
* @return value of the property. If the property is missing returns empty string. * @return value of the property. If the property is missing returns empty string.
*/ */
public String getProperty(String key) { public String getProperty(String key) {
@ -155,11 +174,13 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* Convenience method to get boolean property. * Convenience method to get boolean property.
*
* @see #getProperty(String) * @see #getProperty(String)
* *
* @param key - property to check the value. * @param key
* @return boolean value of the property. If the property is missing or cannot be * - property to check the value.
* interpreted as boolean returns {@code false}. * @return boolean value of the property. If the property is missing or cannot be interpreted as
* boolean returns {@code false}.
*/ */
public boolean getPropertyBool(String key) { public boolean getPropertyBool(String key) {
return Boolean.parseBoolean(properties.get(key)); return Boolean.parseBoolean(properties.get(key));
@ -175,33 +196,46 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* @param languageId - language id. If {@code null}, then entries defined for * @param languageId
* the language scope are returned. See {@link #getLanguageScope()} * - language id. If {@code null}, then entries defined for the language scope are
* returned. See {@link #getLanguageScope()}
* *
* @return unmodifiable list of setting entries or {@code null} if no settings defined. * @return unmodifiable list of setting entries or {@code null} if no settings defined. the list
* the list is internally pooled and guaranteed to be the same object for equal * is internally pooled and guaranteed to be the same object for equal lists.
* lists. * @since 6.0
*/ */
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, String languageId) {
IResource rc, String languageId) { // For backwards compatibility
if (config != null) {
ICConfigurationDescription cfgDesc = config.getAdapter(ICConfigurationDescription.class);
if (cfgDesc != null) {
List<ICLanguageSettingEntry> entriesOld = getSettingEntries(cfgDesc, rc, languageId);
if (entriesOld != null) {
return entriesOld;
}
}
}
if (languageScope == null) { if (languageScope == null) {
return entries; return entries;
} }
for (String lang : languageScope) { for (String lang : languageScope) {
if (lang.equals(languageId)) { if (lang.equals(languageId)) {
return entries; return entries;
} }
} }
return null; return null;
} }
/** /**
* @return the unmodifiable list of languages this provider provides for. * @return the unmodifiable list of languages this provider provides for. If {@code null}, the
* If {@code null}, the provider provides for any language. * provider provides for any language.
*/ */
public List<String> getLanguageScope() { public List<String> getLanguageScope() {
if (languageScope==null) if (languageScope == null)
return null; return null;
return Collections.unmodifiableList(languageScope); return Collections.unmodifiableList(languageScope);
} }
@ -267,7 +301,8 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
} else if (other.properties == null) { } else if (other.properties == null) {
return false; return false;
} else { } else {
// The trouble to ensure default properties are equal to missing ones. // The trouble to ensure default properties are equal to missing
// ones.
Set<String> keys = new HashSet<String>(properties.keySet()); Set<String> keys = new HashSet<String>(properties.keySet());
keys.addAll(other.properties.keySet()); keys.addAll(other.properties.keySet());
for (String key : keys) { for (String key : keys) {

View file

@ -28,78 +28,90 @@ import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
/** /**
* A collection of utility methods to manage language settings providers. * A collection of utility methods to manage language settings providers. See
* See {@link ILanguageSettingsProvider}. * {@link ILanguageSettingsProvider}.
* *
* @since 5.4 * @since 5.4
*/ */
public class LanguageSettingsManager { public class LanguageSettingsManager {
/** /**
* Returns the list of setting entries of a certain kind (such as include paths) * Returns the list of setting entries of a certain kind (such as include paths) for the given
* for the given configuration description, resource and language. This is a * configuration description, resource and language. This is a combined list for all providers
* combined list for all providers taking into account settings of parent folder * taking into account settings of parent folder if settings for the given resource are not
* if settings for the given resource are not defined. For include paths both * defined. For include paths both local (#include "...") and system (#include <...>) entries
* local (#include "...") and system (#include <...>) entries are returned. * are returned.
* *
* @param cfgDescription - configuration description. * @param config
* @param rc - resource such as file or folder. * - configuration.
* @param languageId - language id. * @param rc
* @param kind - kind of language settings entries, such as * - resource such as file or folder.
* {@link ICSettingEntry#INCLUDE_PATH} etc. This is a binary flag * @param languageId
* and it is possible to specify composite kind. * - language id.
* Use {@link ICSettingEntry#ALL} to get all kinds. * @param kind
* - kind of language settings entries, such as {@link ICSettingEntry#INCLUDE_PATH}
* etc. This is a binary flag and it is possible to specify composite kind. Use
* {@link ICSettingEntry#ALL} to get all kinds.
* *
* @return the list of setting entries. * @return the list of setting entries.
* *
* @since 5.5 * @since 6.0
*/ */
public static List<ICLanguageSettingEntry> getSettingEntriesByKind(ICConfigurationDescription cfgDescription, IResource rc, String languageId, int kind) { public static List<ICLanguageSettingEntry> getSettingEntriesByKind(IBuildConfiguration config,
return LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, languageId, kind); IResource rc, String languageId, int kind) {
return LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, rc, languageId, kind);
} }
/** /**
* Returns the list of setting entries of the given provider * Returns the list of setting entries of the given provider for the given configuration
* for the given configuration description, resource and language. * description, resource and language. This method reaches to the parent folder of the resource
* This method reaches to the parent folder of the resource recursively * recursively if the resource does not define the entries for the given provider.
* if the resource does not define the entries for the given provider.
* *
* @param provider - language settings provider. * @param provider
* @param cfgDescription - configuration description. * - language settings provider.
* @param rc - resource such as file or folder. * @param config
* @param languageId - language id. * - configuration.
* @param rc
* - resource such as file or folder.
* @param languageId
* - language id.
* *
* @return the list of setting entries. Never returns {@code null} * @return the list of setting entries. Never returns {@code null} although individual providers
* although individual providers return {@code null} if no settings defined. * return {@code null} if no settings defined.
* @since 6.0
*/ */
public static List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree(ILanguageSettingsProvider provider, ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public static List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree(
return LanguageSettingsProvidersSerializer.getSettingEntriesUpResourceTree(provider, cfgDescription, rc, languageId); ILanguageSettingsProvider provider, IBuildConfiguration config, IResource rc, String languageId) {
return LanguageSettingsProvidersSerializer.getSettingEntriesUpResourceTree(provider, config, rc,
languageId);
} }
/** /**
* Get Language Settings Provider from the list of workspace providers, * Get Language Settings Provider from the list of workspace providers, see
* see {@link #getWorkspaceProviders()}. * {@link #getWorkspaceProviders()}.
* *
* @param id - id of provider to find. * @param id
* @return the workspace provider. If workspace provider is not defined * - id of provider to find.
* a new instance is created and returned. * @return the workspace provider. If workspace provider is not defined a new instance is
* created and returned.
*/ */
public static ILanguageSettingsProvider getWorkspaceProvider(String id) { public static ILanguageSettingsProvider getWorkspaceProvider(String id) {
return LanguageSettingsProvidersSerializer.getWorkspaceProvider(id); return LanguageSettingsProvidersSerializer.getWorkspaceProvider(id);
} }
/** /**
* Get Language Settings Providers defined in the workspace. That includes * Get Language Settings Providers defined in the workspace. That includes user-defined
* user-defined providers and after that providers defined as extensions via * providers and after that providers defined as extensions via
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. Note that this returns
* Note that this returns wrappers around workspace provider so underlying * wrappers around workspace provider so underlying provider could be replaced internally
* provider could be replaced internally without need to change configuration. * without need to change configuration. See also
* See also {@link #getRawProvider(ILanguageSettingsProvider)}. * {@link #getRawProvider(ILanguageSettingsProvider)}.
* *
* @return list of workspace providers. * @return list of workspace providers.
*/ */
@ -108,12 +120,12 @@ public class LanguageSettingsManager {
} }
/** /**
* Checks if the provider is a workspace level provider. * Checks if the provider is a workspace level provider. This method is intended to check
* This method is intended to check providers retrieved from a configuration. * providers retrieved from a configuration. Raw providers from
* Raw providers from {@link #getRawProvider(ILanguageSettingsProvider)} * {@link #getRawProvider(ILanguageSettingsProvider)} are not considered as workspace providers.
* are not considered as workspace providers.
* *
* @param provider - provider to check. * @param provider
* - provider to check.
* @return {@code true} if the given provider is workspace provider, {@code false} otherwise. * @return {@code true} if the given provider is workspace provider, {@code false} otherwise.
*/ */
public static boolean isWorkspaceProvider(ILanguageSettingsProvider provider) { public static boolean isWorkspaceProvider(ILanguageSettingsProvider provider) {
@ -123,11 +135,14 @@ public class LanguageSettingsManager {
/** /**
* Helper method to get to real underlying provider collecting entries as opposed to wrapper * Helper method to get to real underlying provider collecting entries as opposed to wrapper
* which is normally used for workspace provider. * which is normally used for workspace provider.
*
* @see LanguageSettingsProvidersSerializer#isWorkspaceProvider(ILanguageSettingsProvider) * @see LanguageSettingsProvidersSerializer#isWorkspaceProvider(ILanguageSettingsProvider)
* *
* @param provider - the provider to get raw provider for. Can be either workspace provider * @param provider
* or regular one. * - the provider to get raw provider for. Can be either workspace provider or
* @return raw underlying provider for workspace provider or provider itself if no wrapper is used. * regular one.
* @return raw underlying provider for workspace provider or provider itself if no wrapper is
* used.
*/ */
public static ILanguageSettingsProvider getRawProvider(ILanguageSettingsProvider provider) { public static ILanguageSettingsProvider getRawProvider(ILanguageSettingsProvider provider) {
if (isWorkspaceProvider(provider)) { if (isWorkspaceProvider(provider)) {
@ -136,38 +151,42 @@ public class LanguageSettingsManager {
return provider; return provider;
} }
/** /**
* Set and store in workspace area user defined providers. * Set and store in workspace area user defined providers.
* *
* @param providers - array of user defined workspace providers. * @param providers
* Note that those providers will shadow extension providers with the same ID. * - array of user defined workspace providers. Note that those providers will shadow
* All not shadowed extension providers will be added to the list to be present * extension providers with the same ID. All not shadowed extension providers will be
* as workspace providers. {@code null} is equivalent to passing an empty array * added to the list to be present as workspace providers. {@code null} is equivalent
* and so will reset workspace providers to match extension providers. * to passing an empty array and so will reset workspace providers to match extension
* @throws CoreException in case of problems (such as problems with persistence). * providers.
* @throws CoreException
* in case of problems (such as problems with persistence).
*/ */
public static void setWorkspaceProviders(List<ILanguageSettingsProvider> providers) throws CoreException { public static void setWorkspaceProviders(List<ILanguageSettingsProvider> providers) throws CoreException {
LanguageSettingsProvidersSerializer.setWorkspaceProviders(providers); LanguageSettingsProvidersSerializer.setWorkspaceProviders(providers);
} }
/** /**
* Copy language settings provider. It is different from clone() methods in that * Copy language settings provider. It is different from clone() methods in that it does not
* it does not throw {@code CloneNotSupportedException} but returns {@code null} * throw {@code CloneNotSupportedException} but returns {@code null} instead.
* instead.
* *
* @param provider - language settings provider to copy. * @param provider
* @param deep - {@code true} to request deep copy including copying settings entries * - language settings provider to copy.
* or {@code false} to return shallow copy with no settings entries. * @param deep
* - {@code true} to request deep copy including copying settings entries or
* {@code false} to return shallow copy with no settings entries.
* *
* @return a copy of the provider or null if copying is not possible. * @return a copy of the provider or null if copying is not possible.
*/ */
public static ILanguageSettingsEditableProvider getProviderCopy(ILanguageSettingsEditableProvider provider, boolean deep) { public static ILanguageSettingsEditableProvider getProviderCopy(
ILanguageSettingsEditableProvider provider, boolean deep) {
return LanguageSettingsExtensionManager.getProviderCopy(provider, deep); return LanguageSettingsExtensionManager.getProviderCopy(provider, deep);
} }
/** /**
* Returns list of provider id-s contributed by all extensions. * Returns list of provider id-s contributed by all extensions.
*
* @return the provider id-s. * @return the provider id-s.
*/ */
public static Set<String> getExtensionProviderIds() { public static Set<String> getExtensionProviderIds() {
@ -176,14 +195,17 @@ public class LanguageSettingsManager {
/** /**
* Get language settings provider defined via extension point * Get language settings provider defined via extension point
* {@code org.eclipse.cdt.core.LanguageSettingsProvider}. * {@code org.eclipse.cdt.core.LanguageSettingsProvider}. A new copy of the extension provider
* A new copy of the extension provider is returned. * is returned.
* *
* @param id - ID of the extension provider. * @param id
* @param deep - {@code true} to request deep copy including copying settings entries * - ID of the extension provider.
* or {@code false} to return shallow copy with no settings entries. * @param deep
* @return the copy of the extension provider if possible (i.e. for {@link ILanguageSettingsEditableProvider}) * - {@code true} to request deep copy including copying settings entries or
* or {@code null} if provider is not copyable. * {@code false} to return shallow copy with no settings entries.
* @return the copy of the extension provider if possible (i.e. for
* {@link ILanguageSettingsEditableProvider}) or {@code null} if provider is not
* copyable.
*/ */
public static ILanguageSettingsProvider getExtensionProviderCopy(String id, boolean deep) { public static ILanguageSettingsProvider getExtensionProviderCopy(String id, boolean deep) {
return LanguageSettingsExtensionManager.getExtensionProviderCopy(id, deep); return LanguageSettingsExtensionManager.getExtensionProviderCopy(id, deep);
@ -193,9 +215,11 @@ public class LanguageSettingsManager {
* Test if the provider is equal to the one defined via extension point * Test if the provider is equal to the one defined via extension point
* {@code org.eclipse.cdt.core.LanguageSettingsProvider}. * {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
* *
* @param provider - the provider to test. * @param provider
* @param deep - {@code true} to check for deep equality testing also settings entries * - the provider to test.
* or {@code false} to test shallow copy with no settings entries. * @param deep
* - {@code true} to check for deep equality testing also settings entries or
* {@code false} to test shallow copy with no settings entries.
* @return - {@code true} if the provider matches the extension or {@code false} otherwise. * @return - {@code true} if the provider matches the extension or {@code false} otherwise.
*/ */
public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider, boolean deep) { public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider, boolean deep) {
@ -203,24 +227,24 @@ public class LanguageSettingsManager {
} }
/** /**
* Find language IDs for the resource represented by resource description. * Find language IDs for the resource represented by resource description. Under the hood build
* Under the hood build component is inquired and the language IDs would * component is inquired and the language IDs would commonly come from the input type(s).
* commonly come from the input type(s).
* *
* @param rcDescription - resource description * @param rcDescription
* @return list of language IDs for the resource. The list can contain {@code null} ID. * - resource description
* Never returns {@code null} but empty list if no languages can be found. * @return list of language IDs for the resource. The list can contain {@code null} ID. Never
* returns {@code null} but empty list if no languages can be found.
* *
*/ */
public static List<String> getLanguages(ICResourceDescription rcDescription) { public static List<String> getLanguages(ICResourceDescription rcDescription) {
ICLanguageSetting[] languageSettings = null; ICLanguageSetting[] languageSettings = null;
if (rcDescription instanceof ICFileDescription) { if (rcDescription instanceof ICFileDescription) {
ICLanguageSetting languageSetting = ((ICFileDescription)rcDescription).getLanguageSetting(); ICLanguageSetting languageSetting = ((ICFileDescription) rcDescription).getLanguageSetting();
if (languageSetting != null) { if (languageSetting != null) {
languageSettings = new ICLanguageSetting[] {languageSetting}; languageSettings = new ICLanguageSetting[] { languageSetting };
} }
} else if (rcDescription instanceof ICFolderDescription) { } else if (rcDescription instanceof ICFolderDescription) {
languageSettings = ((ICFolderDescription)rcDescription).getLanguageSettings(); languageSettings = ((ICFolderDescription) rcDescription).getLanguageSettings();
} }
List<String> languageIds = new ArrayList<String>(); List<String> languageIds = new ArrayList<String>();
@ -228,7 +252,7 @@ public class LanguageSettingsManager {
for (ICLanguageSetting languageSetting : languageSettings) { for (ICLanguageSetting languageSetting : languageSettings) {
if (languageSetting != null) { if (languageSetting != null) {
String languageId = languageSetting.getLanguageId(); String languageId = languageSetting.getLanguageId();
if (! languageIds.contains(languageId)) { if (!languageIds.contains(languageId)) {
languageIds.add(languageId); languageIds.add(languageId);
} }
} }
@ -239,14 +263,14 @@ public class LanguageSettingsManager {
} }
/** /**
* Find language IDs for the resource in given build configuration. * Find language IDs for the resource in given build configuration. Under the hood build
* Under the hood build component is inquired and the language IDs would * component is inquired and the language IDs would commonly come from the input type(s).
* commonly come from the input type(s).
* *
* @param resource - the resource to find languages for. * @param resource
* - the resource to find languages for.
* @param cfgDescription * @param cfgDescription
* @return list of language IDs for the resource. * @return list of language IDs for the resource. Never returns {@code null} but empty list if
* Never returns {@code null} but empty list if no languages can be found. * no languages can be found.
*/ */
public static List<String> getLanguages(IResource resource, ICConfigurationDescription cfgDescription) { public static List<String> getLanguages(IResource resource, ICConfigurationDescription cfgDescription) {
List<String> languageIds = new ArrayList<String>(); List<String> languageIds = new ArrayList<String>();
@ -263,7 +287,8 @@ public class LanguageSettingsManager {
if (langId == null) { if (langId == null) {
// Try getting language from content types // Try getting language from content types
try { try {
ILanguage lang = LanguageManager.getInstance().getLanguageForFile((IFile) resource, cfgDescription); ILanguage lang = LanguageManager.getInstance().getLanguageForFile((IFile) resource,
cfgDescription);
if (lang != null) { if (lang != null) {
langId = lang.getId(); langId = lang.getId();
} }
@ -288,7 +313,8 @@ public class LanguageSettingsManager {
/** /**
* Adds a listener that will be notified of changes in language settings. * Adds a listener that will be notified of changes in language settings.
* *
* @param listener the listener to add * @param listener
* the listener to add
*/ */
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener);
@ -297,33 +323,35 @@ public class LanguageSettingsManager {
/** /**
* Removes a language settings change listener. * Removes a language settings change listener.
* *
* @param listener the listener to remove. * @param listener
* the listener to remove.
*/ */
public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener); LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener);
} }
/** /**
* Tells if the provider is meant to be shared between projects in workspace * Tells if the provider is meant to be shared between projects in workspace or belong to a
* or belong to a specific configuration. This attribute is defined in * specific configuration. This attribute is defined in
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. <br>
* <br>Note that only {@link ILanguageSettingsEditableProvider} can be owned by * Note that only {@link ILanguageSettingsEditableProvider} can be owned by a configuration.
* a configuration.
* *
* @param id - ID of the provider to inquire. * @param id
* @return {@code true} if the provider is designed to be shared, * - ID of the provider to inquire.
* {@code false} if configuration-owned. * @return {@code true} if the provider is designed to be shared, {@code false} if
* configuration-owned.
*/ */
public static boolean isPreferShared(String id) { public static boolean isPreferShared(String id) {
return LanguageSettingsExtensionManager.isPreferShared(id); return LanguageSettingsExtensionManager.isPreferShared(id);
} }
/** /**
* Tells if language settings entries of the provider are persisted with the project * Tells if language settings entries of the provider are persisted with the project (under
* (under .settings/ folder) or in workspace area. Persistence in the project area lets * .settings/ folder) or in workspace area. Persistence in the project area lets the entries
* the entries migrate with the project. * migrate with the project.
* *
* @param provider - provider to check the persistence mode. * @param provider
* - provider to check the persistence mode.
* @return {@code true} if LSE persisted with the project or {@code false} if in the workspace. * @return {@code true} if LSE persisted with the project or {@code false} if in the workspace.
*/ */
public static boolean isStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider) { public static boolean isStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider) {
@ -333,19 +361,23 @@ public class LanguageSettingsManager {
/** /**
* Define where language settings are persisted for the provider. * Define where language settings are persisted for the provider.
* *
* @param provider - provider to set the persistence mode. * @param provider
* @param storeEntriesWithProject - {@code true} if with the project, * - provider to set the persistence mode.
* {@code false} if in workspace area. * @param storeEntriesWithProject
* - {@code true} if with the project, {@code false} if in workspace area.
*/ */
public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider, boolean storeEntriesWithProject) { public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider,
boolean storeEntriesWithProject) {
LanguageSettingsProvidersSerializer.setStoringEntriesInProjectArea(provider, storeEntriesWithProject); LanguageSettingsProvidersSerializer.setStoringEntriesInProjectArea(provider, storeEntriesWithProject);
} }
/** /**
* Save language settings providers of a project to persistent storage. * Save language settings providers of a project to persistent storage.
* *
* @param prjDescription - project description of the project. * @param prjDescription
* @throws CoreException if something goes wrong. * - project description of the project.
* @throws CoreException
* if something goes wrong.
*/ */
public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException { public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription);
@ -354,7 +386,8 @@ public class LanguageSettingsManager {
/** /**
* Save language settings providers of the workspace (global providers) to persistent storage. * Save language settings providers of the workspace (global providers) to persistent storage.
* *
* @throws CoreException if something goes wrong. * @throws CoreException
* if something goes wrong.
*/ */
public static void serializeLanguageSettingsWorkspace() throws CoreException { public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
@ -363,15 +396,16 @@ public class LanguageSettingsManager {
/** /**
* Save language settings providers of a project to persistent storage in a background job. * Save language settings providers of a project to persistent storage in a background job.
* *
* @param prjDescription - project description of the project. * @param prjDescription
* - project description of the project.
*/ */
public static void serializeLanguageSettingsInBackground(ICProjectDescription prjDescription) { public static void serializeLanguageSettingsInBackground(ICProjectDescription prjDescription) {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsInBackground(prjDescription); LanguageSettingsProvidersSerializer.serializeLanguageSettingsInBackground(prjDescription);
} }
/** /**
* Save language settings providers of the workspace (global providers) to persistent storage * Save language settings providers of the workspace (global providers) to persistent storage in
* in a background job. * a background job.
*/ */
public static void serializeLanguageSettingsWorkspaceInBackground() { public static void serializeLanguageSettingsWorkspaceInBackground() {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspaceInBackground(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspaceInBackground();
@ -380,11 +414,13 @@ public class LanguageSettingsManager {
/** /**
* Create a list of providers with intention to assign to a configuration description. * Create a list of providers with intention to assign to a configuration description.
* *
* The list will contain global providers for ones where attribute "prefer-non-shared" is {@code true} * The list will contain global providers for ones where attribute "prefer-non-shared" is
* and a new copy for those where attribute "prefer-non-shared" is {@code false}. Attribute "prefer-non-shared" * {@code true} and a new copy for those where attribute "prefer-non-shared" is {@code false}.
* is defined in extension point {@code org.eclipse.cdt.core.LanguageSettingsProvider}. * Attribute "prefer-non-shared" is defined in extension point
* {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
* *
* @param ids - list of providers id which cannot be {@code null}. * @param ids
* - list of providers id which cannot be {@code null}.
* @return a list of language settings providers with given ids. * @return a list of language settings providers with given ids.
* *
* @since 5.5 * @since 5.5

View file

@ -24,6 +24,7 @@ import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSetting
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage;
import org.eclipse.cdt.internal.core.settings.model.CConfigurationSpecSettings; import org.eclipse.cdt.internal.core.settings.model.CConfigurationSpecSettings;
import org.eclipse.cdt.internal.core.settings.model.IInternalCCfgInfo; import org.eclipse.cdt.internal.core.settings.model.IInternalCCfgInfo;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
@ -34,19 +35,21 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
/** /**
* This class is the base class for language settings providers able to serialize * This class is the base class for language settings providers able to
* into XML storage. * serialize into XML storage. Although this class has setter methods, by design
* Although this class has setter methods, by design its instances are not editable in UI * its instances are not editable in UI nor instances can be assigned to a
* nor instances can be assigned to a configuration (cannot be global or non-shared). * configuration (cannot be global or non-shared). Implement
* Implement {@link ILanguageSettingsEditableProvider} interface for that. There is a generic * {@link ILanguageSettingsEditableProvider} interface for that. There is a
* implementation of this interface available to be used, see {@link LanguageSettingsGenericProvider}. * generic implementation of this interface available to be used, see
* {@link LanguageSettingsGenericProvider}.
* *
* For more on the suggested way of extending this class see the description of * For more on the suggested way of extending this class see the description of
* {@link ILanguageSettingsProvider}. * {@link ILanguageSettingsProvider}.
* *
* @since 5.4 * @since 5.4
*/ */
public class LanguageSettingsSerializableProvider extends LanguageSettingsBaseProvider implements ILanguageSettingsBroadcastingProvider { public class LanguageSettingsSerializableProvider extends LanguageSettingsBaseProvider
implements ILanguageSettingsBroadcastingProvider {
protected static final String ATTR_ID = LanguageSettingsProvidersSerializer.ATTR_ID; protected static final String ATTR_ID = LanguageSettingsProvidersSerializer.ATTR_ID;
protected static final String ATTR_NAME = LanguageSettingsProvidersSerializer.ATTR_NAME; protected static final String ATTR_NAME = LanguageSettingsProvidersSerializer.ATTR_NAME;
protected static final String ATTR_CLASS = LanguageSettingsProvidersSerializer.ATTR_CLASS; protected static final String ATTR_CLASS = LanguageSettingsProvidersSerializer.ATTR_CLASS;
@ -56,8 +59,9 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
private LanguageSettingsSerializableStorage fStorage = new LanguageSettingsSerializableStorage(); private LanguageSettingsSerializableStorage fStorage = new LanguageSettingsSerializableStorage();
/** /**
* Default constructor. This constructor has to be always followed with setting id and name of the provider. * Default constructor. This constructor has to be always followed with
* This constructor is necessary to instantiate the class via the extension point in plugin.xml. * setting id and name of the provider. This constructor is necessary to
* instantiate the class via the extension point in plugin.xml.
*/ */
public LanguageSettingsSerializableProvider() { public LanguageSettingsSerializableProvider() {
super(); super();
@ -66,8 +70,10 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Constructor. * Constructor.
* *
* @param id - id of the provider. * @param id
* @param name - name of the provider. Note that this name shows up in UI. * - id of the provider.
* @param name
* - name of the provider. Note that this name shows up in UI.
*/ */
public LanguageSettingsSerializableProvider(String id, String name) { public LanguageSettingsSerializableProvider(String id, String name) {
super(id, name); super(id, name);
@ -84,21 +90,24 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
@Override @Override
public void configureProvider(String id, String name, List<String> languages, List<ICLanguageSettingEntry> entries, Map<String, String> properties) { public void configureProvider(String id, String name, List<String> languages,
List<ICLanguageSettingEntry> entries, Map<String, String> properties) {
// do not pass entries to super, keep them in local storage // do not pass entries to super, keep them in local storage
super.configureProvider(id, name, languages, null, properties); super.configureProvider(id, name, languages, null, properties);
fStorage.clear(); fStorage.clear();
if (entries!=null) { if (entries != null) {
// note that these entries are intended to be retrieved by LanguageSettingsManager.getSettingEntriesUpResourceTree() // note that these entries are intended to be retrieved by
// LanguageSettingsManager.getSettingEntriesUpResourceTree()
// when the whole resource hierarchy has been traversed up // when the whole resource hierarchy has been traversed up
setSettingEntries(null, null, null, entries); setSettingEntries(null, null, null, entries);
} }
} }
/** /**
* @return {@code true} if the provider does not keep any settings yet or {@code false} if there are some. * @return {@code true} if the provider does not keep any settings yet or
* {@code false} if there are some.
*/ */
public boolean isEmpty() { public boolean isEmpty() {
return fStorage.isEmpty(); return fStorage.isEmpty();
@ -107,8 +116,9 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Sets the language scope of the provider. * Sets the language scope of the provider.
* *
* @param languages - the list of languages this provider provides for. * @param languages
* If {@code null}, the provider provides for any language. * - the list of languages this provider provides for. If
* {@code null}, the provider provides for any language.
* *
* @see #getLanguageScope() * @see #getLanguageScope()
*/ */
@ -121,46 +131,57 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Clears all the entries for all configurations, all resources and all languages. * Clears all the entries for all configurations, all resources and all
* languages.
*/ */
public void clear() { public void clear() {
fStorage.clear(); fStorage.clear();
} }
/** /**
* Sets language settings entries for the provider. * Sets language settings entries for the provider. Note that the entries
* Note that the entries are not persisted at that point. Use this method to set * are not persisted at that point. Use this method to set the entries for
* the entries for all resources one by one and after all done persist in one shot * all resources one by one and after all done persist in one shot using
* using {@link #serializeLanguageSettings(ICConfigurationDescription)}. * {@link #serializeLanguageSettings(ICConfigurationDescription)}. See for
* See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} * example {@code AbstractBuildCommandParser} and
* in build plugins. * {@code AbstractBuiltinSpecsDetector} in build plugins.
* *
* @param cfgDescription - configuration description. * @param config
* @param rc - resource such as file or folder. If {@code null} the entries are * - configuration.
* considered to be being defined as default entries for resources. * @param rc
* @param languageId - language id. If {@code null}, then entries are considered * - resource such as file or folder. If {@code null} the entries
* to be defined for the language scope. See {@link #getLanguageScope()} * are considered to be being defined as default entries for
* @param entries - language settings entries to set. * resources.
* @param languageId
* - language id. If {@code null}, then entries are considered to
* be defined for the language scope. See
* {@link #getLanguageScope()}
* @param entries
* - language settings entries to set.
* @since 6.0
*/ */
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, public void setSettingEntries(IBuildConfiguration config, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries) { List<? extends ICLanguageSettingEntry> entries) {
String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null; String rcProjectPath = rc != null ? rc.getProjectRelativePath().toString() : null;
fStorage.setSettingEntries(rcProjectPath, languageId, entries); fStorage.setSettingEntries(rcProjectPath, languageId, entries);
} }
/** /**
* {@inheritDoc} * {@inheritDoc} <br>
* Note that this list is <b>unmodifiable</b>. To modify the list copy it,
* change and use
* {@link #setSettingEntries(IBuildConfiguration, IResource, String, List)}
* . <br>
* <br> * <br>
* Note that this list is <b>unmodifiable</b>. To modify the list copy it, change and use * Note also that <b>you can compare these lists with simple equality
* {@link #setSettingEntries(ICConfigurationDescription, IResource, String, List)}. * operator ==</b>, as the lists themselves are backed by
* <br><br> * WeakHashSet<List<ICLanguageSettingEntry>> where identical copies (deep
* Note also that <b>you can compare these lists with simple equality operator ==</b>, * comparison is used) are replaced with the same one instance.
* as the lists themselves are backed by WeakHashSet<List<ICLanguageSettingEntry>> where
* identical copies (deep comparison is used) are replaced with the same one instance.
*/ */
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null; String languageId) {
String rcProjectPath = rc != null ? rc.getProjectRelativePath().toString() : null;
List<ICLanguageSettingEntry> entries = fStorage.getSettingEntries(rcProjectPath, languageId); List<ICLanguageSettingEntry> entries = fStorage.getSettingEntries(rcProjectPath, languageId);
if (entries == null) { if (entries == null) {
if (languageId != null && (languageScope == null || languageScope.contains(languageId))) { if (languageId != null && (languageScope == null || languageScope.contains(languageId))) {
@ -172,25 +193,22 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Serialize the provider under parent XML element. * Serialize the provider under parent XML element. This is convenience
* This is convenience method not intended to be overridden on purpose. * method not intended to be overridden on purpose. Override
* Override {@link #serializeAttributes(Element)} or * {@link #serializeAttributes(Element)} or
* {@link #serializeEntries(Element)} instead. * {@link #serializeEntries(Element)} instead.
* *
* @param parentElement - element where to serialize. * @param parentElement
* - element where to serialize.
* @return - newly created "provider" element. That element will already be * @return - newly created "provider" element. That element will already be
* attached to the parent element. * attached to the parent element.
*/ */
final public Element serialize(Element parentElement) { final public Element serialize(Element parentElement) {
/* /*
<provider id="provider.id" ...> * <provider id="provider.id" ...> <language-scope id="lang.id"/>
<language-scope id="lang.id"/> * <language id="lang.id"> <resource project-relative-path="/"> <entry
<language id="lang.id"> * flags="" kind="includePath" name="path"/> </resource> </language>
<resource project-relative-path="/"> * </provider>
<entry flags="" kind="includePath" name="path"/>
</resource>
</language>
</provider>
*/ */
Element elementProvider = serializeAttributes(parentElement); Element elementProvider = serializeAttributes(parentElement);
serializeEntries(elementProvider); serializeEntries(elementProvider);
@ -199,14 +217,17 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Serialize the provider attributes under parent XML element. That is * Serialize the provider attributes under parent XML element. That is
* equivalent to serializing everything (including language scope) except entries. * equivalent to serializing everything (including language scope) except
* entries.
* *
* @param parentElement - element where to serialize. * @param parentElement
* - element where to serialize.
* @return - newly created "provider" element. That element will already be * @return - newly created "provider" element. That element will already be
* attached to the parent element. * attached to the parent element.
*/ */
public Element serializeAttributes(Element parentElement) { public Element serializeAttributes(Element parentElement) {
// Keeps pairs: key, value. See JavaDoc XmlUtil.appendElement(Node, String, String[]). // Keeps pairs: key, value. See JavaDoc XmlUtil.appendElement(Node,
// String, String[]).
List<String> attributes = new ArrayList<String>(); List<String> attributes = new ArrayList<String>();
attributes.add(ATTR_ID); attributes.add(ATTR_ID);
@ -220,11 +241,12 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
attributes.add(entry.getValue()); attributes.add(entry.getValue());
} }
Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, attributes.toArray(new String[0])); Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER,
attributes.toArray(new String[0]));
if (languageScope!=null) { if (languageScope != null) {
for (String langId : languageScope) { for (String langId : languageScope) {
XmlUtil.appendElement(elementProvider, ELEM_LANGUAGE_SCOPE, new String[] {ATTR_ID, langId}); XmlUtil.appendElement(elementProvider, ELEM_LANGUAGE_SCOPE, new String[] { ATTR_ID, langId });
} }
} }
return elementProvider; return elementProvider;
@ -232,21 +254,24 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Serialize the provider entries under parent XML element. * Serialize the provider entries under parent XML element.
* @param elementProvider - element where to serialize the entries. *
* @param elementProvider
* - element where to serialize the entries.
*/ */
public void serializeEntries(Element elementProvider) { public void serializeEntries(Element elementProvider) {
fStorage.serializeEntries(elementProvider); fStorage.serializeEntries(elementProvider);
} }
/** /**
* Convenience method to persist language settings entries for the project or * Convenience method to persist language settings entries for the project
* workspace as often-used operation. * or workspace as often-used operation. Note that configuration description
* Note that configuration description is passed as an argument but the * is passed as an argument but the current implementation saves all
* current implementation saves all configurations. * configurations.
* *
* @param cfgDescription - configuration description. * @param cfgDescription
* If not {@code null}, all providers of the project are serialized. * - configuration description. If not {@code null}, all
* If {@code null}, global workspace providers are serialized. * providers of the project are serialized. If {@code null},
* global workspace providers are serialized.
* *
* @return - status of operation. * @return - status of operation.
*/ */
@ -259,26 +284,29 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
LanguageSettingsManager.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
} }
} catch (CoreException e) { } catch (CoreException e) {
status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); //$NON-NLS-1$ status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, IStatus.ERROR,
"Error serializing language settings", e); //$NON-NLS-1$
CCorePlugin.log(status); CCorePlugin.log(status);
} }
return status; return status;
} }
/** /**
* Convenience method to persist language settings entries in background for the project or * Convenience method to persist language settings entries in background for
* workspace as often-used operation. * the project or workspace as often-used operation. Note that configuration
* Note that configuration description is passed as an argument but the * description is passed as an argument but the current implementation saves
* current implementation saves all configurations. * all configurations.
* *
* @param cfgDescription - configuration description. * @param cfgDescription
* If not {@code null}, all providers of the project are serialized. * - configuration description. If not {@code null}, all
* If {@code null}, global workspace providers are serialized. * providers of the project are serialized. If {@code null},
* global workspace providers are serialized.
*/ */
public void serializeLanguageSettingsInBackground(ICConfigurationDescription cfgDescription) { public void serializeLanguageSettingsInBackground(ICConfigurationDescription cfgDescription) {
if (cfgDescription != null) { if (cfgDescription != null) {
if (isLanguageSettingsProviderStoreChanged(cfgDescription)) { if (isLanguageSettingsProviderStoreChanged(cfgDescription)) {
LanguageSettingsManager.serializeLanguageSettingsInBackground(cfgDescription.getProjectDescription()); LanguageSettingsManager
.serializeLanguageSettingsInBackground(cfgDescription.getProjectDescription());
} }
} else { } else {
LanguageSettingsManager.serializeLanguageSettingsWorkspaceInBackground(); LanguageSettingsManager.serializeLanguageSettingsWorkspaceInBackground();
@ -286,12 +314,13 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Compare provider store with cached persistent store used to calculate delta. * Compare provider store with cached persistent store used to calculate
* delta.
*/ */
private boolean isLanguageSettingsProviderStoreChanged(ICConfigurationDescription cfgDescription) { private boolean isLanguageSettingsProviderStoreChanged(ICConfigurationDescription cfgDescription) {
if (cfgDescription instanceof IInternalCCfgInfo) { if (cfgDescription instanceof IInternalCCfgInfo) {
try { try {
CConfigurationSpecSettings ss = ((IInternalCCfgInfo)cfgDescription).getSpecSettings(); CConfigurationSpecSettings ss = ((IInternalCCfgInfo) cfgDescription).getSpecSettings();
if (ss != null) { if (ss != null) {
return ss.isLanguageSettingsProviderStoreChanged(this); return ss.isLanguageSettingsProviderStoreChanged(this);
} }
@ -305,19 +334,20 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Load provider from XML provider element. * Load provider from XML provider element. This is convenience method not
* This is convenience method not intended to be overridden on purpose. * intended to be overridden on purpose. Override
* Override {@link #loadAttributes(Element)} or * {@link #loadAttributes(Element)} or {@link #loadEntries(Element)}
* {@link #loadEntries(Element)} instead. * instead.
* *
* @param providerNode - XML element "provider" to load provider from. * @param providerNode
* - XML element "provider" to load provider from.
*/ */
final public void load(Element providerNode) { final public void load(Element providerNode) {
fStorage.clear(); fStorage.clear();
languageScope = null; languageScope = null;
// provider/configuration/language/resource/entry // provider/configuration/language/resource/entry
if (providerNode!=null) { if (providerNode != null) {
loadAttributes(providerNode); loadAttributes(providerNode);
loadEntries(providerNode); loadEntries(providerNode);
} }
@ -327,7 +357,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
* Determine and set language scope from given XML node. * Determine and set language scope from given XML node.
*/ */
private void loadLanguageScopeElement(Node parentNode) { private void loadLanguageScopeElement(Node parentNode) {
if (languageScope==null) { if (languageScope == null) {
languageScope = new ArrayList<String>(); languageScope = new ArrayList<String>();
} }
String id = XmlUtil.determineAttributeValue(parentNode, ATTR_ID); String id = XmlUtil.determineAttributeValue(parentNode, ATTR_ID);
@ -337,7 +367,9 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Load attributes from XML provider element. * Load attributes from XML provider element.
* @param providerNode - XML element "provider" to load attributes from. *
* @param providerNode
* - XML element "provider" to load attributes from.
*/ */
public void loadAttributes(Element providerNode) { public void loadAttributes(Element providerNode) {
String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID); String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID);
@ -345,9 +377,9 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
properties.clear(); properties.clear();
NamedNodeMap attrs = providerNode.getAttributes(); NamedNodeMap attrs = providerNode.getAttributes();
for (int i=0; i<attrs.getLength(); i++) { for (int i = 0; i < attrs.getLength(); i++) {
Node attr = attrs.item(i); Node attr = attrs.item(i);
if (attr.getNodeType()==Node.ATTRIBUTE_NODE) { if (attr.getNodeType() == Node.ATTRIBUTE_NODE) {
String key = attr.getNodeName(); String key = attr.getNodeName();
if (!key.equals(ATTR_ID) && !key.equals(ATTR_NAME) && !key.equals(ATTR_CLASS)) { if (!key.equals(ATTR_ID) && !key.equals(ATTR_NAME) && !key.equals(ATTR_CLASS)) {
String value = attr.getNodeValue(); String value = attr.getNodeValue();
@ -360,9 +392,9 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
this.setName(providerName); this.setName(providerName);
NodeList nodes = providerNode.getChildNodes(); NodeList nodes = providerNode.getChildNodes();
for (int i=0;i<nodes.getLength();i++) { for (int i = 0; i < nodes.getLength(); i++) {
Node elementNode = nodes.item(i); Node elementNode = nodes.item(i);
if(elementNode.getNodeType() != Node.ELEMENT_NODE) if (elementNode.getNodeType() != Node.ELEMENT_NODE)
continue; continue;
if (ELEM_LANGUAGE_SCOPE.equals(elementNode.getNodeName())) { if (ELEM_LANGUAGE_SCOPE.equals(elementNode.getNodeName())) {
@ -374,37 +406,44 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Load provider entries from XML provider element. * Load provider entries from XML provider element.
* @param providerNode - parent XML element "provider" where entries are defined. *
* @param providerNode
* - parent XML element "provider" where entries are defined.
*/ */
public void loadEntries(Element providerNode) { public void loadEntries(Element providerNode) {
fStorage.loadEntries(providerNode); fStorage.loadEntries(providerNode);
} }
/** /**
* Set a custom property of the provider. * Set a custom property of the provider. <br>
* <br><br> * <br>
* A note of caution - do not use default values for a provider which are different * A note of caution - do not use default values for a provider which are
* from empty or {@code null} value. When providers are checked for equality * different from empty or {@code null} value. When providers are checked
* (during internal operations in core) the missing properties are evaluated as * for equality (during internal operations in core) the missing properties
* empty ones. * are evaluated as empty ones.
* *
* @see LanguageSettingsBaseProvider#getProperty(String) * @see LanguageSettingsBaseProvider#getProperty(String)
* *
* @param key - name of the property. * @param key
* @param value - value of the property. * - name of the property.
* If value is {@code null} the property is removed from the list. * @param value
* - value of the property. If value is {@code null} the property
* is removed from the list.
*/ */
public void setProperty(String key, String value) { public void setProperty(String key, String value) {
properties.put(key, value); properties.put(key, value);
} }
/** /**
* Set a custom boolean property of the provider. * Set a custom boolean property of the provider. <br>
* <br>Please, note that default value is always {@code false}. * Please, note that default value is always {@code false}.
*
* @see LanguageSettingsBaseProvider#getProperty(String) * @see LanguageSettingsBaseProvider#getProperty(String)
* *
* @param key - name of the property. * @param key
* @param value - {@code boolean} value of the property. * - name of the property.
* @param value
* - {@code boolean} value of the property.
*/ */
public void setPropertyBool(String key, boolean value) { public void setPropertyBool(String key, boolean value) {
properties.put(key, Boolean.toString(value)); properties.put(key, Boolean.toString(value));
@ -412,11 +451,12 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* See {@link #cloneShallow()}. This method is extracted to avoid expressing * See {@link #cloneShallow()}. This method is extracted to avoid expressing
* {@link #clone()} via {@link #cloneShallow()}. Do not inline to "optimize"! * {@link #clone()} via {@link #cloneShallow()}. Do not inline to
* "optimize"!
*/ */
private LanguageSettingsSerializableProvider cloneShallowInternal() throws CloneNotSupportedException { private LanguageSettingsSerializableProvider cloneShallowInternal() throws CloneNotSupportedException {
LanguageSettingsSerializableProvider clone = (LanguageSettingsSerializableProvider)super.clone(); LanguageSettingsSerializableProvider clone = (LanguageSettingsSerializableProvider) super.clone();
if (languageScope!=null) if (languageScope != null)
clone.languageScope = new ArrayList<String>(languageScope); clone.languageScope = new ArrayList<String>(languageScope);
clone.properties = new HashMap<String, String>(properties); clone.properties = new HashMap<String, String>(properties);
@ -425,11 +465,12 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Shallow clone of the provider. "Shallow" is defined here as the exact copy except that * Shallow clone of the provider. "Shallow" is defined here as the exact
* the copy will have zero language settings entries. * copy except that the copy will have zero language settings entries.
* *
* @return shallow copy of the provider. * @return shallow copy of the provider.
* @throws CloneNotSupportedException in case {@link #clone()} throws the exception. * @throws CloneNotSupportedException
* in case {@link #clone()} throws the exception.
*/ */
protected LanguageSettingsSerializableProvider cloneShallow() throws CloneNotSupportedException { protected LanguageSettingsSerializableProvider cloneShallow() throws CloneNotSupportedException {
return cloneShallowInternal(); return cloneShallowInternal();

View file

@ -42,9 +42,11 @@ import org.eclipse.cdt.internal.core.parser.ParserSettings2;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages; import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages;
import org.eclipse.cdt.utils.EFSExtensionManager; import org.eclipse.cdt.utils.EFSExtensionManager;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
@ -52,14 +54,15 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS; import org.eclipse.osgi.util.NLS;
/** /**
* Implementation of {@link IScannerInfoProvider} backed by the list of * Implementation of {@link IScannerInfoProvider} backed by the list of language settings providers
* language settings providers of "default settings configuration" * of "default settings configuration" (see
* (see {@link ICProjectDescription#getDefaultSettingConfiguration()}). * {@link ICProjectDescription#getDefaultSettingConfiguration()}).
* *
* @see IScannerInfo#getIncludePaths() * @see IScannerInfo#getIncludePaths()
* *
*/ */
public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider, ILanguageSettingsChangeListener { public class LanguageSettingsScannerInfoProvider
implements IScannerInfoProvider, ILanguageSettingsChangeListener {
private static final String FRAMEWORK_PRIVATE_HEADERS_INCLUDE = "/__framework__.framework/PrivateHeaders/__header__"; //$NON-NLS-1$ private static final String FRAMEWORK_PRIVATE_HEADERS_INCLUDE = "/__framework__.framework/PrivateHeaders/__header__"; //$NON-NLS-1$
private static final String FRAMEWORK_HEADERS_INCLUDE = "/__framework__.framework/Headers/__header__"; //$NON-NLS-1$ private static final String FRAMEWORK_HEADERS_INCLUDE = "/__framework__.framework/Headers/__header__"; //$NON-NLS-1$
private static final ExtendedScannerInfo DUMMY_SCANNER_INFO = new ExtendedScannerInfo(); private static final ExtendedScannerInfo DUMMY_SCANNER_INFO = new ExtendedScannerInfo();
@ -69,20 +72,26 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
@Override @Override
public ExtendedScannerInfo getScannerInformation(IResource rc) { public ExtendedScannerInfo getScannerInformation(IResource rc) {
IProject project = rc.getProject(); IProject project = rc.getProject();
if (project==null) if (project == null)
return DUMMY_SCANNER_INFO; return DUMMY_SCANNER_INFO;
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance()
if (prjDescription==null) .getProjectDescription(project, false);
if (prjDescription == null)
return DUMMY_SCANNER_INFO; return DUMMY_SCANNER_INFO;
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
if (cfgDescription==null) if (cfgDescription == null)
return DUMMY_SCANNER_INFO;
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
if (config == null)
return DUMMY_SCANNER_INFO; return DUMMY_SCANNER_INFO;
List<String> languageIds = LanguageSettingsManager.getLanguages(rc, cfgDescription); List<String> languageIds = LanguageSettingsManager.getLanguages(rc, cfgDescription);
if (languageIds.isEmpty()) { if (languageIds.isEmpty()) {
String msg = NLS.bind(SettingsModelMessages.getString("LanguageSettingsScannerInfoProvider.UnableToDetermineLanguage"), rc.toString()); //$NON-NLS-1$ String msg = NLS.bind(SettingsModelMessages.getString(
"LanguageSettingsScannerInfoProvider.UnableToDetermineLanguage"), rc.toString()); //$NON-NLS-1$
IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception()); IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception());
CCorePlugin.log(status); CCorePlugin.log(status);
return DUMMY_SCANNER_INFO; return DUMMY_SCANNER_INFO;
@ -95,24 +104,24 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
LinkedHashSet<ICLanguageSettingEntry> macroEntries = new LinkedHashSet<ICLanguageSettingEntry>(); LinkedHashSet<ICLanguageSettingEntry> macroEntries = new LinkedHashSet<ICLanguageSettingEntry>();
for (String langId : languageIds) { for (String langId : languageIds) {
List<ICLanguageSettingEntry> incSys = LanguageSettingsProvidersSerializer.getSystemSettingEntriesByKind(cfgDescription, rc, langId, List<ICLanguageSettingEntry> incSys = LanguageSettingsProvidersSerializer
ICSettingEntry.INCLUDE_PATH); .getSystemSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_PATH);
includePathEntries.addAll(incSys); includePathEntries.addAll(incSys);
List<ICLanguageSettingEntry> incLocal = LanguageSettingsProvidersSerializer.getLocalSettingEntriesByKind(cfgDescription, rc, langId, List<ICLanguageSettingEntry> incLocal = LanguageSettingsProvidersSerializer
ICSettingEntry.INCLUDE_PATH); .getLocalSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_PATH);
includePathLocalEntries.addAll(incLocal); includePathLocalEntries.addAll(incLocal);
List<ICLanguageSettingEntry> incFiles = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId, List<ICLanguageSettingEntry> incFiles = LanguageSettingsProvidersSerializer
ICSettingEntry.INCLUDE_FILE); .getSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_FILE);
includeFileEntries.addAll(incFiles); includeFileEntries.addAll(incFiles);
List<ICLanguageSettingEntry> macroFiles = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId, List<ICLanguageSettingEntry> macroFiles = LanguageSettingsProvidersSerializer
ICSettingEntry.MACRO_FILE); .getSettingEntriesByKind(config, rc, langId, ICSettingEntry.MACRO_FILE);
macroFileEntries.addAll(macroFiles); macroFileEntries.addAll(macroFiles);
List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId, List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer
ICSettingEntry.MACRO); .getSettingEntriesByKind(config, rc, langId, ICSettingEntry.MACRO);
macroEntries.addAll(macros); macroEntries.addAll(macros);
} }
@ -123,13 +132,14 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
Map<String, String> definedMacros = new HashMap<String, String>(); Map<String, String> definedMacros = new HashMap<String, String>();
for (ICLanguageSettingEntry entry : macroEntries) { for (ICLanguageSettingEntry entry : macroEntries) {
ICMacroEntry macroEntry = (ICMacroEntry)entry; ICMacroEntry macroEntry = (ICMacroEntry) entry;
String name = macroEntry.getName(); String name = macroEntry.getName();
String value = macroEntry.getValue(); String value = macroEntry.getValue();
definedMacros.put(name, value); definedMacros.put(name, value);
} }
ExtendedScannerInfo extendedScannerInfo = new ExtendedScannerInfo(definedMacros, includePaths, macroFiles, includeFiles, includePathsLocal); ExtendedScannerInfo extendedScannerInfo = new ExtendedScannerInfo(definedMacros, includePaths,
macroFiles, includeFiles, includePathsLocal);
extendedScannerInfo.setParserSettings(new ParserSettings2(project)); extendedScannerInfo.setParserSettings(new ParserSettings2(project));
return extendedScannerInfo; return extendedScannerInfo;
} }
@ -146,8 +156,8 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
} }
/** /**
* Get build working directory for the provided configuration. Returns * Get build working directory for the provided configuration. Returns project location if none
* project location if none defined. * defined.
*/ */
private static IPath getBuildCWD(ICConfigurationDescription cfgDescription) { private static IPath getBuildCWD(ICConfigurationDescription cfgDescription) {
IPath buildCWD = cfgDescription.getBuildSetting().getBuilderCWD(); IPath buildCWD = cfgDescription.getBuildSetting().getBuilderCWD();
@ -180,11 +190,14 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
} }
/** /**
* Resolve location to file system location in a configuration context. * Resolve location to file system location in a configuration context. Resolving includes
* Resolving includes replacing build/environment variables with values, making relative path absolute etc. * replacing build/environment variables with values, making relative path absolute etc.
* *
* @param location - location to resolve. If relative, it is taken to be rooted in build working directory. * @param location
* @param cfgDescription - the configuration context. * - location to resolve. If relative, it is taken to be rooted in build working
* directory.
* @param cfgDescription
* - the configuration context.
* @return resolved file system location. * @return resolved file system location.
*/ */
private static String resolveEntry(String location, ICConfigurationDescription cfgDescription) { private static String resolveEntry(String location, ICConfigurationDescription cfgDescription) {
@ -225,7 +238,8 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
/** /**
* Convert path delimiters to OS representation avoiding using org.eclipse.core.runtime.Path * Convert path delimiters to OS representation avoiding using org.eclipse.core.runtime.Path
* being careful to preserve "../" segments and not let collapsing them which is not correct for symbolic links. * being careful to preserve "../" segments and not let collapsing them which is not correct for
* symbolic links.
*/ */
private String toOSString(String loc) { private String toOSString(String loc) {
// use OS file separators (i.e. '\' on Windows) // use OS file separators (i.e. '\' on Windows)
@ -239,16 +253,19 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
* Convert the path entries to absolute file system locations represented as String array. * Convert the path entries to absolute file system locations represented as String array.
* Resolve the entries which are not resolved. * Resolve the entries which are not resolved.
* *
* @param entriesPath - language settings path entries. * @param entriesPath
* @param cfgDescription - configuration description for resolving entries. * - language settings path entries.
* @param cfgDescription
* - configuration description for resolving entries.
* @return array of the locations. * @return array of the locations.
*/ */
private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath, ICConfigurationDescription cfgDescription) { private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath,
ICConfigurationDescription cfgDescription) {
List<String> locations = new ArrayList<String>(entriesPath.size()); List<String> locations = new ArrayList<String>(entriesPath.size());
for (ICLanguageSettingEntry entry : entriesPath) { for (ICLanguageSettingEntry entry : entriesPath) {
ICPathEntry entryPath = (ICPathEntry)entry; ICPathEntry entryPath = (ICPathEntry) entry;
if (entryPath.isValueWorkspacePath()) { if (entryPath.isValueWorkspacePath()) {
ICLanguageSettingEntry[] entries = new ICLanguageSettingEntry[] {entry}; ICLanguageSettingEntry[] entries = new ICLanguageSettingEntry[] { entry };
if (!entry.isResolved()) { if (!entry.isResolved()) {
entries = CDataUtil.resolveEntries(entries, cfgDescription); entries = CDataUtil.resolveEntries(entries, cfgDescription);
} }
@ -307,7 +324,8 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
} }
if (listenersMap == null) { if (listenersMap == null) {
listenersMap = Collections.synchronizedMap(new HashMap<IResource, List<IScannerInfoChangeListener>>()); listenersMap = Collections
.synchronizedMap(new HashMap<IResource, List<IScannerInfoChangeListener>>());
} }
IProject project = resource.getProject(); IProject project = resource.getProject();
@ -346,12 +364,14 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
if (project != null) { if (project != null) {
ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project); ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project);
if (prjDescription != null) { if (prjDescription != null) {
ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription indexedCfgDescription = prjDescription
.getDefaultSettingConfiguration();
String indexedCfgId = indexedCfgDescription.getId(); String indexedCfgId = indexedCfgDescription.getId();
for (String cfgId : event.getConfigurationDescriptionIds()) { for (String cfgId : event.getConfigurationDescriptionIds()) {
if (cfgId.equals(indexedCfgId)) { if (cfgId.equals(indexedCfgId)) {
for (Entry<IResource, List<IScannerInfoChangeListener>> entry : listenersMap.entrySet()) { for (Entry<IResource, List<IScannerInfoChangeListener>> entry : listenersMap
.entrySet()) {
IResource rc = entry.getKey(); IResource rc = entry.getKey();
List<IScannerInfoChangeListener> listeners = listenersMap.get(rc); List<IScannerInfoChangeListener> listeners = listenersMap.get(rc);
if (listeners != null && !listeners.isEmpty()) { if (listeners != null && !listeners.isEmpty()) {

View file

@ -41,20 +41,29 @@ import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.cdt.internal.core.model.DefaultPathEntryStore; import org.eclipse.cdt.internal.core.model.DefaultPathEntryStore;
import org.eclipse.cdt.internal.core.model.PathEntryManager; import org.eclipse.cdt.internal.core.model.PathEntryManager;
import org.eclipse.cdt.internal.core.model.PathEntryUtil; import org.eclipse.cdt.internal.core.model.PathEntryUtil;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
/** /**
* Wrapper class intended to provide backward compatibility with ScannerInfo supplied by {@link PathEntryManager}. * Wrapper class intended to provide backward compatibility with ScannerInfo
* supplied by {@link PathEntryManager}.
*/ */
public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettingsBaseProvider { public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettingsBaseProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
if (config == null) {
return null;
}
ICConfigurationDescription cfgDescription = config.getAdapter(ICConfigurationDescription.class);
if (cfgDescription == null) { if (cfgDescription == null) {
return null; return null;
} }
ICProjectDescription prjDescription = cfgDescription.getProjectDescription(); ICProjectDescription prjDescription = cfgDescription.getProjectDescription();
if (prjDescription == null) { if (prjDescription == null) {
return null; return null;
@ -72,7 +81,8 @@ public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettin
@Override @Override
public int compare(IPathEntry macro1, IPathEntry macro2) { public int compare(IPathEntry macro1, IPathEntry macro2) {
if (macro1 instanceof IMacroEntry && macro2 instanceof IMacroEntry) { if (macro1 instanceof IMacroEntry && macro2 instanceof IMacroEntry) {
return ((IMacroEntry)macro1).getMacroName().compareTo(((IMacroEntry)macro2).getMacroName()); return ((IMacroEntry) macro1).getMacroName()
.compareTo(((IMacroEntry) macro2).getMacroName());
} }
return 0; return 0;
} }
@ -82,17 +92,20 @@ public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettin
pathEntriesMap.put(IPathEntry.CDT_LIBRARY, new LinkedHashSet<IPathEntry>()); pathEntriesMap.put(IPathEntry.CDT_LIBRARY, new LinkedHashSet<IPathEntry>());
IPathEntryStore pathEntryStore = new DefaultPathEntryStore(project); IPathEntryStore pathEntryStore = new DefaultPathEntryStore(project);
int typesMask = IPathEntry.CDT_INCLUDE | IPathEntry.CDT_MACRO | IPathEntry.CDT_INCLUDE_FILE | IPathEntry.CDT_MACRO_FILE | IPathEntry.CDT_LIBRARY; int typesMask = IPathEntry.CDT_INCLUDE | IPathEntry.CDT_MACRO | IPathEntry.CDT_INCLUDE_FILE
| IPathEntry.CDT_MACRO_FILE | IPathEntry.CDT_LIBRARY;
try { try {
IPathEntry[] storePathEntries = pathEntryStore.getRawPathEntries(); IPathEntry[] storePathEntries = pathEntryStore.getRawPathEntries();
for (IPathEntry storePathEntry : storePathEntries) { for (IPathEntry storePathEntry : storePathEntries) {
if (storePathEntry instanceof IContainerEntry) { if (storePathEntry instanceof IContainerEntry) {
try { try {
IPathEntryContainer container = PathEntryManager.getDefault().getPathEntryContainer((IContainerEntry) storePathEntry, cproject); IPathEntryContainer container = PathEntryManager.getDefault()
.getPathEntryContainer((IContainerEntry) storePathEntry, cproject);
if (container != null) { if (container != null) {
IPathEntry[] pathEntries = null; IPathEntry[] pathEntries = null;
if (container instanceof IPathEntryContainerExtension) { if (container instanceof IPathEntryContainerExtension) {
pathEntries = ((IPathEntryContainerExtension)container).getPathEntries(rc.getFullPath(), typesMask); pathEntries = ((IPathEntryContainerExtension) container)
.getPathEntries(rc.getFullPath(), typesMask);
} else { } else {
pathEntries = container.getPathEntries(); pathEntries = container.getPathEntries();
} }
@ -124,10 +137,12 @@ public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettin
} }
} }
return LanguageSettingsSerializableStorage.getPooledList(new ArrayList<ICLanguageSettingEntry>(lsEntries)); return LanguageSettingsSerializableStorage
.getPooledList(new ArrayList<ICLanguageSettingEntry>(lsEntries));
} }
private void collectPathEntry(LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap, IPath projectPath, IPathEntry pathEntry) { private void collectPathEntry(LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap, IPath projectPath,
IPathEntry pathEntry) {
switch (pathEntry.getEntryKind()) { switch (pathEntry.getEntryKind()) {
case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE:
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
@ -145,14 +160,16 @@ public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettin
private ICLanguageSettingEntry toLanguageSettingsEntry(IPathEntry pathEntry) { private ICLanguageSettingEntry toLanguageSettingsEntry(IPathEntry pathEntry) {
switch (pathEntry.getEntryKind()) { switch (pathEntry.getEntryKind()) {
case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE:
IIncludeEntry includeEntry = (IIncludeEntry)pathEntry; IIncludeEntry includeEntry = (IIncludeEntry) pathEntry;
return CDataUtil.createCIncludePathEntry(includeEntry.getFullIncludePath().toOSString(), includeEntry.isSystemInclude() ? 0 : ICSettingEntry.LOCAL); return CDataUtil.createCIncludePathEntry(includeEntry.getFullIncludePath().toOSString(),
includeEntry.isSystemInclude() ? 0 : ICSettingEntry.LOCAL);
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
IMacroEntry macroEntry = (IMacroEntry) pathEntry; IMacroEntry macroEntry = (IMacroEntry) pathEntry;
return CDataUtil.createCMacroEntry(macroEntry.getMacroName(), macroEntry.getMacroValue(), 0); return CDataUtil.createCMacroEntry(macroEntry.getMacroName(), macroEntry.getMacroValue(), 0);
case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_INCLUDE_FILE:
IIncludeFileEntry includeFileEntry = (IIncludeFileEntry) pathEntry; IIncludeFileEntry includeFileEntry = (IIncludeFileEntry) pathEntry;
return CDataUtil.createCIncludeFileEntry(includeFileEntry.getFullIncludeFilePath().toOSString(), 0); return CDataUtil.createCIncludeFileEntry(includeFileEntry.getFullIncludeFilePath().toOSString(),
0);
case IPathEntry.CDT_MACRO_FILE: case IPathEntry.CDT_MACRO_FILE:
IMacroFileEntry macroFileEntry = (IMacroFileEntry) pathEntry; IMacroFileEntry macroFileEntry = (IMacroFileEntry) pathEntry;
return CDataUtil.createCMacroFileEntry(macroFileEntry.getFullMacroFilePath().toOSString(), 0); return CDataUtil.createCMacroFileEntry(macroFileEntry.getFullMacroFilePath().toOSString(), 0);

View file

@ -22,7 +22,9 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Adapters;
/** /**
* Language settings provider to provide entries exported from referenced projects. * Language settings provider to provide entries exported from referenced projects.
@ -39,7 +41,8 @@ public class ReferencedProjectsLanguageSettingsProvider extends LanguageSettings
}; };
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
if (recursiveCallIndicator.get()) { if (recursiveCallIndicator.get()) {
// Recursive call indicates that the provider of a referenced project is called. // Recursive call indicates that the provider of a referenced project is called.
// Only exported entries of the original configuration should be considered, // Only exported entries of the original configuration should be considered,
@ -47,6 +50,11 @@ public class ReferencedProjectsLanguageSettingsProvider extends LanguageSettings
return null; return null;
} }
if (config == null) {
return null;
}
ICConfigurationDescription cfgDescription = config.getAdapter(ICConfigurationDescription.class);
if (cfgDescription == null) { if (cfgDescription == null) {
return null; return null;
} }
@ -58,14 +66,18 @@ public class ReferencedProjectsLanguageSettingsProvider extends LanguageSettings
try { try {
recursiveCallIndicator.set(true); recursiveCallIndicator.set(true);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
ICConfigurationDescription[] refCfgDescriptions = CoreModelUtil.getReferencedConfigurationDescriptions(cfgDescription, false); ICConfigurationDescription[] refCfgDescriptions = CoreModelUtil
.getReferencedConfigurationDescriptions(cfgDescription, false);
for (ICConfigurationDescription refCfgDescription : refCfgDescriptions) { for (ICConfigurationDescription refCfgDescription : refCfgDescriptions) {
List<ICLanguageSettingEntry> refEntries = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, rc, languageId, ICSettingEntry.ALL); IBuildConfiguration refConfig = Adapters.adapt(refCfgDescription, IBuildConfiguration.class);
List<ICLanguageSettingEntry> refEntries = LanguageSettingsManager
.getSettingEntriesByKind(refConfig, rc, languageId, ICSettingEntry.ALL);
for (ICLanguageSettingEntry refEntry : refEntries) { for (ICLanguageSettingEntry refEntry : refEntries) {
int flags = refEntry.getFlags(); int flags = refEntry.getFlags();
if ((flags & ICSettingEntry.EXPORTED) == ICSettingEntry.EXPORTED) { if ((flags & ICSettingEntry.EXPORTED) == ICSettingEntry.EXPORTED) {
// create a new entry with EXPORTED flag cleared // create a new entry with EXPORTED flag cleared
ICLanguageSettingEntry entry = CDataUtil.createEntry(refEntry, flags & ~ICSettingEntry.EXPORTED); ICLanguageSettingEntry entry = CDataUtil.createEntry(refEntry,
flags & ~ICSettingEntry.EXPORTED);
entries.add(entry); entries.add(entry);
} }
} }

View file

@ -28,16 +28,29 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.settings.model.util.CExtensionUtil; import org.eclipse.cdt.core.settings.model.util.CExtensionUtil;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IConfigurationElement;
/** /**
* Wrapper class intended to provide backward compatibility with ScannerInfoProvider defined by org.eclipse.cdt.core.ScannerInfoProvider extension point * Wrapper class intended to provide backward compatibility with
* ScannerInfoProvider defined by org.eclipse.cdt.core.ScannerInfoProvider
* extension point
*/ */
public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettingsBaseProvider { public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettingsBaseProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
if (config == null) {
return null;
}
ICConfigurationDescription cfgDescription = config.getAdapter(ICConfigurationDescription.class);
if (cfgDescription == null) {
return null;
}
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
IScannerInfoProvider scannerInfoProvider = getScannerInfoProvider(cfgDescription); IScannerInfoProvider scannerInfoProvider = getScannerInfoProvider(cfgDescription);
if (scannerInfoProvider != null) { if (scannerInfoProvider != null) {
@ -46,15 +59,15 @@ public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettin
if (si instanceof IExtendedScannerInfo) { if (si instanceof IExtendedScannerInfo) {
addLocalIncludePaths(entries, (IExtendedScannerInfo) si); addLocalIncludePaths(entries, (IExtendedScannerInfo) si);
} }
addSystemIncludePaths(entries, si); addSystemIncludePaths(entries, si);
addDefinedSymbols(entries, si); addDefinedSymbols(entries, si);
if (si instanceof IExtendedScannerInfo) { if (si instanceof IExtendedScannerInfo) {
addIncludeFiles(entries, (IExtendedScannerInfo) si); addIncludeFiles(entries, (IExtendedScannerInfo) si);
addMacroFiles(entries, (IExtendedScannerInfo) si); addMacroFiles(entries, (IExtendedScannerInfo) si);
} }
if (!entries.isEmpty()) { if (!entries.isEmpty()) {
return LanguageSettingsSerializableStorage.getPooledList(entries); return LanguageSettingsSerializableStorage.getPooledList(entries);
} }
@ -64,9 +77,11 @@ public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettin
} }
/** /**
* Return ScannerInfoProvider defined in configuration metadata in .cproject. * Return ScannerInfoProvider defined in configuration metadata in
* .cproject.
* *
* @param cfgDescription - configuration description. * @param cfgDescription
* - configuration description.
* @return an instance of ScannerInfoProvider or {@code null}. * @return an instance of ScannerInfoProvider or {@code null}.
*/ */
public IScannerInfoProvider getScannerInfoProvider(ICConfigurationDescription cfgDescription) { public IScannerInfoProvider getScannerInfoProvider(ICConfigurationDescription cfgDescription) {
@ -80,8 +95,9 @@ public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettin
ICConfigExtensionReference ref = refs[0]; ICConfigExtensionReference ref = refs[0];
try { try {
AbstractCExtension cExtension = null; AbstractCExtension cExtension = null;
IConfigurationElement el = CExtensionUtil.getFirstConfigurationElement(ref, "cextension", false); //$NON-NLS-1$ IConfigurationElement el = CExtensionUtil.getFirstConfigurationElement(ref, "cextension", //$NON-NLS-1$
cExtension = (AbstractCExtension)el.createExecutableExtension("run"); //$NON-NLS-1$ false);
cExtension = (AbstractCExtension) el.createExecutableExtension("run"); //$NON-NLS-1$
cExtension.setExtensionReference(ref); cExtension.setExtensionReference(ref);
cExtension.setProject(ref.getConfiguration().getProjectDescription().getProject()); cExtension.setProject(ref.getConfiguration().getProjectDescription().getProject());
if (cExtension instanceof IScannerInfoProvider) { if (cExtension instanceof IScannerInfoProvider) {

View file

@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright (c) 2016 QNX Software Systems 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
*******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.runtime.IAdapterFactory;
public class BuildConfigAdapterFactory implements IAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adaptableObject instanceof IBuildConfiguration
&& adapterType.equals(ICConfigurationDescription.class)) {
IBuildConfiguration buildConfig = (IBuildConfiguration) adaptableObject;
ICProjectDescription prjDesc = CCorePlugin.getDefault()
.getProjectDescription(buildConfig.getProject());
if (prjDesc != null) {
return (T) prjDesc.getConfigurationById(buildConfig.getName());
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { ICConfigurationDescription.class };
}
}

View file

@ -0,0 +1,73 @@
/*******************************************************************************
* Copyright (c) 2016 QNX Software Systems 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
*******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResourceStatus;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.NullProgressMonitor;
public class CConfigurationAdapterFactory implements IAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adaptableObject instanceof ICConfigurationDescription
&& adapterType.equals(IBuildConfiguration.class)) {
ICConfigurationDescription cfgDesc = (ICConfigurationDescription) adaptableObject;
IProject project = cfgDesc.getProjectDescription().getProject();
if (project != null) {
String configId = cfgDesc.getId();
try {
IBuildConfiguration config = project.getBuildConfig(configId);
if (config == null) {
CCorePlugin.log(String.format("null config %s: %s", project.getName(), configId)); //$NON-NLS-1$
}
return (T) config;
} catch (CoreException e) {
if (!ResourcesPlugin.getWorkspace().isTreeLocked() &&
e.getStatus().getCode() == IResourceStatus.BUILD_CONFIGURATION_NOT_FOUND) {
try {
Set<String> configNames = new HashSet<>();
for (IBuildConfiguration config : project.getBuildConfigs()) {
configNames.add(config.getName());
}
configNames.add(configId);
IProjectDescription projectDesc = project.getDescription();
projectDesc.setBuildConfigs(
configNames.toArray(new String[configNames.size()]));
project.setDescription(projectDesc, new NullProgressMonitor());
return (T) project.getBuildConfig(configId);
} catch (CoreException e2) {
CCorePlugin.log(e2.getStatus());
}
} else {
CCorePlugin.log(e.getStatus());
}
}
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { IBuildConfiguration.class };
}
}

View file

@ -35,17 +35,19 @@ import org.eclipse.core.runtime.QualifiedName;
public class CProjectDescription implements ICProjectDescription, ICDataProxyContainer { public class CProjectDescription implements ICProjectDescription, ICDataProxyContainer {
private static final String ACTIVE_CFG = "activeConfiguration"; //$NON-NLS-1$ private static final String ACTIVE_CFG = "activeConfiguration"; //$NON-NLS-1$
private static final QualifiedName ACTIVE_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID, ACTIVE_CFG); private static final QualifiedName ACTIVE_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID,
ACTIVE_CFG);
private static final String SETTING_CFG = "settingConfiguration"; //$NON-NLS-1$ private static final String SETTING_CFG = "settingConfiguration"; //$NON-NLS-1$
private static final QualifiedName SETTING_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID, SETTING_CFG); private static final QualifiedName SETTING_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID,
SETTING_CFG);
private CfgIdPair fActiveCfgInfo; private CfgIdPair fActiveCfgInfo;
private CfgIdPair fSettingCfgInfo; private CfgIdPair fSettingCfgInfo;
private CProjectDescriptionPreferences fPrefs; private CProjectDescriptionPreferences fPrefs;
// private ICConfigurationDescription fActiveCfg; // private ICConfigurationDescription fActiveCfg;
// private String fActiveCfgId; // private String fActiveCfgId;
// private ICConfigurationDescription fIndexCfg; // private ICConfigurationDescription fIndexCfg;
// private String fIndexCfgId; // private String fIndexCfgId;
private volatile IProject fProject; private volatile IProject fProject;
private final ICSettingsStorage fStorage; private final ICSettingsStorage fStorage;
private final ICStorageElement fRootStorageElement; private final ICStorageElement fRootStorageElement;
@ -153,7 +155,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
public CProjectDescription(IProject project, ICSettingsStorage storage, ICStorageElement element, boolean loading, boolean isCreating) throws CoreException { public CProjectDescription(IProject project, ICSettingsStorage storage, ICStorageElement element,
boolean loading, boolean isCreating) throws CoreException {
fProject = project; fProject = project;
fStorage = storage; fStorage = storage;
fRootStorageElement = element; fRootStorageElement = element;
@ -200,9 +203,9 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
} }
// doneInitializing(); // doneInitializing();
// fIsLoading = false; // fIsLoading = false;
} }
public boolean applyDatas(SettingsContext context) { public boolean applyDatas(SettingsContext context) {
@ -222,18 +225,16 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
} }
// doneInitializing(); // doneInitializing();
// fIsApplying = false; // fIsApplying = false;
return modified; return modified;
} }
/** /**
* Called when the read-only project description has / is being set * Called when the read-only project description has / is being set fIsApplying => false
* fIsApplying => false * setModified (false) set the ICSettingsStorage to readonly
* setModified (false)
* set the ICSettingsStorage to readonly
*/ */
public void doneApplying() { public void doneApplying() {
doneInitializing(); doneInitializing();
@ -259,7 +260,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
private void doneInitializing() { private void doneInitializing() {
for (ICConfigurationDescription cfg : fCfgMap.values()) { for (ICConfigurationDescription cfg : fCfgMap.values()) {
// FIXME How and why are we down casting to a CConfigurationDescriptionCache. Comments, please! // FIXME How and why are we down casting to a
// CConfigurationDescriptionCache. Comments, please!
CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache) cfg; CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache) cfg;
cache.doneInitialization(); cache.doneInitialization();
} }
@ -285,7 +287,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
* @param el * @param el
* @param isCreating * @param isCreating
*/ */
public CProjectDescription(CProjectDescription base, boolean saving, ICSettingsStorage storage, ICStorageElement el, boolean isCreating) { public CProjectDescription(CProjectDescription base, boolean saving, ICSettingsStorage storage,
ICStorageElement el, boolean isCreating) {
fActiveCfgInfo = new CfgIdPair(base.fActiveCfgInfo); fActiveCfgInfo = new CfgIdPair(base.fActiveCfgInfo);
fSettingCfgInfo = new CfgIdPair(base.fSettingCfgInfo); fSettingCfgInfo = new CfgIdPair(base.fSettingCfgInfo);
fProject = base.fProject; fProject = base.fProject;
@ -296,7 +299,10 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
fIsApplying = saving || base.fIsApplying; fIsApplying = saving || base.fIsApplying;
fIsCreating = isCreating; fIsCreating = isCreating;
fPrefs = new CProjectDescriptionPreferences(base.fPrefs, (CProjectDescriptionPreferences)CProjectDescriptionManager.getInstance().getProjectDescriptionWorkspacePreferences(false), false); fPrefs = new CProjectDescriptionPreferences(base.fPrefs,
(CProjectDescriptionPreferences) CProjectDescriptionManager.getInstance()
.getProjectDescriptionWorkspacePreferences(false),
false);
for (Iterator<ICConfigurationDescription> iter = base.fCfgMap.values().iterator(); iter.hasNext();) { for (Iterator<ICConfigurationDescription> iter = base.fCfgMap.values().iterator(); iter.hasNext();) {
try { try {
@ -308,7 +314,9 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
baseCache = (CConfigurationDescriptionCache) baseData; baseCache = (CConfigurationDescriptionCache) baseData;
baseData = baseCache.getConfigurationData(); baseData = baseCache.getConfigurationData();
} }
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache((ICConfigurationDescription) cfgDes, baseData, baseCache, cfgDes.getSpecSettings(), this, null); CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(
(ICConfigurationDescription) cfgDes, baseData, baseCache,
cfgDes.getSpecSettings(), this, null);
configurationCreated(cache); configurationCreated(cache);
} else { } else {
CConfigurationData baseData = cfgDes.getConfigurationData(false); CConfigurationData baseData = cfgDes.getConfigurationData(false);
@ -321,16 +329,17 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
// Shallow cloning the base map // Shallow cloning the base map
Map<QualifiedName, Object> cloneMap = Collections.synchronizedMap(new HashMap<QualifiedName, Object>()); Map<QualifiedName, Object> cloneMap = Collections
synchronized(base.fPropertiesMap) { .synchronizedMap(new HashMap<QualifiedName, Object>());
synchronized (base.fPropertiesMap) {
cloneMap.putAll(base.fPropertiesMap); cloneMap.putAll(base.fPropertiesMap);
} }
fPropertiesMap = cloneMap; fPropertiesMap = cloneMap;
} }
/** /**
* Convert the current CConfigurationDescriptions to cached versions * Convert the current CConfigurationDescriptions to cached versions This occurs during the
* This occurs during the SetCProjectDescription Operation * SetCProjectDescription Operation
*/ */
void switchToCachedConfigurationDescriptions() throws CoreException { void switchToCachedConfigurationDescriptions() throws CoreException {
for (Map.Entry<String, ICConfigurationDescription> e : fCfgMap.entrySet()) { for (Map.Entry<String, ICConfigurationDescription> e : fCfgMap.entrySet()) {
@ -342,8 +351,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
baseCache = (CConfigurationDescriptionCache) baseData; baseCache = (CConfigurationDescriptionCache) baseData;
baseData = baseCache.getConfigurationData(); baseData = baseCache.getConfigurationData();
} }
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(cfgDes, baseData, baseCache, CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(cfgDes, baseData,
cfgDes.getSpecSettings(), this, null); baseCache, cfgDes.getSpecSettings(), this, null);
e.setValue(cache); e.setValue(cache);
} }
} }
@ -355,7 +364,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
@Override @Override
public ICConfigurationDescription createConfiguration(String id, String name, public ICConfigurationDescription createConfiguration(String id, String name,
ICConfigurationDescription base) throws CoreException{ ICConfigurationDescription base) throws CoreException {
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
CConfigurationDescription cfg = new CConfigurationDescription(id, name, base, this); CConfigurationDescription cfg = new CConfigurationDescription(id, name, base, this);
@ -400,7 +409,6 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
CConfigurationDescription cfgDes = (CConfigurationDescription) getConfigurationByName(name); CConfigurationDescription cfgDes = (CConfigurationDescription) getConfigurationByName(name);
if (cfgDes != null) { if (cfgDes != null) {
cfgDes.removeConfiguration(); cfgDes.removeConfiguration();
@ -424,8 +432,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
@Override @Override
public void setActiveConfiguration( public void setActiveConfiguration(ICConfigurationDescription cfg) throws WriteAccessException {
ICConfigurationDescription cfg) throws WriteAccessException {
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
if (cfg == null) if (cfg == null)
@ -448,13 +455,14 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
@Override @Override
public ICStorageElement importStorage(String id, ICStorageElement el) throws UnsupportedOperationException, CoreException { public ICStorageElement importStorage(String id, ICStorageElement el)
throws UnsupportedOperationException, CoreException {
return getStorageBase().importStorage(id, el); return getStorageBase().importStorage(id, el);
} }
// public boolean containsStorage(String id) throws CoreException { // public boolean containsStorage(String id) throws CoreException {
// return getStorageBase().containsStorage(id); // return getStorageBase().containsStorage(id);
// } // }
@Override @Override
public ICSettingObject[] getChildSettings() { public ICSettingObject[] getChildSettings() {
@ -468,7 +476,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
@Override @Override
public String getId() { public String getId() {
//TODO: // TODO:
return null; return null;
} }
@ -489,7 +497,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
@Override @Override
public boolean isValid() { public boolean isValid() {
return /*fProject.exists() &&*/ fCfgMap.size() > 0; return /* fProject.exists() && */ fCfgMap.size() > 0;
} }
@Override @Override
@ -517,25 +525,27 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
if (fRootStorageElement == null) if (fRootStorageElement == null)
throw ExceptionFactory.createCoreException("CProjectDescription ICStorageElement == null"); //$NON-NLS-1$ throw ExceptionFactory.createCoreException("CProjectDescription ICStorageElement == null"); //$NON-NLS-1$
// if (fRootStorageElement == null) { // if (fRootStorageElement == null) {
// fRootStorageElement = CProjectDescriptionManager.getInstance().createStorage(fProject, true, true, isReadOnly()); // fRootStorageElement = CProjectDescriptionManager.getInstance().createStorage(fProject,
// } // true, true, isReadOnly());
//}
return fRootStorageElement; return fRootStorageElement;
} }
// ICStorageElement doGetCachedRootStorageElement() { // ICStorageElement doGetCachedRootStorageElement() {
// return fRootStorageElement; // return fRootStorageElement;
// } // }
ICSettingsStorage getStorageBase() throws CoreException{ ICSettingsStorage getStorageBase() throws CoreException {
if (fStorage == null) if (fStorage == null)
// fStorage = new CStorage((InternalXmlStorageElement) getRootStorageElement()); // fStorage = new CStorage((InternalXmlStorageElement) getRootStorageElement());
throw ExceptionFactory.createCoreException("CProjectDescription ICSettingsStorage == null"); //$NON-NLS-1$ throw ExceptionFactory.createCoreException("CProjectDescription ICSettingsStorage == null"); //$NON-NLS-1$
return fStorage; return fStorage;
} }
@Override @Override
public ICConfigurationDescription createConfiguration(String buildSystemId, CConfigurationData data) throws CoreException { public ICConfigurationDescription createConfiguration(String buildSystemId, CConfigurationData data)
throws CoreException {
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
CConfigurationDescription cfg = new CConfigurationDescription(data, buildSystemId, this); CConfigurationDescription cfg = new CConfigurationDescription(data, buildSystemId, this);
@ -543,7 +553,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
return cfg; return cfg;
} }
public CConfigurationDescription createConvertedConfiguration(String id, String name, ICStorageElement el) throws CoreException{ public CConfigurationDescription createConvertedConfiguration(String id, String name, ICStorageElement el)
throws CoreException {
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
CConfigurationDescription cfg = new CConfigurationDescription(id, name, el, this); CConfigurationDescription cfg = new CConfigurationDescription(id, name, el, this);
@ -668,10 +679,10 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
CConfigurationDescription des = (CConfigurationDescription) getChildSettingById(cfgCache.getId()); CConfigurationDescription des = (CConfigurationDescription) getChildSettingById(cfgCache.getId());
if (des != null) { if (des != null) {
des.setData(cfgCache); des.setData(cfgCache);
// ICResourceDescription rcDes = des.getResourceDescription(new Path("dd"), false); // ICResourceDescription rcDes = des.getResourceDescription(new Path("dd"), false);
// rcDes = des.getResourceDescription(new Path("dd"), false); // rcDes = des.getResourceDescription(new Path("dd"), false);
// ICBuildSetting bs = des.getBuildSetting(); // ICBuildSetting bs = des.getBuildSetting();
// ICLanguageSetting lss[] = ((ICFolderDescription) rcDes).getLanguageSettings(); // ICLanguageSetting lss[] = ((ICFolderDescription) rcDes).getLanguageSettings();
} }
} }
} }

View file

@ -856,5 +856,22 @@
ordering="first"> ordering="first">
</filterMatcher> </filterMatcher>
</extension> </extension>
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="org.eclipse.cdt.core.settings.model.ICConfigurationDescription"
class="org.eclipse.cdt.internal.core.settings.model.CConfigurationAdapterFactory">
<adapter
type="org.eclipse.core.resources.IBuildConfiguration">
</adapter>
</factory>
<factory
adaptableType="org.eclipse.core.resources.IBuildConfiguration"
class="org.eclipse.cdt.internal.core.settings.model.BuildConfigAdapterFactory">
<adapter
type="org.eclipse.cdt.core.settings.model.ICConfigurationDescription">
</adapter>
</factory>
</extension>
</plugin> </plugin>

View file

@ -92,8 +92,8 @@ import org.osgi.framework.BundleContext;
import com.ibm.icu.text.MessageFormat; import com.ibm.icu.text.MessageFormat;
/** /**
* CCorePlugin is the life-cycle owner of the core plug-in, and starting point * CCorePlugin is the life-cycle owner of the core plug-in, and starting point for access to many
* for access to many core APIs. * core APIs.
* *
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients. * @noinstantiate This class is not intended to be instantiated by clients.
@ -103,8 +103,7 @@ public class CCorePlugin extends Plugin {
public static final int STATUS_CDTPROJECT_MISMATCH = 2; public static final int STATUS_CDTPROJECT_MISMATCH = 2;
public static final int CDT_PROJECT_NATURE_ID_MISMATCH = 3; public static final int CDT_PROJECT_NATURE_ID_MISMATCH = 3;
/** /**
* Status code for core exception that is thrown if a pdom grew larger than * Status code for core exception that is thrown if a pdom grew larger than the supported limit.
* the supported limit.
* *
* @since 5.2 * @since 5.2
*/ */
@ -276,8 +275,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the shared working copies currently registered for the default * Returns the shared working copies currently registered for the default buffer factory.
* buffer factory.
* *
* @since 5.1 * @since 5.1
*/ */
@ -382,25 +380,21 @@ public class CCorePlugin extends Plugin {
pdomManager = new PDOMManager(); pdomManager = new PDOMManager();
final Job post2 = pdomManager.startup(); final Job post2 = pdomManager.startup();
// bug 186755, when started after the platform has been started the job // bug 186755, when started after the platform has been started the job manager
// manager // is no longer suspended. So we have to start a job at the very end to make
// is no longer suspended. So we have to start a job at the very end to // sure we don't trigger a concurrent plug-in activation from within the job.
// make
// sure we don't trigger a concurrent plug-in activation from within the
// job.
post1.schedule(); post1.schedule();
post2.schedule(); post2.schedule();
} }
/** /**
* TODO: Add all options here Returns a table of all known configurable * TODO: Add all options here Returns a table of all known configurable options with their
* options with their default values. These options allow to configure the * default values. These options allow to configure the behavior of the underlying components.
* behavior of the underlying components. The client may safely use the * The client may safely use the result as a template that they can modify and then pass to
* result as a template that they can modify and then pass to
* <code>setOptions</code>. * <code>setOptions</code>.
* *
* Helper constants have been defined on CCorePlugin for each of the option * Helper constants have been defined on CCorePlugin for each of the option ID and their
* ID and their possible constant values. * possible constant values.
* *
* Note: more options might be added in further releases. * Note: more options might be added in further releases.
* *
@ -415,9 +409,8 @@ public class CCorePlugin extends Plugin {
* - default: <platform default> * - default: <platform default>
* </pre> * </pre>
* *
* @return a mutable map containing the default settings of all known * @return a mutable map containing the default settings of all known options (key type:
* options (key type: <code>String</code>; value type: * <code>String</code>; value type: <code>String</code>)
* <code>String</code>)
* @see #setOptions * @see #setOptions
*/ */
public static HashMap<String, String> getDefaultOptions() { public static HashMap<String, String> getDefaultOptions() {
@ -446,11 +439,10 @@ public class CCorePlugin extends Plugin {
/** /**
* Helper method for returning one option value only. Equivalent to * Helper method for returning one option value only. Equivalent to
* <code>(String)CCorePlugin.getOptions().get(optionName)</code> Note that * <code>(String)CCorePlugin.getOptions().get(optionName)</code> Note that it may answer
* it may answer <code>null</code> if this option does not exist. * <code>null</code> if this option does not exist.
* <p> * <p>
* For a complete description of the configurable options, see * For a complete description of the configurable options, see <code>getDefaultOptions</code>.
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @param optionName * @param optionName
@ -471,16 +463,14 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the table of the current options. Initially, all options have * Returns the table of the current options. Initially, all options have their default values,
* their default values, and this method returns a table that includes all * and this method returns a table that includes all known options.
* known options.
* <p> * <p>
* For a complete description of the configurable options, see * For a complete description of the configurable options, see <code>getDefaultOptions</code>.
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @return table of current settings of all options (key type: * @return table of current settings of all options (key type: <code>String</code>; value type:
* <code>String</code>; value type: <code>String</code>) * <code>String</code>)
* @see CCorePlugin#getDefaultOptions * @see CCorePlugin#getDefaultOptions
*/ */
public static HashMap<String, String> getOptions() { public static HashMap<String, String> getOptions() {
@ -512,18 +502,16 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Sets the current table of options. All and only the options explicitly * Sets the current table of options. All and only the options explicitly included in the given
* included in the given table are remembered; all previous option settings * table are remembered; all previous option settings are forgotten, including ones not
* are forgotten, including ones not explicitly mentioned. * explicitly mentioned.
* <p> * <p>
* For a complete description of the configurable options, see * For a complete description of the configurable options, see <code>getDefaultOptions</code>.
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @param newOptions * @param newOptions
* the new options (key type: <code>String</code>; value type: * the new options (key type: <code>String</code>; value type: <code>String</code>),
* <code>String</code>), or <code>null</code> to reset all * or <code>null</code> to reset all options to their default values
* options to their default values
* @see CCorePlugin#getDefaultOptions * @see CCorePlugin#getDefaultOptions
*/ */
public static void setOptions(HashMap<String, String> newOptions) { public static void setOptions(HashMap<String, String> newOptions) {
@ -550,24 +538,22 @@ public class CCorePlugin extends Plugin {
/** /**
* Create CDT console adapter for build console defined as an extension. See * Create CDT console adapter for build console defined as an extension. See
* {@code org.eclipse.cdt.core.CBuildConsole} extension point. If the * {@code org.eclipse.cdt.core.CBuildConsole} extension point. If the console class is instance
* console class is instance of {@link ICConsole} it is initialized with * of {@link ICConsole} it is initialized with context id, name and icon to be shown in the list
* context id, name and icon to be shown in the list of consoles in the * of consoles in the Console view.
* Console view.
* *
* @param extConsoleId * @param extConsoleId
* - console id defined in the extension point. * - console id defined in the extension point.
* @param contextId * @param contextId
* - context menu id in the Console view. A caller needs to * - context menu id in the Console view. A caller needs to define a distinct one for
* define a distinct one for own use. * own use.
* @param name * @param name
* - name of console to appear in the list of consoles in context * - name of console to appear in the list of consoles in context menu in the Console
* menu in the Console view. * view.
* @param iconUrl * @param iconUrl
* - a {@link URL} of the icon for the context menu of the * - a {@link URL} of the icon for the context menu of the Console view. The url is
* Console view. The url is expected to point to an image in * expected to point to an image in eclipse OSGi bundle. Here is an example how to
* eclipse OSGi bundle. Here is an example how to retrieve URL: * retrieve URL: <br/>
* <br/>
* <code> * <code>
* URL iconUrl = CUIPlugin.getDefault().getBundle().getEntry("icons/obj16/flask.png"); * URL iconUrl = CUIPlugin.getDefault().getBundle().getEntry("icons/obj16/flask.png");
* </code> * </code>
@ -604,13 +590,11 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Create CDT console adapter. The adapter serves as a bridge between core * Create CDT console adapter. The adapter serves as a bridge between core plugin and UI console
* plugin and UI console API in a way that a user can create a UI console * API in a way that a user can create a UI console from plugins having no dependencies to UI.
* from plugins having no dependencies to UI.
* *
* @param id * @param id
* - id of the console specified in extension point to * - id of the console specified in extension point to instantiate console adapter.
* instantiate console adapter.
* @return CDT console adapter. * @return CDT console adapter.
*/ */
public IConsole getConsole(String id) { public IConsole getConsole(String id) {
@ -619,25 +603,23 @@ public class CCorePlugin extends Plugin {
/** /**
* Create CDT console adapter for build console. A new instance of class * Create CDT console adapter for build console. A new instance of class
* {@code org.eclipse.cdt.internal.ui.buildconsole.CBuildConsole} is created * {@code org.eclipse.cdt.internal.ui.buildconsole.CBuildConsole} is created and initialized
* and initialized with the parameters. * with the parameters.
* *
* @param contextId * @param contextId
* - context menu id in the Console view. A caller needs to * - context menu id in the Console view. A caller needs to define a distinct one for
* define a distinct one for own use. * own use.
* @param name * @param name
* - name of console to appear in the list of consoles in context * - name of console to appear in the list of consoles in context menu in the Console
* menu in the Console view. * view.
* @param iconUrl * @param iconUrl
* - a {@link URL} of the icon for the context menu of the * - a {@link URL} of the icon for the context menu of the Console view. The url is
* Console view. The url is expected to point to an image in * expected to point to an image in eclipse OSGi bundle. Here is an example how to
* eclipse OSGi bundle. Here is an example how to retrieve URL: * retrieve URL: <br/>
* <br/>
* <code> * <code>
* URL iconUrl = CUIPlugin.getDefault().getBundle().getResource("icons/obj16/flask.png"); * URL iconUrl = CUIPlugin.getDefault().getBundle().getResource("icons/obj16/flask.png");
* </code> <br/> * </code> <br/>
* {@code iconUrl} can be <b>null</b>, in that case the default * {@code iconUrl} can be <b>null</b>, in that case the default image is used. See
* image is used. See
* {@code org.eclipse.cdt.internal.ui.buildconsole.BuildConsole(IBuildConsoleManager, String, String, URL)} * {@code org.eclipse.cdt.internal.ui.buildconsole.BuildConsole(IBuildConsoleManager, String, String, URL)}
* *
* @return CDT console adapter. * @return CDT console adapter.
@ -657,8 +639,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated Use {@link #getDefaultBinaryParserExtensions(IProject)} * @deprecated Use {@link #getDefaultBinaryParserExtensions(IProject)} instead.
* instead.
*/ */
@Deprecated @Deprecated
public ICExtensionReference[] getBinaryParserExtensions(IProject project) throws CoreException { public ICExtensionReference[] getBinaryParserExtensions(IProject project) throws CoreException {
@ -679,8 +660,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the binary parser extensions for the default settings * Returns the binary parser extensions for the default settings configuration.
* configuration.
* *
* @since 5.2 * @since 5.2
*/ */
@ -794,14 +774,14 @@ public class CCorePlugin extends Plugin {
* Please use {@link #getProjectDescription(IProject, boolean)} to fetch the * Please use {@link #getProjectDescription(IProject, boolean)} to fetch the
* ICProjectDescription for the project. And use * ICProjectDescription for the project. And use
* {@link ICProjectDescription#getConfigurations()} to get an array of * {@link ICProjectDescription#getConfigurations()} to get an array of
* ICConfigurationDescriptions, which have similar API to ICDescriptor, * ICConfigurationDescriptions, which have similar API to ICDescriptor, allowing you to store
* allowing you to store settings and configure extensions at the * settings and configure extensions at the Configuration level rather than at the project
* Configuration level rather than at the project level. * level.
* *
* @param project * @param project
* @param create * @param create
* @return ICDescriptor or <b>null</b> if <b>create</b> is <b>false</b> and * @return ICDescriptor or <b>null</b> if <b>create</b> is <b>false</b> and no .cdtproject file
* no .cdtproject file exists on disk. * exists on disk.
* @throws CoreException * @throws CoreException
* @deprecated * @deprecated
*/ */
@ -823,15 +803,13 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated Settings should be set per ICConfigurationDescription rather * @deprecated Settings should be set per ICConfigurationDescription rather than global to the
* than global to the project. Please use * project. Please use {@link #getProjectDescription(IProject, boolean)} to fetch
* {@link #getProjectDescription(IProject, boolean)} to fetch
* the ICProjectDescription for the project. And use * the ICProjectDescription for the project. And use
* {@link ICProjectDescription#getConfigurations()} to get an * {@link ICProjectDescription#getConfigurations()} to get an array of
* array of ICConfigurationDescriptions, which have similar API * ICConfigurationDescriptions, which have similar API to ICDescriptor, allowing you
* to ICDescriptor, allowing you to store settings and configure * to store settings and configure extensions at the Configuration level rather than
* extensions at the Configuration level rather than at the * at the project level.
* project level.
*/ */
@Deprecated @Deprecated
public ICDescriptorManager getCDescriptorManager() { public ICDescriptorManager getCDescriptorManager() {
@ -857,7 +835,7 @@ public class CCorePlugin extends Plugin {
*/ */
public IProject createCProject(final IProjectDescription description, final IProject projectHandle, public IProject createCProject(final IProjectDescription description, final IProject projectHandle,
IProgressMonitor monitor, final String projectID) IProgressMonitor monitor, final String projectID)
throws CoreException, OperationCanceledException { throws CoreException, OperationCanceledException {
getWorkspace().run(new IWorkspaceRunnable() { getWorkspace().run(new IWorkspaceRunnable() {
@Override @Override
@ -954,9 +932,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Method convertProjectFromCtoCC converts a C Project to a C++ Project The * Method convertProjectFromCtoCC converts a C Project to a C++ Project The newProject MUST, not
* newProject MUST, not be null, already have a C Nature && must NOT already * be null, already have a C Nature && must NOT already have a C++ Nature
* have a C++ Nature
* *
* @param projectHandle * @param projectHandle
* @param monitor * @param monitor
@ -972,9 +949,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Method to convert a project to a C nature All checks should have been * Method to convert a project to a C nature All checks should have been done externally (as in
* done externally (as in the Conversion Wizards). This method blindly does * the Conversion Wizards). This method blindly does the conversion.
* the conversion.
*/ */
public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID) public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID)
throws CoreException { throws CoreException {
@ -1057,8 +1033,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated since CDT 6.1. Use * @deprecated since CDT 6.1. Use {@link ErrorParserManager#getErrorParserAvailableIds()}
* {@link ErrorParserManager#getErrorParserAvailableIds()}
* instead * instead
* @return array of error parsers ids * @return array of error parsers ids
*/ */
@ -1070,8 +1045,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated since CDT 6.1. Use * @deprecated since CDT 6.1. Use {@link ErrorParserManager#getErrorParserCopy(String)} instead
* {@link ErrorParserManager#getErrorParserCopy(String)} instead
* @param id * @param id
* - id of error parser * - id of error parser
* @return array of error parsers * @return array of error parsers
@ -1123,9 +1097,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Clears cached scanner info provider for the given project so that the * Clears cached scanner info provider for the given project so that the next call to
* next call to {@link #getScannerInfoProvider(IProject)} would return an up * {@link #getScannerInfoProvider(IProject)} would return an up to date scanner info provider.
* to date scanner info provider.
* *
* @noreference This method is not intended to be referenced by clients. * @noreference This method is not intended to be referenced by clients.
*/ */
@ -1141,8 +1114,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Find {@link IScannerInfoProvider} registered as extension via extension * Find {@link IScannerInfoProvider} registered as extension via extension point
* point org.eclipse.cdt.core.ScannerInfoProvider2. * org.eclipse.cdt.core.ScannerInfoProvider2.
*/ */
private IScannerInfoProvider getExtensionScannerInfoProvider2(IProject project) throws CoreException { private IScannerInfoProvider getExtensionScannerInfoProvider2(IProject project) throws CoreException {
IScannerInfoProvider provider = null; IScannerInfoProvider provider = null;
@ -1182,13 +1155,11 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the content type for a filename. The method respects project * Returns the content type for a filename. The method respects project specific content type
* specific content type definitions. The lookup prefers case- sensitive * definitions. The lookup prefers case- sensitive matches over the others.
* matches over the others.
* *
* @param project * @param project
* a project with possible project specific settings. Can be * a project with possible project specific settings. Can be <code>null</code>
* <code>null</code>
* @param filename * @param filename
* a filename to compute the content type for * a filename to compute the content type for
* @return the content type found or <code>null</code> * @return the content type found or <code>null</code>
@ -1218,8 +1189,7 @@ public class CCorePlugin extends Plugin {
private static final String DELTA = CCorePlugin.PLUGIN_ID + "/debug/deltaprocessor"; //$NON-NLS-1$ private static final String DELTA = CCorePlugin.PLUGIN_ID + "/debug/deltaprocessor"; //$NON-NLS-1$
/** /**
* Configure the plug-in with respect to option settings defined in * Configure the plug-in with respect to option settings defined in ".options" file
* ".options" file
*/ */
public void configurePluginDebugOptions() { public void configurePluginDebugOptions() {
if (CCorePlugin.getDefault().isDebugging()) { if (CCorePlugin.getDefault().isDebugging()) {
@ -1257,8 +1227,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated use {@link ITranslationUnit} or {@link ILanguage} to * @deprecated use {@link ITranslationUnit} or {@link ILanguage} to construct ASTs, instead.
* construct ASTs, instead.
*/ */
@Deprecated @Deprecated
public org.eclipse.cdt.core.dom.CDOM getDOM() { public org.eclipse.cdt.core.dom.CDOM getDOM() {
@ -1288,8 +1257,7 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Equivalent to * Equivalent to <code>createProjectDescription(IProject, boolean, false)</code>.
* <code>createProjectDescription(IProject, boolean, false)</code>.
* *
* @see #createProjectDescription(IProject, boolean, boolean) * @see #createProjectDescription(IProject, boolean, boolean)
*/ */
@ -1304,23 +1272,19 @@ public class CCorePlugin extends Plugin {
* @param project * @param project
* project for which the project description is requested * project for which the project description is requested
* @param loadIfExists * @param loadIfExists
* if true the method first tries to load and return the project * if true the method first tries to load and return the project description from the
* description from the settings file (.cproject), if false, the * settings file (.cproject), if false, the stored settings are ignored and the new
* stored settings are ignored and the new (empty) project * (empty) project description is created
* description is created
* @param creating * @param creating
* if true the created project description will be contain the * if true the created project description will be contain the true
* true "isCdtProjectCreating" state. <br> * "isCdtProjectCreating" state. <br>
* NOTE: in case the project already contains the project * NOTE: in case the project already contains the project description AND its
* description AND its "isCdtProjectCreating" is false the * "isCdtProjectCreating" is false the resulting description will be created with the
* resulting description will be created with the false * false "isCdtProjectCreating" state.
* "isCdtProjectCreating" state.
* *
* <br> * <br>
* NOTE: changes made to the returned project description will * NOTE: changes made to the returned project description will not be applied until
* not be applied until the * the {@link #setProjectDescription(IProject, ICProjectDescription)} is called.
* {@link #setProjectDescription(IProject, ICProjectDescription)}
* is called.
* @return {@link ICProjectDescription} * @return {@link ICProjectDescription}
* @throws CoreException * @throws CoreException
*/ */
@ -1330,20 +1294,17 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the project description associated with this project or null if * Returns the project description associated with this project or null if the project does not
* the project does not contain the CDT data associated with it. * contain the CDT data associated with it.
* *
* This is a convenience method fully equivalent to * This is a convenience method fully equivalent to getProjectDescription(project, true) see
* getProjectDescription(project, true) see
* {@link #getProjectDescription(IProject, boolean)} for more detail. * {@link #getProjectDescription(IProject, boolean)} for more detail.
* *
* @param project * @param project
* @return a writable copy of the ICProjectDescription or null if the * @return a writable copy of the ICProjectDescription or null if the project does not contain
* project does not contain the CDT data associated with it. <br> * the CDT data associated with it. <br>
* Note: changes to the project description will not be * Note: changes to the project description will not be reflected/used by the core until
* reflected/used by the core until the * the {@link #setProjectDescription(IProject, ICProjectDescription)} is called.
* {@link #setProjectDescription(IProject, ICProjectDescription)} is
* called.
* *
* @see #getProjectDescription(IProject, boolean) * @see #getProjectDescription(IProject, boolean)
*/ */
@ -1352,8 +1313,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Called to save/apply the project description. The method should be called * Called to save/apply the project description. The method should be called to apply changes
* to apply changes made to the project description returned by the * made to the project description returned by the
* {@link #getProjectDescription(IProject, boolean)} or * {@link #getProjectDescription(IProject, boolean)} or
* {@link #createProjectDescription(IProject, boolean)} * {@link #createProjectDescription(IProject, boolean)}
* *
@ -1374,40 +1335,37 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the project description associated with this project or null if * Returns the project description associated with this project or null if the project does not
* the project does not contain the CDT data associated with it. * contain the CDT data associated with it.
* *
* @param project * @param project
* project for which the description is requested * project for which the description is requested
* @param write * @param write
* if true, the writable description copy is returned. If false * if true, the writable description copy is returned. If false the cached read-only
* the cached read-only description is returned. * description is returned.
* *
* <br> * <br>
* CDT core maintains the cached project description settings. If * CDT core maintains the cached project description settings. If only read access is
* only read access is needed to description, then the read-only * needed to description, then the read-only project description should be obtained.
* project description should be obtained. This description * This description always operates with cached data and thus it is better to use it
* always operates with cached data and thus it is better to use * for performance reasons. All set* calls to the read-only description result in the
* it for performance reasons. All set* calls to the read-only * {@link WriteAccessException}.
* description result in the {@link WriteAccessException}.
* *
* When the writable description is requested, the description * When the writable description is requested, the description copy is created.
* copy is created. Changes to this description will not be * Changes to this description will not be reflected/used by the core and the Build
* reflected/used by the core and the Build System until the * System until the {@link #setProjectDescription(IProject, ICProjectDescription)} is
* {@link #setProjectDescription(IProject, ICProjectDescription)} * called.
* is called.
* *
* Each getProjectDescription(project, true) returns a new copy * Each getProjectDescription(project, true) returns a new copy of the project
* of the project description. * description.
* *
* The writable description uses the cached data until the first * The writable description uses the cached data until the first set call after that
* set call after that the description communicates directly to * the description communicates directly to the Build System i.e. the implementer of
* the Build System i.e. the implementer of the * the org.eclipse.cdt.core.CConfigurationDataProvider extension This ensures the
* org.eclipse.cdt.core.CConfigurationDataProvider extension This * Core<->Build System settings integrity.
* ensures the Core<->Build System settings integrity.
* *
* @return {@link ICProjectDescription} or null if the project does not * @return {@link ICProjectDescription} or null if the project does not contain the CDT data
* contain the CDT data associated with it. * associated with it.
*/ */
public ICProjectDescription getProjectDescription(IProject project, boolean write) { public ICProjectDescription getProjectDescription(IProject project, boolean write) {
return fNewCProjectDescriptionManager.getProjectDescription(project, write); return fNewCProjectDescriptionManager.getProjectDescription(project, write);
@ -1417,8 +1375,7 @@ public class CCorePlugin extends Plugin {
* Forces the cached data of the specified projects to be re-calculated. * Forces the cached data of the specified projects to be re-calculated.
* *
* @param projects * @param projects
* if <code>null</code>, all projects within the workspace are * if <code>null</code>, all projects within the workspace are updated
* updated
* @param monitor * @param monitor
* @throws CoreException * @throws CoreException
*/ */
@ -1457,8 +1414,7 @@ public class CCorePlugin extends Plugin {
// NON-API // NON-API
/** /**
* @noreference This constructor is not intended to be referenced by * @noreference This constructor is not intended to be referenced by clients.
* clients.
*/ */
public CCorePlugin() { public CCorePlugin() {
super(); super();
@ -1476,9 +1432,8 @@ public class CCorePlugin extends Plugin {
* Prints a message in the log * Prints a message in the log
* *
* @param severity * @param severity
* - desired severity of the message in the log, one of * - desired severity of the message in the log, one of {@link IStatus#INFO},
* {@link IStatus#INFO}, {@link IStatus#WARNING} or * {@link IStatus#WARNING} or {@link IStatus#ERROR}
* {@link IStatus#ERROR}
* @param msg * @param msg
* - message * - message
* *
@ -1493,9 +1448,8 @@ public class CCorePlugin extends Plugin {
* Prints a message in the log accompanied by stack trace * Prints a message in the log accompanied by stack trace
* *
* @param severity * @param severity
* - desired severity of the message in the log, one of * - desired severity of the message in the log, one of {@link IStatus#INFO},
* {@link IStatus#INFO}, {@link IStatus#WARNING} or * {@link IStatus#WARNING} or {@link IStatus#ERROR}
* {@link IStatus#ERROR}
* @param msg * @param msg
* - message * - message
* *
@ -1561,9 +1515,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the preference controlling whether source roots are shown at the * Returns the preference controlling whether source roots are shown at the top of projects or
* top of projects or embedded within the resource tree of projects when * embedded within the resource tree of projects when they are not top level folders.
* they are not top level folders.
* *
* @return boolean preference value * @return boolean preference value
* @since 5.2 * @since 5.2

View file

@ -79,287 +79,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=110
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

View file

@ -1,5 +1,4 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
formatter_profile=_CDT
formatter_settings_version=12 formatter_settings_version=12
org.eclipse.jdt.ui.ignorelowercasenames=true org.eclipse.jdt.ui.ignorelowercasenames=true
org.eclipse.jdt.ui.importorder=java;javax;org;com;org.eclipse.cdt;org.eclipse.cdt.internal;org.eclipse.cdt.internal.ui; org.eclipse.jdt.ui.importorder=java;javax;org;com;org.eclipse.cdt;org.eclipse.cdt.internal;org.eclipse.cdt.internal.ui;

View file

@ -21,10 +21,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
@ -69,8 +71,7 @@ import org.eclipse.cdt.internal.ui.newui.Messages;
import org.eclipse.cdt.internal.ui.newui.StatusMessageLine; import org.eclipse.cdt.internal.ui.newui.StatusMessageLine;
/** /**
* This tab presents language settings entries categorized by language * This tab presents language settings entries categorized by language settings providers.
* settings providers.
* *
* @noinstantiate This class is not intended to be instantiated by clients. * @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
@ -133,17 +134,23 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (entriesParent != null) { if (entriesParent != null) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_PARENT; overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_PARENT;
} }
} else if (provider instanceof ILanguageSettingsBroadcastingProvider && (page.isForFile() || page.isForFolder())) { } else if (provider instanceof ILanguageSettingsBroadcastingProvider
&& (page.isForFile() || page.isForFolder())) {
// Assuming that the default entries for a resource are always null. // Assuming that the default entries for a resource are always null.
// Using that for performance reasons. See note in performDefaults(). // Using that for performance reasons. See note in performDefaults().
List<ICLanguageSettingEntry> entriesParent = provider.getSettingEntries(null, null, currentLanguageId); List<ICLanguageSettingEntry> entriesParent = provider
.getSettingEntries((ICConfigurationDescription) null, null, currentLanguageId);
if (entriesParent == null) {
entriesParent = provider.getSettingEntries((IBuildConfiguration) null, null, currentLanguageId);
}
if (entries != null && !entries.equals(entriesParent)) { if (entries != null && !entries.equals(entriesParent)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING; overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
} }
} }
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ILanguageSettingsProvider> initialProviders = initialProvidersMap.get(cfgDescription.getId()); List<ILanguageSettingsProvider> initialProviders = initialProvidersMap
.get(cfgDescription.getId());
if (initialProviders != null && !initialProviders.contains(provider)) { if (initialProviders != null && !initialProviders.contains(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED; overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
} }
@ -194,7 +201,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
return (Object[]) parentElement; return (Object[]) parentElement;
if (parentElement instanceof ILanguageSettingsProvider) { if (parentElement instanceof ILanguageSettingsProvider) {
ILanguageSettingsProvider lsProvider = (ILanguageSettingsProvider)parentElement; ILanguageSettingsProvider lsProvider = (ILanguageSettingsProvider) parentElement;
List<ICLanguageSettingEntry> entriesList = getSettingEntriesUpResourceTree(lsProvider); List<ICLanguageSettingEntry> entriesList = getSettingEntriesUpResourceTree(lsProvider);
if (entriesList == null) { if (entriesList == null) {
return null; return null;
@ -225,7 +232,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
@Override @Override
public boolean hasChildren(Object element) { public boolean hasChildren(Object element) {
Object[] children = getChildren(element); Object[] children = getChildren(element);
return children!=null && children.length>0; return children != null && children.length > 0;
} }
@Override @Override
@ -242,7 +249,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
* Shortcut for getting the current resource for the property page. * Shortcut for getting the current resource for the property page.
*/ */
private IResource getResource() { private IResource getResource() {
return (IResource)page.getElement(); return (IResource) page.getElement();
} }
/** /**
@ -269,7 +276,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
} }
if (itemData instanceof ILanguageSettingsProvider) { if (itemData instanceof ILanguageSettingsProvider) {
provider = (ILanguageSettingsProvider)itemData; provider = (ILanguageSettingsProvider) itemData;
} }
} }
@ -287,7 +294,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
TreeItem item = items[0]; TreeItem item = items[0];
Object itemData = item.getData(); Object itemData = item.getData();
if (itemData instanceof ICLanguageSettingEntry) { if (itemData instanceof ICLanguageSettingEntry) {
entry = (ICLanguageSettingEntry)itemData; entry = (ICLanguageSettingEntry) itemData;
} }
} }
@ -302,19 +309,28 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
*/ */
private List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree(ILanguageSettingsProvider provider) { private List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree(ILanguageSettingsProvider provider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
IResource rc = getResource(); IResource rc = getResource();
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, rc, currentLanguageId); List<ICLanguageSettingEntry> entries = LanguageSettingsManager
.getSettingEntriesUpResourceTree(provider, config, rc, currentLanguageId);
return entries; return entries;
} }
/** /**
* Shortcut for getting setting entries for current context without checking the parent resource. * Shortcut for getting setting entries for current context without checking the parent
* resource.
*
* @return list of setting entries for the current context. * @return list of setting entries for the current context.
*/ */
private List<ICLanguageSettingEntry> getSettingEntries(ILanguageSettingsProvider provider) { private List<ICLanguageSettingEntry> getSettingEntries(ILanguageSettingsProvider provider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource(); IResource rc = getResource();
return provider.getSettingEntries(cfgDescription, rc, currentLanguageId); ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, rc, currentLanguageId);
if (entries == null) {
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
entries = provider.getSettingEntries(config, rc, currentLanguageId);
}
return entries;
} }
/** /**
@ -326,7 +342,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
for (ICConfigurationDescription cfgDescription : cfgDescriptions) { for (ICConfigurationDescription cfgDescription : cfgDescriptions) {
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
String cfgId = cfgDescription.getId(); String cfgId = cfgDescription.getId();
List<ILanguageSettingsProvider> initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
initialProvidersMap.put(cfgId, initialProviders); initialProvidersMap.put(cfgId, initialProviders);
} }
} }
@ -412,7 +429,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
@Override @Override
public void widgetDefaultSelected(SelectionEvent e) { public void widgetDefaultSelected(SelectionEvent e) {
if (buttonIsEnabled(BUTTON_EDIT) && treeEntries.getSelection().length>0) if (buttonIsEnabled(BUTTON_EDIT) && treeEntries.getSelection().length > 0)
buttonPressed(BUTTON_EDIT); buttonPressed(BUTTON_EDIT);
} }
}); });
@ -423,7 +440,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
* Create sash form. * Create sash form.
*/ */
private void createSashForm() { private void createSashForm() {
sashFormEntries = new SashForm(usercomp,SWT.HORIZONTAL); sashFormEntries = new SashForm(usercomp, SWT.HORIZONTAL);
GridData gd = new GridData(GridData.FILL_BOTH); GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2; gd.horizontalSpan = 2;
@ -443,7 +460,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
* Create check-box to control whether to show built-in entries or not. * Create check-box to control whether to show built-in entries or not.
*/ */
private void createBuiltInsCheckBox() { private void createBuiltInsCheckBox() {
builtInCheckBox = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1, GridData.FILL_HORIZONTAL); builtInCheckBox = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1,
GridData.FILL_HORIZONTAL);
builtInCheckBox.addSelectionListener(new SelectionAdapter() { builtInCheckBox.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
@ -462,7 +480,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
usercomp.setLayout(new GridLayout()); usercomp.setLayout(new GridLayout());
GridData gd = (GridData) usercomp.getLayoutData(); GridData gd = (GridData) usercomp.getLayoutData();
// Discourage settings entry table from trying to show all its items at once, see bug 264330 // Discourage settings entry table from trying to show all its items at once, see bug 264330
gd.heightHint =1; gd.heightHint = 1;
if (page instanceof LanguageSettingsProvidersPage) { if (page instanceof LanguageSettingsProvidersPage) {
masterPropertyPage = (LanguageSettingsProvidersPage) page; masterPropertyPage = (LanguageSettingsProvidersPage) page;
@ -584,7 +602,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
* Displays warning message - if any - for selected language settings entry. * Displays warning message - if any - for selected language settings entry.
*/ */
private void updateStatusLine() { private void updateStatusLine() {
IStatus status=null; IStatus status = null;
if (masterPropertyPage.isLanguageSettingsProvidersEnabled()) { if (masterPropertyPage.isLanguageSettingsProvidersEnabled()) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
status = LanguageSettingsImages.getStatus(getSelectedEntry(), cfgDescription); status = LanguageSettingsImages.getStatus(getSelectedEntry(), cfgDescription);
@ -594,12 +612,14 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider); && LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider);
if (provider != null && !isAllowedEditing) { if (provider != null && !isAllowedEditing) {
status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID, Messages.LanguageSettingsEntriesTab_Entries_Not_Editable); status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID,
Messages.LanguageSettingsEntriesTab_Entries_Not_Editable);
} }
} }
if (status == null || status == Status.OK_STATUS) { if (status == null || status == Status.OK_STATUS) {
if (treeLanguages.getItemCount() <= 0) { if (treeLanguages.getItemCount() <= 0) {
status = new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, Messages.LanguageSettingsEntriesTab_Cannot_Determine_Languages); status = new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID,
Messages.LanguageSettingsEntriesTab_Cannot_Determine_Languages);
} }
} }
fStatusLine.setErrorStatus(status); fStatusLine.setErrorStatus(status);
@ -638,9 +658,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
/** /**
* That method returns exact position of an element in the list. * That method returns exact position of an element in the list. Note that
* Note that {@link List#indexOf(Object)} returns position of the first element * {@link List#indexOf(Object)} returns position of the first element equals to the given one,
* equals to the given one, not exact element. * not exact element.
* *
* @param entries * @param entries
* @param entry * @param entry
@ -664,7 +684,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
for (TreeItem providerItem : providerItems) { for (TreeItem providerItem : providerItems) {
Object providerItemData = providerItem.getData(); Object providerItemData = providerItem.getData();
if (providerItemData instanceof ILanguageSettingsProvider) { if (providerItemData instanceof ILanguageSettingsProvider) {
ILanguageSettingsProvider provider = (ILanguageSettingsProvider)providerItemData; ILanguageSettingsProvider provider = (ILanguageSettingsProvider) providerItemData;
if (provider.getId().equals(id)) { if (provider.getId().equals(id)) {
return providerItem; return providerItem;
} }
@ -681,12 +701,12 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
for (TreeItem providerItem : providerItems) { for (TreeItem providerItem : providerItems) {
Object providerItemData = providerItem.getData(); Object providerItemData = providerItem.getData();
if (providerItemData instanceof ILanguageSettingsProvider) { if (providerItemData instanceof ILanguageSettingsProvider) {
ILanguageSettingsProvider provider = (ILanguageSettingsProvider)providerItemData; ILanguageSettingsProvider provider = (ILanguageSettingsProvider) providerItemData;
if (provider.getId().equals(providerId)) { if (provider.getId().equals(providerId)) {
TreeItem[] entryItems = providerItem.getItems(); TreeItem[] entryItems = providerItem.getItems();
for (TreeItem entryItem : entryItems) { for (TreeItem entryItem : entryItems) {
Object entryItemData = entryItem.getData(); Object entryItemData = entryItem.getData();
if (entryItemData==entry) if (entryItemData == entry)
return entryItem; return entryItem;
} }
} }
@ -724,7 +744,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider); List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider);
ICLanguageSettingEntry selectedEntry = getSelectedEntry(); ICLanguageSettingEntry selectedEntry = getSelectedEntry();
int pos = getExactIndex(entries, selectedEntry); int pos = getExactIndex(entries, selectedEntry);
entries.add(pos+1, entry); entries.add(pos + 1, entry);
saveEntries(provider, entries); saveEntries(provider, entries);
updateTreeForEntries(providerId, entry); updateTreeForEntries(providerId, entry);
@ -737,27 +757,34 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
private void saveEntries(ILanguageSettingsProvider provider, List<ICLanguageSettingEntry> entries) { private void saveEntries(ILanguageSettingsProvider provider, List<ICLanguageSettingEntry> entries) {
if (provider instanceof ILanguageSettingsEditableProvider) { if (provider instanceof ILanguageSettingsEditableProvider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
IResource rc = getResource(); IResource rc = getResource();
if (entries != null && rc != null) { if (entries != null && rc != null) {
IContainer parent = rc instanceof IProject ? null : rc.getParent(); IContainer parent = rc instanceof IProject ? null : rc.getParent();
List<ICLanguageSettingEntry> parentEntries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, parent, currentLanguageId); List<ICLanguageSettingEntry> parentEntries = LanguageSettingsManager
.getSettingEntriesUpResourceTree(provider, config, parent, currentLanguageId);
if (entries.equals(parentEntries)) { if (entries.equals(parentEntries)) {
// to use parent entries instead // to use parent entries instead
entries = null; entries = null;
} }
} }
((ILanguageSettingsEditableProvider)provider).setSettingEntries(cfgDescription, rc, currentLanguageId, entries); ((ILanguageSettingsEditableProvider) provider).setSettingEntries(config, rc, currentLanguageId,
entries);
} }
} }
/** /**
* Get list of setting entries shown to user. If current resource has no entries assigned the parent * Get list of setting entries shown to user. If current resource has no entries assigned the
* resource is inspected. * parent resource is inspected.
*/ */
private List<ICLanguageSettingEntry> getEntriesShownToUser(ILanguageSettingsProvider provider) { private List<ICLanguageSettingEntry> getEntriesShownToUser(ILanguageSettingsProvider provider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource(); IResource rc = getResource();
ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, rc, currentLanguageId); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, rc, currentLanguageId);
if (entries == null) {
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
entries = provider.getSettingEntries(config, rc, currentLanguageId);
}
if (entries == null) { if (entries == null) {
entries = getSettingEntriesUpResourceTree(provider); entries = getSettingEntriesUpResourceTree(provider);
} }
@ -772,11 +799,12 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (selectedProvider instanceof ILanguageSettingsEditableProvider) { if (selectedProvider instanceof ILanguageSettingsEditableProvider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
ICLanguageSettingEntry selectedEntry = getSelectedEntry(); ICLanguageSettingEntry selectedEntry = getSelectedEntry();
LanguageSettingEntryDialog addDialog = new LanguageSettingEntryDialog(usercomp.getShell(), cfgDescription, selectedEntry, true); LanguageSettingEntryDialog addDialog = new LanguageSettingEntryDialog(usercomp.getShell(),
cfgDescription, selectedEntry, true);
if (addDialog.open()) { if (addDialog.open()) {
ICLanguageSettingEntry settingEntry = addDialog.getEntries()[0]; ICLanguageSettingEntry settingEntry = addDialog.getEntries()[0];
if (settingEntry != null) { if (settingEntry != null) {
selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider)selectedProvider); selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider) selectedProvider);
addEntry(selectedProvider, settingEntry); addEntry(selectedProvider, settingEntry);
} }
} }
@ -784,25 +812,27 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
/** /**
* Return working copy of the provider to edit in current session. If the supplied provider is already * Return working copy of the provider to edit in current session. If the supplied provider is
* the working copy return it. If not, create a copy to be edited. * already the working copy return it. If not, create a copy to be edited.
*/ */
private ILanguageSettingsEditableProvider getWorkingCopy(ILanguageSettingsEditableProvider provider) { private ILanguageSettingsEditableProvider getWorkingCopy(ILanguageSettingsEditableProvider provider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ILanguageSettingsProvider> initialProviders = initialProvidersMap.get(cfgDescription.getId()); List<ILanguageSettingsProvider> initialProviders = initialProvidersMap.get(cfgDescription.getId());
if (initialProviders.contains(provider)) { if (initialProviders.contains(provider)) {
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(
((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders());
int pos = providers.indexOf(provider); int pos = providers.indexOf(provider);
if (pos >= 0) { if (pos >= 0) {
try { try {
provider = provider.clone(); provider = provider.clone();
providers.set(pos, provider); providers.set(pos, provider);
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); ((ILanguageSettingsProvidersKeeper) cfgDescription)
.setLanguageSettingProviders(providers);
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); //$NON-NLS-1$ CUIPlugin.log("Internal Error: cannot clone provider " + provider.getId(), e); //$NON-NLS-1$
} }
} else { } else {
CUIPlugin.log("Internal Error: cannot find provider "+provider.getId(), new Exception()); //$NON-NLS-1$ CUIPlugin.log("Internal Error: cannot find provider " + provider.getId(), new Exception()); //$NON-NLS-1$
} }
} }
return provider; return provider;
@ -811,14 +841,16 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Call dialog to edit settings entry. * Call dialog to edit settings entry.
*/ */
private void performEdit(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { private void performEdit(ILanguageSettingsProvider selectedProvider,
ICLanguageSettingEntry selectedEntry) {
if (selectedProvider instanceof ILanguageSettingsEditableProvider && selectedEntry != null) { if (selectedProvider instanceof ILanguageSettingsEditableProvider && selectedEntry != null) {
ICConfigurationDescription cfgDecsription = getConfigurationDescription(); ICConfigurationDescription cfgDecsription = getConfigurationDescription();
LanguageSettingEntryDialog editDialog = new LanguageSettingEntryDialog(usercomp.getShell(), cfgDecsription, selectedEntry); LanguageSettingEntryDialog editDialog = new LanguageSettingEntryDialog(usercomp.getShell(),
cfgDecsription, selectedEntry);
if (editDialog.open()) { if (editDialog.open()) {
ICLanguageSettingEntry newEntry = editDialog.getEntries()[0]; ICLanguageSettingEntry newEntry = editDialog.getEntries()[0];
if (newEntry != null) { if (newEntry != null) {
selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider)selectedProvider); selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider) selectedProvider);
replaceEntry(selectedProvider, selectedEntry, newEntry); replaceEntry(selectedProvider, selectedEntry, newEntry);
} }
} }
@ -850,7 +882,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Replace provider's entry and update UI. * Replace provider's entry and update UI.
*/ */
private void replaceEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry oldEntry, ICLanguageSettingEntry newEntry) { private void replaceEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry oldEntry,
ICLanguageSettingEntry newEntry) {
if (provider != null && oldEntry != null && newEntry != null) { if (provider != null && oldEntry != null && newEntry != null) {
String providerId = provider.getId(); String providerId = provider.getId();
@ -878,9 +911,10 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Clear provider's entries for the given resource or remove one entry depending on selection. * Clear provider's entries for the given resource or remove one entry depending on selection.
*/ */
private void performDelete(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { private void performDelete(ILanguageSettingsProvider selectedProvider,
ICLanguageSettingEntry selectedEntry) {
if (selectedProvider instanceof ILanguageSettingsEditableProvider) { if (selectedProvider instanceof ILanguageSettingsEditableProvider) {
selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider)selectedProvider); selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider) selectedProvider);
if (selectedEntry != null) { if (selectedEntry != null) {
deleteEntry(selectedProvider, selectedEntry); deleteEntry(selectedProvider, selectedEntry);
} else { } else {
@ -892,7 +926,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Change "Export" flag of provider's entry and update UI. * Change "Export" flag of provider's entry and update UI.
*/ */
private void exportEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry entry, boolean isExport) { private void exportEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry entry,
boolean isExport) {
if (provider instanceof ILanguageSettingsEditableProvider && entry != null) { if (provider instanceof ILanguageSettingsEditableProvider && entry != null) {
int flags = entry.getFlags(); int flags = entry.getFlags();
if (isExport) { if (isExport) {
@ -902,7 +937,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
ICLanguageSettingEntry newEntry = CDataUtil.createEntry(entry, flags); ICLanguageSettingEntry newEntry = CDataUtil.createEntry(entry, flags);
if (newEntry != null) { if (newEntry != null) {
provider = getWorkingCopy((ILanguageSettingsEditableProvider)provider); provider = getWorkingCopy((ILanguageSettingsEditableProvider) provider);
replaceEntry(provider, entry, newEntry); replaceEntry(provider, entry, newEntry);
} }
} }
@ -915,8 +950,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (provider instanceof ILanguageSettingsEditableProvider) { if (provider instanceof ILanguageSettingsEditableProvider) {
List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider); List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider);
if (entries.size() > 0) { if (entries.size() > 0) {
provider = getWorkingCopy((ILanguageSettingsEditableProvider)provider); provider = getWorkingCopy((ILanguageSettingsEditableProvider) provider);
for (int i = 0; i < entries.size() ; i++) { for (int i = 0; i < entries.size(); i++) {
ICLanguageSettingEntry entry = entries.get(i); ICLanguageSettingEntry entry = entries.get(i);
int flags = entry.getFlags(); int flags = entry.getFlags();
if (isExport) { if (isExport) {
@ -936,7 +971,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Export or un-export provider's entry or entries. * Export or un-export provider's entry or entries.
*/ */
private void performExport(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { private void performExport(ILanguageSettingsProvider selectedProvider,
ICLanguageSettingEntry selectedEntry) {
if (selectedProvider instanceof ILanguageSettingsEditableProvider) { if (selectedProvider instanceof ILanguageSettingsEditableProvider) {
boolean isExport = isExportMode(selectedProvider, selectedEntry); boolean isExport = isExportMode(selectedProvider, selectedEntry);
if (selectedEntry != null) { if (selectedEntry != null) {
@ -956,7 +992,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider); List<ICLanguageSettingEntry> entries = getEntriesShownToUser(provider);
int pos = getExactIndex(entries, entry); int pos = getExactIndex(entries, entry);
int newPos = up ? pos-1 : pos+1; int newPos = up ? pos - 1 : pos + 1;
Collections.swap(entries, pos, newPos); Collections.swap(entries, pos, newPos);
saveEntries(provider, entries); saveEntries(provider, entries);
@ -967,9 +1003,10 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Move provider's entry up. * Move provider's entry up.
*/ */
private void performMoveUp(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { private void performMoveUp(ILanguageSettingsProvider selectedProvider,
ICLanguageSettingEntry selectedEntry) {
if (selectedEntry != null && (selectedProvider instanceof ILanguageSettingsEditableProvider)) { if (selectedEntry != null && (selectedProvider instanceof ILanguageSettingsEditableProvider)) {
selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider)selectedProvider); selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider) selectedProvider);
moveEntry(selectedProvider, selectedEntry, true); moveEntry(selectedProvider, selectedEntry, true);
} }
} }
@ -977,9 +1014,10 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Move provider's entry down. * Move provider's entry down.
*/ */
private void performMoveDown(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { private void performMoveDown(ILanguageSettingsProvider selectedProvider,
ICLanguageSettingEntry selectedEntry) {
if (selectedEntry != null && (selectedProvider instanceof ILanguageSettingsEditableProvider)) { if (selectedEntry != null && (selectedProvider instanceof ILanguageSettingsEditableProvider)) {
selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider)selectedProvider); selectedProvider = getWorkingCopy((ILanguageSettingsEditableProvider) selectedProvider);
moveEntry(selectedProvider, selectedEntry, false); moveEntry(selectedProvider, selectedEntry, false);
} }
} }
@ -992,12 +1030,14 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
IResource rc = getResource(); IResource rc = getResource();
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
if (rc != null && cfgDescription instanceof ILanguageSettingsProvidersKeeper) { if (rc != null && cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
List<ILanguageSettingsProvider> cfgProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> cfgProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription)
.getLanguageSettingProviders();
for (ILanguageSettingsProvider cfgProvider : cfgProviders) { for (ILanguageSettingsProvider cfgProvider : cfgProviders) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(cfgProvider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(cfgProvider);
if (rawProvider instanceof LanguageSettingsBaseProvider) { if (rawProvider instanceof LanguageSettingsBaseProvider) {
// filter out providers incapable of providing entries for this language // filter out providers incapable of providing entries for this language
List<String> languageIds = ((LanguageSettingsBaseProvider)rawProvider).getLanguageScope(); List<String> languageIds = ((LanguageSettingsBaseProvider) rawProvider)
.getLanguageScope();
if (languageIds != null && !languageIds.contains(currentLanguageId)) { if (languageIds != null && !languageIds.contains(currentLanguageId)) {
continue; continue;
} }
@ -1011,9 +1051,11 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Re-reads and refreshes the entries tree. * Re-reads and refreshes the entries tree.
* *
* @param selectedProviderId - provider of the entry to select after update. * @param selectedProviderId
* If the entry is {@code null} the provider itself will be selected. * - provider of the entry to select after update. If the entry is {@code null} the
* @param selectedEntry - entry to select in the tree after update. * provider itself will be selected.
* @param selectedEntry
* - entry to select in the tree after update.
*/ */
private void updateTreeForEntries(String selectedProviderId, ICLanguageSettingEntry selectedEntry) { private void updateTreeForEntries(String selectedProviderId, ICLanguageSettingEntry selectedEntry) {
Object[] expandedElements = treeEntriesViewer.getExpandedElements(); Object[] expandedElements = treeEntriesViewer.getExpandedElements();
@ -1031,7 +1073,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (provider.getId().equals(selectedProviderId)) { if (provider.getId().equals(selectedProviderId)) {
for (int i = 0; i < expandedElements.length; i++) { for (int i = 0; i < expandedElements.length; i++) {
if (expandedElements[i] instanceof ILanguageSettingsProvider) { if (expandedElements[i] instanceof ILanguageSettingsProvider) {
if (((ILanguageSettingsProvider) expandedElements[i]).getId().equals(selectedProviderId)) { if (((ILanguageSettingsProvider) expandedElements[i]).getId()
.equals(selectedProviderId)) {
expandedElements[i] = provider; expandedElements[i] = provider;
break; break;
} }
@ -1062,17 +1105,19 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
// remove null language when some real ones are defined // remove null language when some real ones are defined
languageIds.remove(null); languageIds.remove(null);
} else if (languageIds.isEmpty()) { } else if (languageIds.isEmpty()) {
// if no languages are defined keep null language as "Unspecified language" // if no languages are defined keep null language as "Unspecified
// language"
languageIds.add(null); languageIds.add(null);
} }
// Use a TreeMap to sort the languages by name. // Use a TreeMap to sort the languages by name.
// For each name we keep a list of ids in case of name overlap. // For each name we keep a list of ids in case of name overlap.
Map<String, List<String>> map = new TreeMap<String, List<String>>(); Map<String, List<String>> map = new TreeMap<String, List<String>>();
for (String langId : languageIds) { for (String langId : languageIds) {
ILanguage language = LanguageManager.getInstance().getLanguage(langId); ILanguage language = LanguageManager.getInstance().getLanguage(langId);
String langName = language != null ? language.getName() : Messages.LanguageSettingsEntriesTab_UnspecifiedLanguage; String langName = language != null ? language.getName()
: Messages.LanguageSettingsEntriesTab_UnspecifiedLanguage;
if (langName == null || langName.length() == 0) if (langName == null || langName.length() == 0)
continue; continue;
List<String> langIds = map.get(langName); List<String> langIds = map.get(langName);
@ -1082,7 +1127,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
langIds.add(langId); langIds.add(langId);
} }
for (String langName : map.keySet()) { for (String langName : map.keySet()) {
List<String> langIds = map.get(langName); List<String> langIds = map.get(langName);
for (String langId : langIds) { for (String langId : langIds) {
@ -1170,26 +1215,33 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
return; return;
} }
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
boolean changed = false; boolean changed = false;
IResource rc = getResource(); IResource rc = getResource();
List<ILanguageSettingsProvider> oldProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> oldProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription)
List<ILanguageSettingsProvider> newProviders = new ArrayList<ILanguageSettingsProvider>(oldProviders.size()); .getLanguageSettingProviders();
List<ILanguageSettingsProvider> newProviders = new ArrayList<ILanguageSettingsProvider>(
oldProviders.size());
// clear entries for a given resource for all languages where applicable // clear entries for a given resource for all languages where
providers: for (ILanguageSettingsProvider provider : oldProviders) { // applicable
providers: for (ILanguageSettingsProvider provider : oldProviders) {
ILanguageSettingsEditableProvider providerCopy = null; ILanguageSettingsEditableProvider providerCopy = null;
if (provider instanceof ILanguageSettingsEditableProvider) { if (provider instanceof ILanguageSettingsEditableProvider) {
for (TreeItem langItems : treeLanguages.getItems()) { for (TreeItem langItems : treeLanguages.getItems()) {
String langId = (String)langItems.getData(); String langId = (String) langItems.getData();
if (provider.getSettingEntries(cfgDescription, rc, langId) != null) { if (provider.getSettingEntries(cfgDescription, rc, langId) != null
|| provider.getSettingEntries(config, rc, langId) != null) {
if (providerCopy == null) { if (providerCopy == null) {
// copy providers to be able to "Cancel" in UI // copy providers to be able to "Cancel" in UI
providerCopy = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) provider, true); providerCopy = LanguageSettingsManager
.getProviderCopy((ILanguageSettingsEditableProvider) provider, true);
if (providerCopy == null) { if (providerCopy == null) {
continue providers; continue providers;
} }
} }
providerCopy.setSettingEntries(cfgDescription, rc, langId, null); providerCopy.setSettingEntries(config, rc, langId, null);
changed = true; changed = true;
} }
} }
@ -1208,12 +1260,15 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
@Override @Override
protected void performApply(ICResourceDescription srcRcDescription, ICResourceDescription destRcDescription) { protected void performApply(ICResourceDescription srcRcDescription,
ICResourceDescription destRcDescription) {
if (!page.isForPrefs()) { if (!page.isForPrefs()) {
ICConfigurationDescription sd = srcRcDescription.getConfiguration(); ICConfigurationDescription sd = srcRcDescription.getConfiguration();
ICConfigurationDescription dd = destRcDescription.getConfiguration(); ICConfigurationDescription dd = destRcDescription.getConfiguration();
if (sd instanceof ILanguageSettingsProvidersKeeper && dd instanceof ILanguageSettingsProvidersKeeper) { if (sd instanceof ILanguageSettingsProvidersKeeper
List<ILanguageSettingsProvider> newProviders = ((ILanguageSettingsProvidersKeeper) sd).getLanguageSettingProviders(); && dd instanceof ILanguageSettingsProvidersKeeper) {
List<ILanguageSettingsProvider> newProviders = ((ILanguageSettingsProvidersKeeper) sd)
.getLanguageSettingProviders();
((ILanguageSettingsProvidersKeeper) dd).setLanguageSettingProviders(newProviders); ((ILanguageSettingsProvidersKeeper) dd).setLanguageSettingProviders(newProviders);
} }
} }
@ -1245,7 +1300,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
IResource rc = getResource(); IResource rc = getResource();
if (rc instanceof IFile) { if (rc instanceof IFile) {
try { try {
ILanguage language = LanguageManager.getInstance().getLanguageForFile((IFile)rc, null); ILanguage language = LanguageManager.getInstance().getLanguageForFile((IFile) rc,
null);
return language != null; return language != null;
} catch (CoreException e) { } catch (CoreException e) {
// who cares, not even logging // who cares, not even logging

View file

@ -12,10 +12,12 @@ package org.eclipse.cdt.internal.ui.viewsupport;
import java.util.List; import java.util.List;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.jface.viewers.ILightweightLabelDecorator;
@ -34,15 +36,18 @@ import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.CPluginImages;
/** /**
* Determines if a file or folder got customized build settings and if so decorates with the "wrench" overlay. * Determines if a file or folder got customized build settings and if so decorates with the
* "wrench" overlay.
*/ */
public class CustomBuildSettingsDecorator implements ILightweightLabelDecorator { public class CustomBuildSettingsDecorator implements ILightweightLabelDecorator {
@Override @Override
public void decorate(Object element, IDecoration decoration) { public void decorate(Object element, IDecoration decoration) {
if (element instanceof IFile || element instanceof IFolder) { if (element instanceof IFile || element instanceof IFolder) {
IResource rc = (IResource) element; IResource rc = (IResource) element;
ICProjectDescriptionManager projectDescriptionManager = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescriptionManager projectDescriptionManager = CoreModel.getDefault()
ICProjectDescription prjDescription = projectDescriptionManager.getProjectDescription(rc.getProject(), ICProjectDescriptionManager.GET_IF_LOADDED); .getProjectDescriptionManager();
ICProjectDescription prjDescription = projectDescriptionManager
.getProjectDescription(rc.getProject(), ICProjectDescriptionManager.GET_IF_LOADDED);
if (prjDescription != null) { if (prjDescription != null) {
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
if (cfgDescription != null) { if (cfgDescription != null) {
@ -54,23 +59,33 @@ public class CustomBuildSettingsDecorator implements ILightweightLabelDecorator
} }
private static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { private static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) {
if (ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject()) && cfgDescription instanceof ILanguageSettingsProvidersKeeper) { IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
IContainer parent = rc.getParent(); if (config != null
List<String> languages = LanguageSettingsManager.getLanguages(rc, cfgDescription); && ScannerDiscoveryLegacySupport
for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) { .isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject())
for (String languageId : languages) { && cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId); IContainer parent = rc.getParent();
if (list != null) { List<String> languages = LanguageSettingsManager.getLanguages(rc, cfgDescription);
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(cfgDescription, parent, languageId); for (ILanguageSettingsProvider provider : ((ILanguageSettingsProvidersKeeper) cfgDescription)
// != is OK here due as the equal lists will have the same reference in WeakHashSet .getLanguageSettingProviders()) {
if (list != listDefault) for (String languageId : languages) {
return true; List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
} if (list == null) {
list = provider.getSettingEntries(config, rc, languageId);
}
if (list != null) {
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(config, parent,
languageId);
// != is OK here due as the equal lists will have the same reference in WeakHashSet
if (list != listDefault)
return true;
} }
} }
}
} }
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(rc.getProjectRelativePath(), true); ICResourceDescription rcDescription = cfgDescription
.getResourceDescription(rc.getProjectRelativePath(), true);
return rcDescription != null; return rcDescription != null;
} }

View file

@ -18,24 +18,25 @@ import java.util.List;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
import org.eclipse.cdt.core.settings.model.CIncludePathEntry; import org.eclipse.cdt.core.settings.model.CIncludePathEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.utils.spawner.ProcessFactory; import org.eclipse.cdt.utils.spawner.ProcessFactory;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
/** /**
* Discovers and persists the list of Qt include paths for a particular installation of * Discovers and persists the list of Qt include paths for a particular
* Qt. The Qt installation is described by the path to qmake. * installation of Qt. The Qt installation is described by the path to qmake.
* <p> * <p>
* Qt uses a tool called qmake to generate makefiles for Qt projects. The tool has a * Qt uses a tool called qmake to generate makefiles for Qt projects. The tool
* query mode that can be used to discover information about the Qt installation. Here * has a query mode that can be used to discover information about the Qt
* qmake is used to build a list of all installed Qt include paths. * installation. Here qmake is used to build a list of all installed Qt include
* paths.
* <p> * <p>
* These paths are persisted into a file called language-settings.xml in the workspace * These paths are persisted into a file called language-settings.xml in the
* metadata area. * workspace metadata area.
* *
* @see QtIncludePathsProvider * @see QtIncludePathsProvider
*/ */
@ -52,34 +53,34 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
private long qmakeModTime; private long qmakeModTime;
/** /**
* The cached data is reloaded when the folder holding the include paths * The cached data is reloaded when the folder holding the include paths is
* is removed. * removed.
*/ */
private String qtInstallHeadersPath; private String qtInstallHeadersPath;
/** /**
* The cached data is reloaded when the folder containing the include folders is * The cached data is reloaded when the folder containing the include
* modified. * folders is modified.
*/ */
private long qtInstallHeadersModTime; private long qtInstallHeadersModTime;
private static final String ATTR_QMAKE = "qmake"; private static final String ATTR_QMAKE = "qmake"; //$NON-NLS-1$
private static final String ATTR_QMAKE_MOD = "qmakeModification"; private static final String ATTR_QMAKE_MOD = "qmakeModification"; //$NON-NLS-1$
private static final String ATTR_QT_INSTALL_HEADERS = "QT_INSTALL_HEADERS"; private static final String ATTR_QT_INSTALL_HEADERS = "QT_INSTALL_HEADERS"; //$NON-NLS-1$
private static final String ATTR_QT_INSTALL_HEADERS_MOD = "qtInstallHeadersModification"; private static final String ATTR_QT_INSTALL_HEADERS_MOD = "qtInstallHeadersModification"; //$NON-NLS-1$
/** /**
* Create a new instance of the include path wrapper for the Qt installation for * Create a new instance of the include path wrapper for the Qt installation
* the given qmake binary. * for the given qmake binary.
*/ */
public QtIncludePaths(String qmakePath) { public QtIncludePaths(String qmakePath) {
this.qmakePath = qmakePath; this.qmakePath = qmakePath;
} }
/** /**
* Create and load an instance of QtIncludePaths from data that was serialized into the * Create and load an instance of QtIncludePaths from data that was
* given XML element. Return null if an instance cannot be loaded or if the installation * serialized into the given XML element. Return null if an instance cannot
* is no longer valid. * be loaded or if the installation is no longer valid.
*/ */
public static QtIncludePaths loadFrom(Node node) { public static QtIncludePaths loadFrom(Node node) {
if (node.getNodeType() != Node.ELEMENT_NODE) if (node.getNodeType() != Node.ELEMENT_NODE)
@ -87,8 +88,7 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
Element element = (Element) node; Element element = (Element) node;
String qmakePath = element.getAttribute(ATTR_QMAKE); String qmakePath = element.getAttribute(ATTR_QMAKE);
if (qmakePath == null if (qmakePath == null || qmakePath.isEmpty())
|| qmakePath.isEmpty())
return null; return null;
QtIncludePaths qtIncludePaths = new QtIncludePaths(qmakePath); QtIncludePaths qtIncludePaths = new QtIncludePaths(qmakePath);
@ -101,18 +101,16 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
} }
/** /**
* Return true if the receiver points to a valid Qt installation and false otherwise. * Return true if the receiver points to a valid Qt installation and false
* The installation is considered valid if an executable qmake binary exists at the * otherwise. The installation is considered valid if an executable qmake
* expected location. * binary exists at the expected location.
*/ */
public boolean isValid() { public boolean isValid() {
if (qmakePath == null if (qmakePath == null || qmakePath.isEmpty())
|| qmakePath.isEmpty())
return false; return false;
File qmake = new File(qmakePath); File qmake = new File(qmakePath);
return qmake.exists() return qmake.exists() && qmake.canExecute();
&& qmake.canExecute();
} }
@Override @Override
@ -120,8 +118,10 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
if (!(obj instanceof QtIncludePaths)) if (!(obj instanceof QtIncludePaths))
return super.equals(obj); return super.equals(obj);
// Include paths are equivalent when they point to the same qmake binary. All other // Include paths are equivalent when they point to the same qmake
// values are reloaded from that binary and do not need to be directly compared. // binary. All other
// values are reloaded from that binary and do not need to be directly
// compared.
QtIncludePaths other = (QtIncludePaths) obj; QtIncludePaths other = (QtIncludePaths) obj;
return qmakePath == null ? other.qmakePath == null : qmakePath.equals(other.qmakePath); return qmakePath == null ? other.qmakePath == null : qmakePath.equals(other.qmakePath);
} }
@ -132,33 +132,32 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
} }
/** /**
* Return a current list of the include paths for this Qt installation. Return null if * Return a current list of the include paths for this Qt installation.
* no such paths can be found. * Return null if no such paths can be found.
* <p> * <p>
* Updates the cached results if needed. If the settings are updated then the new list * Updates the cached results if needed. If the settings are updated then
* will be serialized into the workspace metadata area. * the new list will be serialized into the workspace metadata area.
*/ */
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription configDesc, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, String languageId) {
List<ICLanguageSettingEntry> entries = null; List<ICLanguageSettingEntry> entries = null;
File qmake = new File(qmakePath); File qmake = new File(qmakePath);
if (!qmake.exists() if (!qmake.exists() || qmakeModTime != qmake.lastModified())
|| qmakeModTime != qmake.lastModified())
entries = reload(); entries = reload();
else { else {
File qtInstallHeadersDir = new File(qtInstallHeadersPath); File qtInstallHeadersDir = new File(qtInstallHeadersPath);
if (!qtInstallHeadersDir.exists() if (!qtInstallHeadersDir.exists() || qtInstallHeadersModTime != qtInstallHeadersDir.lastModified())
|| qtInstallHeadersModTime != qtInstallHeadersDir.lastModified())
entries = reload(); entries = reload();
} }
// If the cache was not reloaded, then return the previously discovered entries. // If the cache was not reloaded, then return the previously discovered
// entries.
if (entries == null) if (entries == null)
return super.getSettingEntries(configDesc, rc, languageId); return super.getSettingEntries(config, rc, languageId);
// Otherwise store, persist, and return the newly discovered values. // Otherwise store, persist, and return the newly discovered values.
setSettingEntries(configDesc, rc, languageId, entries); setSettingEntries(config, rc, languageId, entries);
serializeLanguageSettingsInBackground(null); serializeLanguageSettingsInBackground(null);
return entries; return entries;
} }
@ -170,8 +169,10 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
parentElement.setAttribute(ATTR_QT_INSTALL_HEADERS, qtInstallHeadersPath); parentElement.setAttribute(ATTR_QT_INSTALL_HEADERS, qtInstallHeadersPath);
parentElement.setAttribute(ATTR_QT_INSTALL_HEADERS_MOD, Long.toString(qtInstallHeadersModTime)); parentElement.setAttribute(ATTR_QT_INSTALL_HEADERS_MOD, Long.toString(qtInstallHeadersModTime));
// The parent implementation tries to create a new child node (provider) that is used // The parent implementation tries to create a new child node (provider)
// as the part for later entries. This isn't needed in this case, we just want to // that is used
// as the part for later entries. This isn't needed in this case, we
// just want to
// use the part that serializes the languages. // use the part that serializes the languages.
return parentElement; return parentElement;
} }
@ -182,25 +183,26 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
qtInstallHeadersPath = element.getAttribute(ATTR_QT_INSTALL_HEADERS); qtInstallHeadersPath = element.getAttribute(ATTR_QT_INSTALL_HEADERS);
qtInstallHeadersModTime = getLongAttribute(element, ATTR_QT_INSTALL_HEADERS_MOD); qtInstallHeadersModTime = getLongAttribute(element, ATTR_QT_INSTALL_HEADERS_MOD);
// The parent implementation tries to create a new child node (provider) that is used // The parent implementation tries to create a new child node (provider)
// as the part for later entries. This isn't needed in this case, we just want to // that is used
// as the part for later entries. This isn't needed in this case, we
// just want to
// use the part that serializes the languages. // use the part that serializes the languages.
} }
/** /**
* Parse and return the given attribute as a long. Return 0 if the attribute does * Parse and return the given attribute as a long. Return 0 if the attribute
* not have a valid value. * does not have a valid value.
*/ */
private static long getLongAttribute(Element element, String attr) { private static long getLongAttribute(Element element, String attr) {
String value = element.getAttribute(attr); String value = element.getAttribute(attr);
if (value == null if (value == null || value.isEmpty())
|| value.isEmpty())
return 0; return 0;
try { try {
return Long.parseLong(value); return Long.parseLong(value);
} catch(NumberFormatException e) { } catch (NumberFormatException e) {
Activator.log("attribute name:" + attr + " value:" + value, e); Activator.log("attribute name:" + attr + " value:" + value, e); //$NON-NLS-1$ //$NON-NLS-2$
return 0; return 0;
} }
} }
@ -209,33 +211,34 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
* Reload and return the entries if possible, return null otherwise. * Reload and return the entries if possible, return null otherwise.
*/ */
private List<ICLanguageSettingEntry> reload() { private List<ICLanguageSettingEntry> reload() {
// All keys are reset and then updated as their values are discovered. This allows partial // All keys are reset and then updated as their values are discovered.
// This allows partial
// success to skip over previously calculated values. // success to skip over previously calculated values.
qmakeModTime = 0; qmakeModTime = 0;
qtInstallHeadersPath = null; qtInstallHeadersPath = null;
qtInstallHeadersModTime = 0; qtInstallHeadersModTime = 0;
File qmake = new File(qmakePath); File qmake = new File(qmakePath);
if (!qmake.exists() if (!qmake.exists() || !qmake.canExecute())
|| !qmake.canExecute())
return Collections.emptyList(); return Collections.emptyList();
qmakeModTime = qmake.lastModified(); qmakeModTime = qmake.lastModified();
// Run `qmake -query QT_INSTALL_HEADERS` to get output like "/opt/qt-5.0.0/include". // Run `qmake -query QT_INSTALL_HEADERS` to get output like
// "/opt/qt-5.0.0/include".
BufferedReader reader = null; BufferedReader reader = null;
Process process = null; Process process = null;
try { try {
process = ProcessFactory.getFactory().exec(new String[]{ qmakePath, "-query", "QT_INSTALL_HEADERS" }); process = ProcessFactory.getFactory().exec(new String[] { qmakePath, "-query", "QT_INSTALL_HEADERS" }); //$NON-NLS-1$ //$NON-NLS-2$
reader = new BufferedReader(new InputStreamReader(process.getInputStream())); reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
qtInstallHeadersPath = reader.readLine(); qtInstallHeadersPath = reader.readLine();
} catch(IOException e) { } catch (IOException e) {
Activator.log(e); Activator.log(e);
} finally { } finally {
try { try {
if (reader != null) if (reader != null)
reader.close(); reader.close();
} catch(IOException e) { } catch (IOException e) {
/* ignore */ /* ignore */
} finally { } finally {
if (process != null) if (process != null)
@ -249,12 +252,11 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
File qtInstallHeadersDir = new File(qtInstallHeadersPath); File qtInstallHeadersDir = new File(qtInstallHeadersPath);
qtInstallHeadersModTime = qtInstallHeadersDir.lastModified(); qtInstallHeadersModTime = qtInstallHeadersDir.lastModified();
if (!qtInstallHeadersDir.exists() if (!qtInstallHeadersDir.exists() || !qtInstallHeadersDir.canRead() || !qtInstallHeadersDir.isDirectory())
|| !qtInstallHeadersDir.canRead()
|| !qtInstallHeadersDir.isDirectory())
return Collections.emptyList(); return Collections.emptyList();
// Create an include path entry for all sub-folders in the QT_INSTALL_HEADERS location, including // Create an include path entry for all sub-folders in the
// QT_INSTALL_HEADERS location, including
// the QT_INSTALL_HEADERS folder itself. // the QT_INSTALL_HEADERS folder itself.
File[] files = qtInstallHeadersDir.listFiles(new FileFilter() { File[] files = qtInstallHeadersDir.listFiles(new FileFilter() {
@Override @Override
@ -265,7 +267,7 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(files.length + 1); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(files.length + 1);
safeAdd(entries, qtInstallHeadersDir); safeAdd(entries, qtInstallHeadersDir);
for(File file : files) for (File file : files)
safeAdd(entries, file); safeAdd(entries, file);
return entries; return entries;
@ -273,8 +275,9 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
private static void safeAdd(List<ICLanguageSettingEntry> entries, File file) { private static void safeAdd(List<ICLanguageSettingEntry> entries, File file) {
try { try {
entries.add(new CIncludePathEntry(file.getCanonicalPath(), ICSettingEntry.READONLY | ICSettingEntry.RESOLVED)); entries.add(
} catch(IOException e) { new CIncludePathEntry(file.getCanonicalPath(), ICSettingEntry.READONLY | ICSettingEntry.RESOLVED));
} catch (IOException e) {
Activator.log(e); Activator.log(e);
} }
} }

View file

@ -16,6 +16,7 @@ import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@ -24,8 +25,8 @@ import org.w3c.dom.NodeList;
/** /**
* This provider uses persistent cache to store the include paths for different * This provider uses persistent cache to store the include paths for different
* Qt installations. A Qt installation is uniquely identified by the path to * Qt installations. A Qt installation is uniquely identified by the path to the
* the qmake binary within the installation. * qmake binary within the installation.
* <p> * <p>
* This result is shared among all Build Configurations that use the provider * This result is shared among all Build Configurations that use the provider
* with the same value for the QMAKE environment variable. * with the same value for the QMAKE environment variable.
@ -33,17 +34,19 @@ import org.w3c.dom.NodeList;
public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider { public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider {
/** /**
* The provider identifies Qt installations by the absolute path to the qmake binary. The * The provider identifies Qt installations by the absolute path to the
* include paths relevant to the installations are computed and persisted in {@link QtIncludePaths}. * qmake binary. The include paths relevant to the installations are
* computed and persisted in {@link QtIncludePaths}.
*/ */
private final Map<String, QtIncludePaths> qtInstallHeaders = new HashMap<String, QtIncludePaths>(); private final Map<String, QtIncludePaths> qtInstallHeaders = new HashMap<String, QtIncludePaths>();
/** /**
* The build configuration stores the path to the qmake binary as an environment variable. * The build configuration stores the path to the qmake binary as an
* environment variable.
*/ */
private static final String ENVVAR_QMAKE = "QMAKE"; private static final String ENVVAR_QMAKE = "QMAKE"; //$NON-NLS-1$
private static final String ELEMENT_QMAKE = "qmake"; private static final String ELEMENT_QMAKE = "qmake"; //$NON-NLS-1$
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
@ -68,17 +71,19 @@ public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider
public void loadEntries(Element providerNode) { public void loadEntries(Element providerNode) {
super.loadEntries(providerNode); super.loadEntries(providerNode);
// Find and load all qmake child nodes. There will be one node for each Qt // Find and load all qmake child nodes. There will be one node for each
// installation that has been used. Qt installations that are no longer valid // Qt
// are not loaded. This means they will be removed from the file the next time // installation that has been used. Qt installations that are no longer
// valid
// are not loaded. This means they will be removed from the file the
// next time
// that the language setting providers are serialized. // that the language setting providers are serialized.
NodeList children = providerNode.getChildNodes(); NodeList children = providerNode.getChildNodes();
for (int i = 0; i < children.getLength(); ++i) { for (int i = 0; i < children.getLength(); ++i) {
Node child = children.item(i); Node child = children.item(i);
if (ELEMENT_QMAKE.equals(child.getNodeName())) { if (ELEMENT_QMAKE.equals(child.getNodeName())) {
QtIncludePaths qtIncludePaths = QtIncludePaths.loadFrom(child); QtIncludePaths qtIncludePaths = QtIncludePaths.loadFrom(child);
if (qtIncludePaths != null if (qtIncludePaths != null && qtIncludePaths.isValid())
&& qtIncludePaths.isValid())
qtInstallHeaders.put(qtIncludePaths.getQMakePath(), qtIncludePaths); qtInstallHeaders.put(qtIncludePaths.getQMakePath(), qtIncludePaths);
} }
} }
@ -86,14 +91,17 @@ public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider
@Override @Override
public void serializeEntries(Element parent) { public void serializeEntries(Element parent) {
// NOTE: This creates its own XML structure where children of the provider node are qmake nodes. // NOTE: This creates its own XML structure where children of the
// Within each qmake node is a list of include paths for that installation. Calling the // provider node are qmake nodes.
// base #serializeEntries here would try to write this instance's (empty) list of settings // Within each qmake node is a list of include paths for that
// to the file. // installation. Calling the
// base #serializeEntries here would try to write this instance's
// (empty) list of settings
// to the file.
// Each value is serialized into a new element in the XML document. // Each value is serialized into a new element in the XML document.
Document document = parent instanceof Document ? (Document)parent : parent.getOwnerDocument(); Document document = parent instanceof Document ? (Document) parent : parent.getOwnerDocument();
for(QtIncludePaths qtIncludePaths : qtInstallHeaders.values()) { for (QtIncludePaths qtIncludePaths : qtInstallHeaders.values()) {
Element child = document.createElement(ELEMENT_QMAKE); Element child = document.createElement(ELEMENT_QMAKE);
qtIncludePaths.serialize(child); qtIncludePaths.serialize(child);
parent.appendChild(child); parent.appendChild(child);
@ -101,19 +109,24 @@ public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider
} }
/** /**
* The given build configuration's QMAKE environment variable is used to identify the appropriate * The given build configuration's QMAKE environment variable is used to
* Qt installation. The language settings are then either returned from the previously persisted * identify the appropriate Qt installation. The language settings are then
* data or loaded, serialized, and returned. * either returned from the previously persisted data or loaded, serialized,
* and returned.
*/ */
@Override @Override
public synchronized List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription configDesc, IResource rc, String languageId) { public synchronized List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc,
String languageId) {
// Make sure the requested language is in scope for this provider. // Make sure the requested language is in scope for this provider.
if (!getLanguageScope().contains(languageId)) if (!getLanguageScope().contains(languageId))
return null; return null;
// The value of the build configuration's QMAKE environment variable is used to select the // The value of the build configuration's QMAKE environment variable is
// used to select the
// right version of qmake. // right version of qmake.
IEnvironmentVariable qmake_var = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariable(ENVVAR_QMAKE, configDesc, true); ICConfigurationDescription configDesc = config.getAdapter(ICConfigurationDescription.class);
IEnvironmentVariable qmake_var = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariable(ENVVAR_QMAKE,
configDesc, true);
if (qmake_var == null) if (qmake_var == null)
return null; return null;
@ -121,13 +134,14 @@ public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider
if (qmake == null) if (qmake == null)
return null; return null;
// The path to qmake is used as the key into the in-memory cache of header paths. // The path to qmake is used as the key into the in-memory cache of
// header paths.
QtIncludePaths paths = qtInstallHeaders.get(qmake); QtIncludePaths paths = qtInstallHeaders.get(qmake);
if (paths == null) { if (paths == null) {
paths = new QtIncludePaths(qmake); paths = new QtIncludePaths(qmake);
qtInstallHeaders.put(qmake, paths); qtInstallHeaders.put(qmake, paths);
} }
return paths.getSettingEntries(configDesc, null, languageId); return paths.getSettingEntries(config, null, languageId);
} }
} }