1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Revert "Bug 489563 - API change for Language Settings Providers."

This reverts the changes we've made for language settings providers
so that I can start again with a cleaner approach.

Change-Id: Icddd5a465a8f217594af5b07011a56bf1dfdf014
This commit is contained in:
Doug Schaefer 2016-03-22 10:19:26 -04:00
parent 52432d7370
commit c29243b187
52 changed files with 5351 additions and 5900 deletions

View file

@ -25,10 +25,8 @@ 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;
/** /**
@ -63,8 +61,6 @@ 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");
@ -81,11 +77,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(config, file1, languageId); List<ICLanguageSettingEntry> entries = parser.getSettingEntries(cfgDescription, file1, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
entries = parser.getSettingEntries(config, file2, languageId); entries = parser.getSettingEntries(cfgDescription, file2, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
entries = parser.getSettingEntries(config, file3, languageId); entries = parser.getSettingEntries(cfgDescription, file3, languageId);
assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0));
} }

View file

@ -1,3 +1,4 @@
#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
@ -84,6 +85,262 @@ 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.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=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_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

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

View file

@ -47,9 +47,7 @@ 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;
@ -85,12 +83,10 @@ 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;
@ -105,7 +101,6 @@ 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();
@ -121,7 +116,6 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
super.execute(); super.execute();
waitForProviderToFinish(); waitForProviderToFinish();
} }
protected boolean isExecuted() { protected boolean isExecuted() {
return isExecuted; return isExecuted;
} }
@ -134,19 +128,15 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
private int executedCount = 0; private int executedCount = 0;
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException {
throws CoreException {
executedCount++; executedCount++;
super.startup(cfgDescription, cwdTracker); super.startup(cfgDescription, cwdTracker);
} }
@Override @Override
public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow() public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow() throws CloneNotSupportedException {
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();
@ -168,21 +158,17 @@ 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() public MockBuiltinSpecsDetectorEnvironmentChangeListener cloneShallow() throws CloneNotSupportedException {
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();
@ -193,7 +179,6 @@ 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;
} }
@ -204,38 +189,28 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
*/ */
private class MockConsoleBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector { private class MockConsoleBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector {
@SuppressWarnings("nls") @SuppressWarnings("nls")
private final AbstractOptionParser[] optionParsers = { new MacroOptionParser("#define (\\S*) *(\\S*)", private final AbstractOptionParser[] optionParsers = {
"$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), }; new MacroOptionParser("#define (\\S*) *(\\S*)", "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY),
};
@Override @Override
protected int runProgramForLanguage(String languageId, String command, String[] envp, protected int runProgramForLanguage(String languageId, String command, String[] envp, URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr, IProgressMonitor monitor) throws CoreException, IOException {
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>() { return new ArrayList<String>() {{ add(line); }};
{
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;
@ -291,7 +266,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertEquals(PROVIDER_ID, provider.getId()); assertEquals(PROVIDER_ID, provider.getId());
assertEquals(PROVIDER_NAME, provider.getName()); assertEquals(PROVIDER_NAME, provider.getName());
assertEquals(null, provider.getLanguageScope()); assertEquals(null, provider.getLanguageScope());
assertEquals(null, provider.getSettingEntries((IBuildConfiguration) null, null, null)); assertEquals(null, provider.getSettingEntries(null, null, null));
assertEquals("", provider.getCommand()); assertEquals("", provider.getCommand());
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
assertEquals(false, provider.isConsoleEnabled()); assertEquals(false, provider.isConsoleEnabled());
@ -305,15 +280,14 @@ 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", ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
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);
assertEquals(PROVIDER_ID, provider.getId()); assertEquals(PROVIDER_ID, provider.getId());
assertEquals(PROVIDER_NAME, provider.getName()); assertEquals(PROVIDER_NAME, provider.getName());
assertEquals(languages, provider.getLanguageScope()); assertEquals(languages, provider.getLanguageScope());
assertEquals(entries, provider.getSettingEntries((IBuildConfiguration) null, null, null)); assertEquals(entries, provider.getSettingEntries(null, null, null));
assertEquals(CUSTOM_COMMAND_1, provider.getCommand()); assertEquals(CUSTOM_COMMAND_1, provider.getCommand());
assertEquals(false, provider.isConsoleEnabled()); assertEquals(false, provider.isConsoleEnabled());
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
@ -326,7 +300,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
provider.execute(); provider.execute();
assertEquals(true, provider.isExecuted()); assertEquals(true, provider.isExecuted());
assertEquals(null, provider.getSettingEntries((IBuildConfiguration) null, null, null)); assertEquals(null, provider.getSettingEntries(null, null, null));
} }
} }
@ -340,7 +314,6 @@ 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();
@ -353,8 +326,7 @@ 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", ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
entries.add(entry); entries.add(entry);
// check clone after initialization // check clone after initialization
@ -395,7 +367,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));
} }
@ -412,9 +384,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( entries2.add(new CMacroEntry("MACRO2", "VALUE2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY));
new CMacroEntry("MACRO2", "VALUE2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY)); clone.setSettingEntries(null, null, null, entries2);
clone.setSettingEntries((IBuildConfiguration) null, null, null, entries2);
assertFalse(provider.equals(clone)); assertFalse(provider.equals(clone));
} }
@ -425,7 +396,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertEquals(false, clone.isExecuted()); assertEquals(false, clone.isExecuted());
assertFalse(provider2.equals(clone)); assertFalse(provider2.equals(clone));
provider2.setSettingEntries((IBuildConfiguration) null, null, null, null); provider2.setSettingEntries(null, null, null, null);
assertFalse(provider2.equals(clone)); assertFalse(provider2.equals(clone));
clone.execute(); clone.execute();
@ -493,7 +464,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag();
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path0", 1)); entries.add(new CIncludePathEntry("path0", 1));
provider.setSettingEntries((IBuildConfiguration) null, null, null, entries); provider.setSettingEntries(null, null, null, entries);
// serialize entries // serialize entries
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
rootElement = XmlUtil.appendElement(doc, ELEM_TEST); rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
@ -511,7 +482,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// load the XML to the new provider // load the XML to the new provider
provider.load(rootElement); provider.load(rootElement);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) 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));
@ -532,7 +503,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// execute provider // execute provider
provider.execute(); provider.execute();
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(null, entries); assertEquals(null, entries);
// executed provider should NOT appear as empty even with no entries set // executed provider should NOT appear as empty even with no entries set
assertEquals(false, provider.isEmpty()); assertEquals(false, provider.isEmpty());
@ -573,11 +544,7 @@ 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>() { provider.setLanguageScope(new ArrayList<String>() {{add(LANGUAGE_ID);}});
{
add(LANGUAGE_ID);
}
});
// Run provider // Run provider
provider.startup(cfgDescription, null); provider.startup(cfgDescription, null);
@ -586,14 +553,12 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertFalse(provider.isEmpty()); assertFalse(provider.isEmpty());
List<ICLanguageSettingEntry> noentries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> noentries = provider.getSettingEntries(null, null, null);
assertNull(noentries); assertNull(noentries);
// Check parsed entries // Check parsed entries
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, null, LANGUAGE_ID);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(config, 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));
} }
@ -603,11 +568,7 @@ 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>() { provider.setLanguageScope(new ArrayList<String>() {{add(LANGUAGE_ID);}});
{
add(LANGUAGE_ID);
}
});
// Run provider // Run provider
provider.startup(null, null); provider.startup(null, null);
@ -617,10 +578,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
assertFalse(provider.isEmpty()); assertFalse(provider.isEmpty());
// Check parsed entries // Check parsed entries
List<ICLanguageSettingEntry> entries = List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, LANGUAGE_ID);
provider.getSettingEntries((IBuildConfiguration) 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));
} }
@ -636,8 +595,7 @@ 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 // register environment listener on configuration - note that provider is not included in the configuration
// configuration
provider.registerListener(cfgDescription); provider.registerListener(cfgDescription);
waitForProviderToFinish(); waitForProviderToFinish();
assertEquals(true, provider.isExecuted()); assertEquals(true, provider.isExecuted());
@ -649,10 +607,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set an environment variable to the configuration // Set an environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault() ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true);
.getProjectDescription(project, true); ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration();
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();
@ -679,10 +635,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set an environment variable to the configuration // Set an environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault() ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true);
.getProjectDescription(project, true); ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration();
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();
@ -713,16 +667,13 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Assign a provider to configuration // Assign a provider to configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault() ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true);
.getProjectDescription(project, true); ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration();
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) ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(providers);
.setLanguageSettingProviders(providers);
// Write to project description // Write to project description
CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable); CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
@ -734,10 +685,8 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
// Set environment variable to the configuration // Set environment variable to the configuration
{ {
ICProjectDescription prjDescriptionWritable = CoreModel.getDefault() ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true);
.getProjectDescription(project, true); ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration();
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -746,10 +695,8 @@ 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) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
.getLanguageSettingProviders(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0);
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
// unset "isExecuted" flag // unset "isExecuted" flag
provider.clear(); provider.clear();
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
@ -763,8 +710,7 @@ 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, ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);
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);
@ -772,10 +718,8 @@ 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) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0);
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());
} }
@ -783,10 +727,8 @@ 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() ICProjectDescription prjDescriptionWritable = CoreModel.getDefault().getProjectDescription(project, true);
.getProjectDescription(project, true); ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable.getActiveConfiguration();
ICConfigurationDescription cfgDescriptionWritable = prjDescriptionWritable
.getActiveConfiguration();
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager(); IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment(); IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
@ -795,10 +737,8 @@ 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) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
.getLanguageSettingProviders(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0);
MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers
.get(0);
// unset "isExecuted" flag // unset "isExecuted" flag
provider.clear(); provider.clear();
assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isExecuted());
@ -812,8 +752,7 @@ 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, ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);
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);
@ -821,10 +760,8 @@ 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) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders(); MockBuiltinSpecsDetectorEnvironmentChangeListener provider = (MockBuiltinSpecsDetectorEnvironmentChangeListener) providers.get(0);
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());
} }
@ -906,6 +843,7 @@ 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();
@ -1002,30 +940,18 @@ 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", final CIncludePathEntry includePath_1 = new CIncludePathEntry("/include/path_1", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludePathEntry includePath_2 = new CIncludePathEntry("/include/path_2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CIncludePathEntry includePath_2 = new CIncludePathEntry("/include/path_2", final CIncludeFileEntry includeFile_1 = new CIncludeFileEntry(new Path("/include.file1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CIncludeFileEntry includeFile_2 = new CIncludeFileEntry(new Path("/include.file2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CIncludeFileEntry includeFile_1 = new CIncludeFileEntry(new Path("/include.file1"), final CMacroEntry macro_1 = new CMacroEntry("MACRO_1", "", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CMacroEntry macro_2 = new CMacroEntry("MACRO_2", "", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY |ICSettingEntry.UNDEFINED);
final CIncludeFileEntry includeFile_2 = new CIncludeFileEntry(new Path("/include.file2"), final CMacroFileEntry macroFile_1 = new CMacroFileEntry(new Path("/macro.file1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CMacroFileEntry macroFile_2 = new CMacroFileEntry(new Path("/macro.file2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CMacroEntry macro_1 = new CMacroEntry("MACRO_1", "", final CLibraryPathEntry libraryPath_1 = new CLibraryPathEntry(new Path("/lib/path_1"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CLibraryPathEntry libraryPath_2 = new CLibraryPathEntry(new Path("/lib/path_2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
final CMacroEntry macro_2 = new CMacroEntry("MACRO_2", "", final CLibraryFileEntry libraryFile_1 = new CLibraryFileEntry("lib_1.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
ICSettingEntry.BUILTIN | ICSettingEntry.READONLY | ICSettingEntry.UNDEFINED); final CLibraryFileEntry libraryFile_2 = new CLibraryFileEntry("lib_2.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY);
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() {
@ -1056,7 +982,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase {
provider.shutdown(); provider.shutdown();
// compare benchmarks, expected well-sorted // compare benchmarks, expected well-sorted
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
int i = 0; int i = 0;
assertEquals(includePath_1, entries.get(i++)); assertEquals(includePath_1, entries.get(i++));

View file

@ -36,7 +36,6 @@ import org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBu
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector; import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector; import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector;
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.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;
@ -198,7 +197,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO", null, ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO", null, ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -215,7 +214,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -232,7 +231,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO", "(3)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO", "(3)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -252,7 +251,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
int index = 0; int index = 0;
assertEquals(new CMacroEntry("MACRO_1", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CMacroEntry("MACRO_1", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CMacroEntry("MACRO_2", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CMacroEntry("MACRO_2", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
@ -273,7 +272,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO()", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO()", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -290,7 +289,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO(X)", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO(X)", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -307,7 +306,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -324,7 +323,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CMacroEntry("MACRO(P1, P2)", null, ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CMacroEntry("MACRO(P1, P2)", null, ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -343,7 +342,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
int index = 0; int index = 0;
assertEquals(new CMacroEntry("MACRO_1(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CMacroEntry("MACRO_1(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CMacroEntry("MACRO_2(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CMacroEntry("MACRO_2(P1, P2)", "VALUE(P1, P2)", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
@ -390,7 +389,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
int index = 0; int index = 0;
assertEquals(new CIncludePathEntry(loc+"/local/include", ICSettingEntry.LOCAL | ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CIncludePathEntry(loc+"/local/include", ICSettingEntry.LOCAL | ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
@ -423,7 +422,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
int index = 0; int index = 0;
assertEquals(new CIncludePathEntry(loc+"/local/include", ICSettingEntry.LOCAL | ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CIncludePathEntry(loc+"/local/include", ICSettingEntry.LOCAL | ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
@ -462,7 +461,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdown(); detector.shutdown();
// check populated entries // check populated entries
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CIncludePathEntry(dir2.removeLastSegments(1), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CIncludePathEntry(dir2.removeLastSegments(1), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -492,7 +491,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdownForLanguage(); detector.shutdownForLanguage();
detector.shutdown(); detector.shutdown();
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
int index = 0; int index = 0;
assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++)); assertEquals(new CIncludePathEntry(loc+"/usr/include", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(index, entries.size()); assertEquals(index, entries.size());
@ -521,7 +520,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdown(); detector.shutdown();
// check populated entries // check populated entries
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CIncludePathEntry(new Path(windowsLocation), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CIncludePathEntry(new Path(windowsLocation), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -556,7 +555,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.shutdown(); detector.shutdown();
// check populated entries // check populated entries
List<ICLanguageSettingEntry> entries = detector.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = detector.getSettingEntries(null, null, null);
assertEquals(new CIncludePathEntry(new Path(windowsLocation), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0)); assertEquals(new CIncludePathEntry(new Path(windowsLocation), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(0));
assertEquals(1, entries.size()); assertEquals(1, entries.size());
} }
@ -581,7 +580,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
assertTrue(cfgDescriptions.length > 0); assertTrue(cfgDescriptions.length > 0);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
List<ILanguageSettingsProvider> providers = new ArrayList<>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(detector); providers.add(detector);
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
// change the default command in all the tools of the toolchain // change the default command in all the tools of the toolchain

View file

@ -25,7 +25,6 @@ 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;
@ -56,11 +55,9 @@ 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 ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER_ID);
.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER_ID);
assertNotNull(provider); assertNotNull(provider);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
null);
assertEquals(null, entries); assertEquals(null, entries);
} }
@ -79,8 +76,7 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders();
{ {
ILanguageSettingsProvider provider = providers.get(0); ILanguageSettingsProvider provider = providers.get(0);
String id = provider.getId(); String id = provider.getId();
@ -114,8 +110,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
} }
/** /**
* Test that no unnecessary storage file is created for language settings for default set of language * Test that no unnecessary storage file is created for language settings for default set
* settings providers. * of language settings providers.
*/ */
public void testProjectPersistence_Defaults() throws Exception { public void testProjectPersistence_Defaults() throws Exception {
// create a new project // create a new project
@ -129,10 +125,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription) String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds();
.getDefaultLanguageSettingsProvidersIds(); List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
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]);
@ -146,8 +140,7 @@ 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 String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests.getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML);
.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());
} }
@ -167,10 +160,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
((ILanguageSettingsProvidersKeeper) cfgDescription) ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>());
.setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>()); assertTrue(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders().size() == 0);
assertTrue(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()
.size() == 0);
} }
CoreModel.getDefault().setProjectDescription(project, prjDescription); CoreModel.getDefault().setProjectDescription(project, prjDescription);
@ -180,8 +171,7 @@ 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 String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests.getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML);
.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,3 +1,4 @@
#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
@ -80,6 +81,262 @@ 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.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=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_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

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

View file

@ -31,7 +31,6 @@ 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;
@ -42,17 +41,10 @@ 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 public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsBroadcastingProvider {
implements ILanguageSettingsBroadcastingProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (cfgDescription == null || rc == null) {
if (config == null || rc == null) {
return null;
}
ICConfigurationDescription cfgDescription = config.getAdapter(ICConfigurationDescription.class);
if (cfgDescription == null) {
return null; return null;
} }
@ -64,7 +56,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
if (ls != null) { if (ls != null) {
languageSettings = new ICLanguageSetting[] { ls }; languageSettings = new ICLanguageSetting[] { ls };
} else { } else {
return getSettingEntries(config, rc.getParent(), languageId); return getSettingEntries(cfgDescription, rc.getParent(), languageId);
} }
} else { } else {
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(projectPath, false); ICResourceDescription rcDescription = cfgDescription.getResourceDescription(projectPath, false);
@ -80,10 +72,9 @@ 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 List<ICLanguageSettingEntry> additions = langSetting.getSettingEntriesList(kind);
.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 ".."
@ -92,26 +83,17 @@ 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() ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager();
.getCdtVariableManager();
try { try {
// Substitute build/environment variables // Substitute build/environment variables
String location = varManager.resolveValue(pathStr, "", null, //$NON-NLS-1$ String location = varManager.resolveValue(pathStr, "", null, cfgDescription); //$NON-NLS-1$
cfgDescription);
if (!new Path(location).isAbsolute()) { if (!new Path(location).isAbsolute()) {
IStringVariableManager mngr = VariablesPlugin.getDefault() IStringVariableManager mngr = VariablesPlugin.getDefault().getStringVariableManager();
.getStringVariableManager(); String projectRootedPath = mngr.generateVariableExpression("workspace_loc", rc.getProject().getName()) + Path.SEPARATOR + pathStr; //$NON-NLS-1$
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 int flags = entry.getFlags() & ~(ICSettingEntry.RESOLVED | ICSettingEntry.VALUE_WORKSPACE_PATH);
| ICSettingEntry.VALUE_WORKSPACE_PATH); ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil.createEntry(kind, projectRootedPath, projectRootedPath, null, flags);
ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil if (! list.contains(projectRootedEntry)) {
.createEntry(kind, projectRootedPath,
projectRootedPath, null, flags);
if (!list.contains(projectRootedEntry)) {
list.add(projectRootedEntry); list.add(projectRootedEntry);
} }
} }
@ -122,7 +104,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
} }
} }
if (!list.contains(entry)) { if (! list.contains(entry)) {
list.add(entry); list.add(entry);
} }
} }
@ -144,11 +126,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 };
@ -167,12 +149,10 @@ 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,21 +23,17 @@ 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 * Abstract class for providers parsing compiler option from build command when present in build output.
* output.
* <p> * <p>
* <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as it is not currently (CDT * <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as
* 8.1, Juno) clear how it may need to be used in future. There is no guarantee that this API will * it is not currently (CDT 8.1, Juno) clear how it may need to be used in future.
* work or that it will remain the same. Please do not use this API without consulting with the CDT * There is no guarantee that this API will work or that it will remain the same.
* 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
@ -51,11 +47,12 @@ 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" Using look-ahead and look-behind to resolve ambiguity with "\" * "foo"
* {@link #QUOTE_BSLASH_QUOTE} * Using look-ahead and look-behind to resolve ambiguity with "\" {@link #QUOTE_BSLASH_QUOTE}
*/ */
private static final String QUOTE = "(\"(?!\\\\).*?(?<!\\\\)\")"; //$NON-NLS-1$ private static final String QUOTE = "(\"(?!\\\\).*?(?<!\\\\)\")"; //$NON-NLS-1$
/** \"foo\" */ /** \"foo\" */
@ -65,8 +62,7 @@ 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 + "|" //$NON-NLS-1$ //$NON-NLS-2$ 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$<
+ 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 {
@ -81,8 +77,7 @@ 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" "${COMPILER_PATTERN}.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file
+ "(['\"])(.*\\.${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;
@ -93,9 +88,10 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
private String partialLine; private String partialLine;
/** /**
* The compiler command pattern without specifying compiler options. The options are intended to * The compiler command pattern without specifying compiler options.
* be handled with option parsers, see {@link #getOptionParsers()}. This is regular expression * The options are intended to be handled with option parsers,
* pattern. * see {@link #getOptionParsers()}.
* This is regular expression pattern.
* *
* @return the compiler command pattern. * @return the compiler command pattern.
*/ */
@ -105,9 +101,8 @@ 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.
* @param commandPattern * This is regular expression pattern.
* - 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);
@ -119,19 +114,15 @@ 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 * @return resource scope of the entries, i.e. level in resource hierarchy where language settings entries
* settings entries will be applied by the provider. Resource scope can be one of the * will be applied by the provider. Resource scope can be one of the following:
* following: <br> * <br>- {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file being parsed.
* - {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file * <br>- {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the enclosing folder.
* being parsed. <br> * <br>- {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the project level.
* - {@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) {
@ -150,17 +141,13 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
/** /**
* Set resource scope of the entries, i.e. level in resource hierarchy where language settings * Set resource scope of the entries, i.e. level in resource hierarchy where language settings entries
* entries will be applied by the provider. * will be applied by the provider.
* *
* @param rcScope * @param rcScope - resource scope can be one of the following:
* - resource scope can be one of the following: <br> * <br>- {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the file being parsed.
* - {@code AbstractBuildCommandParser.ResourceScope.FILE} - apply entries to the * <br>- {@code AbstractBuildCommandParser.ResourceScope.FOLDER} - apply entries to the enclosing folder.
* file being parsed. <br> * <br>- {@code AbstractBuildCommandParser.ResourceScope.PROJECT} - apply entries to the project level.
* - {@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;
@ -200,13 +187,11 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription, IBuildConfiguration.class); setSettingEntries(currentCfgDescription, rc, currentLanguageId, entries);
setSettingEntries(currentConfig, rc, currentLanguageId, entries);
} }
/** /**
* Adjust count for file group taking into consideration extra groups added by * Adjust count for file group taking into consideration extra groups added by {@link #getCompilerPatternExtended()}.
* {@link #getCompilerPatternExtended()}.
*/ */
private int adjustFileGroup() { private int adjustFileGroup() {
return countGroups(getCompilerPatternExtended()) + FILE_GROUP; return countGroups(getCompilerPatternExtended()) + FILE_GROUP;
@ -217,9 +202,10 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
*/ */
private String makePattern(String template) { private String makePattern(String template) {
@SuppressWarnings("nls") @SuppressWarnings("nls")
String pattern = template.replace("${COMPILER_PATTERN}", getCompilerPatternExtended()) String pattern = template
.replace("${EXTENSIONS_PATTERN}", getPatternFileExtensions()).replace("${COMPILER_GROUPS+1}", .replace("${COMPILER_PATTERN}", getCompilerPatternExtended())
new Integer(countGroups(getCompilerPatternExtended()) + 1).toString()); .replace("${EXTENSIONS_PATTERN}", getPatternFileExtensions())
.replace("${COMPILER_GROUPS+1}", new Integer(countGroups(getCompilerPatternExtended()) + 1).toString());
return pattern; return pattern;
} }
@ -251,7 +237,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);
} }
} }
@ -298,8 +284,8 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
// 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) {
@ -317,18 +303,14 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
/** /**
* Trivial Error Parser which allows highlighting of output lines matching the patterns of this * Trivial Error Parser which allows highlighting of output lines matching the patterns
* parser. Intended for better troubleshooting experience. Implementers are supposed to add the * of this parser. Intended for better troubleshooting experience.
* error parser via extension point {@code org.eclipse.cdt.core.ErrorParser}. * Implementers are supposed to add the error parser via extension point {@code org.eclipse.cdt.core.ErrorParser}.
*/ */
protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser implements IErrorParser2 {
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);
@ -336,20 +318,16 @@ 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 AbstractBuildCommandParser buildCommandParser = (AbstractBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(parserId, false);
.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, addPattern(new RegexErrorPattern(pattern, fileExpr, null, descExpr, null, IMarkerGenerator.SEVERITY_WARNING, true));
IMarkerGenerator.SEVERITY_WARNING, true));
} }
} }
} }
@ -360,4 +338,5 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
} }
} }
} }

View file

@ -55,13 +55,11 @@ 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;
@ -79,14 +77,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 specs and parse built-in * Abstract parser capable to execute compiler command printing built-in compiler
* language settings out of it. * specs and parse built-in language settings out of it.
* <p> * <p>
* <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as it is not currently (CDT 8.1, * <strong>EXPERIMENTAL</strong>. This class interface is not stable yet as
* Juno) clear how it may need to be used in future. There is no guarantee that this API will work or that it * it is not currently (CDT 8.1, Juno) clear how it may need to be used in future.
* will remain the same. Please do not use this API without consulting with the CDT team. * There is no guarantee that this API will work or that it will remain the same.
* 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
@ -161,15 +159,12 @@ 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 Job markerJob = new Job(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.AddScannerDiscoveryMarkers")) { //$NON-NLS-1$
.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( IMarker[] markers = problemMarkerInfo.file.findMarkers(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER, false, IResource.DEPTH_ZERO);
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) {
@ -180,31 +175,24 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
} }
} catch (CoreException e) { } catch (CoreException e) {
return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error checking markers.", e); //$NON-NLS-1$
"Error checking markers.", e); //$NON-NLS-1$
} }
try { try {
IMarker marker = problemMarkerInfo.file IMarker marker = problemMarkerInfo.file.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER);
.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( String msgPreferences = ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationPreferences", providerName); //$NON-NLS-1$
"AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationPreferences", //$NON-NLS-1$
providerName);
marker.setAttribute(IMarker.LOCATION, msgPreferences); marker.setAttribute(IMarker.LOCATION, msgPreferences);
} else { } else {
String msgProperties = ManagedMakeMessages.getFormattedString( String msgProperties = ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ScannerDiscoveryMarkerLocationProperties", providerName); //$NON-NLS-1$
"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, return new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error adding markers.", e); //$NON-NLS-1$
"Error adding markers.", e); //$NON-NLS-1$
} }
return Status.OK_STATUS; return Status.OK_STATUS;
@ -218,22 +206,19 @@ 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 * @param rc - resource to check markers.
* - 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, IMarker[] markers = rc.findMarkers(SCANNER_DISCOVERY_PROBLEM_MARKER, false, IResource.DEPTH_ZERO);
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, ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error deleting markers.", e)); //$NON-NLS-1$
"Error deleting markers.", e)); //$NON-NLS-1$
} }
} }
@ -244,16 +229,13 @@ 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) public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException {
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;
@ -261,12 +243,11 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Compiler command without arguments. This value is used to replace macro ${COMMAND}. In particular, this * Compiler command without arguments. This value is used to replace macro ${COMMAND}.
* method is implemented in {@link ToolchainBuiltinSpecsDetector} which retrieves the command from * In particular, this method is implemented in {@link ToolchainBuiltinSpecsDetector}
* tool-chain. * which retrieves the command from tool-chain.
* *
* @param languageId * @param languageId - language ID.
* - 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);
@ -274,12 +255,13 @@ 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). Normally would come from the * <b>${COMMAND}</b> - compiler command without arguments (compiler program).
* tool-chain.<br> * Normally would come from the 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 in {@code plugin.xml} or from property file. * The parameter could be taken from the extension
* 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.
*/ */
@ -289,9 +271,7 @@ 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);
@ -307,22 +287,19 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Enable or disable console output for this provider. * Enable or disable console output for this provider.
* *
* @param enable * @param enable - {@code true} to enable console output or {@code false} to disable.
* - {@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 the recognized list of * Expand macros specified in the compiler command. See {@link #getCommand()} for
* macros. * the recognized list of macros.
* *
* @param languageId * @param languageId - language ID.
* - language ID.
* @return - resolved command to run. * @return - resolved command to run.
* @throws CoreException * @throws CoreException if something goes wrong.
* if something goes wrong.
*/ */
protected String resolveCommand(String languageId) throws CoreException { protected String resolveCommand(String languageId) throws CoreException {
String cmd = getCommand(); String cmd = getCommand();
@ -411,8 +388,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
@Override @Override
public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) public void startup(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker) throws CoreException {
throws CoreException {
super.startup(cfgDescription, cwdTracker); super.startup(cfgDescription, cwdTracker);
mappedRootURI = null; mappedRootURI = null;
@ -445,7 +421,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
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);
@ -457,15 +433,14 @@ 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 // handles symbolic links as java.io.File.getCanonicalPath() resolves symlinks on UNIX
// 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) {
@ -476,10 +451,12 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* This method does 2 related things: <br> * This method does 2 related things:
* 1. Validate environment, i.e. check that environment for running the command has not changed. If * <br>
* environment changed {@link #execute()} will rerun the command even if flag {@link #isExecuted} suggests * 1. Validate environment, i.e. check that environment for running the command has not changed.
* that it was run already. <br> * If environment changed {@link #execute()} will rerun the command even if flag {@link #isExecuted}
* 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.
* *
@ -496,8 +473,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Execute provider's command which is expected to print built-in compiler options (specs) to build * Execute provider's command which is expected to print built-in compiler options (specs) to build output.
* output. The parser will parse output and generate language settings for corresponding resources. * The parser will parse output and generate language settings for corresponding resources.
*/ */
protected void execute() { protected void execute() {
environmentMap = createEnvironmentMap(currentCfgDescription); environmentMap = createEnvironmentMap(currentCfgDescription);
@ -505,8 +482,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
return; return;
} }
WorkspaceJob job = new WorkspaceJob(ManagedMakeMessages WorkspaceJob job = new WorkspaceJob(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.DiscoverBuiltInSettingsJobName")) { //$NON-NLS-1$
.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;
@ -520,8 +496,7 @@ 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, status = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e); //$NON-NLS-1$
"Error running Builtin Specs Detector", e); //$NON-NLS-1$
} finally { } finally {
isExecuted = true; isExecuted = true;
shutdown(); shutdown();
@ -529,7 +504,6 @@ 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;
@ -553,14 +527,12 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Run built-in specs command for each language. * Run built-in specs command for each language.
* *
* @param monitor * @param monitor - progress monitor in the initial state where {@link IProgressMonitor#beginTask(String, int)}
* - progress monitor in the initial state where * has not been called yet.
* {@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, MultiStatus status = new MultiStatus(ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.OK, "Problem running CDT Scanner Discovery provider " + getId(), null); //$NON-NLS-1$
"Problem running CDT Scanner Discovery provider " + getId(), null); //$NON-NLS-1$
if (monitor == null) { if (monitor == null) {
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
@ -571,44 +543,32 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
List<String> languageIds = getLanguageScope(); List<String> languageIds = getLanguageScope();
if (languageIds != null) { if (languageIds != null) {
monitor.beginTask( monitor.beginTask(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.ScannerDiscoveryTaskTitle"), //$NON-NLS-1$
ManagedMakeMessages TICKS_REMOVE_MARKERS + languageIds.size()*TICKS_RUN_FOR_ONE_LANGUAGE + TICKS_SERIALIZATION);
.getResourceString("AbstractBuiltinSpecsDetector.ScannerDiscoveryTaskTitle"), //$NON-NLS-1$
TICKS_REMOVE_MARKERS + languageIds.size() * TICKS_RUN_FOR_ONE_LANGUAGE
+ TICKS_SERIALIZATION);
IResource markersResource = currentProject != null ? currentProject IResource markersResource = currentProject != null ? currentProject : ResourcesPlugin.getWorkspace().getRoot();
: ResourcesPlugin.getWorkspace().getRoot();
monitor.subTask( monitor.subTask(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.ClearingMarkers", markersResource.getFullPath().toString())); //$NON-NLS-1$
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(currentConfig, null, List<ICLanguageSettingEntry> oldEntries = getSettingEntries(currentCfgDescription, null, languageId);
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 s = new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e); //$NON-NLS-1$
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(currentConfig, null, List<ICLanguageSettingEntry> newEntries = getSettingEntries(currentCfgDescription, null, languageId);
languageId);
isChanged = newEntries != oldEntries; isChanged = newEntries != oldEntries;
} }
@ -617,8 +577,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
} }
monitor.subTask( monitor.subTask(ManagedMakeMessages.getResourceString("AbstractBuiltinSpecsDetector.SerializingResults")); //$NON-NLS-1$
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);
@ -628,8 +587,7 @@ 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, status.merge(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error running Builtin Specs Detector", e)); //$NON-NLS-1$
"Error running Builtin Specs Detector", e)); //$NON-NLS-1$
ManagedBuilderCorePlugin.log(status); ManagedBuilderCorePlugin.log(status);
} finally { } finally {
monitor.done(); monitor.done();
@ -641,10 +599,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Initialize provider before running for a language. * Initialize provider before running for a language.
* *
* @param languageId * @param languageId - language ID.
* - language ID. * @throws CoreException if something goes wrong.
* @throws CoreException
* if something goes wrong.
*/ */
protected void startupForLanguage(String languageId) throws CoreException { protected void startupForLanguage(String languageId) throws CoreException {
currentLanguageId = languageId; currentLanguageId = languageId;
@ -662,14 +618,12 @@ 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();
IBuildConfiguration currentConfig = Adapters.adapt(currentCfgDescription, setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, detectedSettingEntries);
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;
} }
@ -680,9 +634,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Run built-in specs command for one language. * Run built-in specs command for one language.
* *
* @param monitor * @param monitor - progress monitor in the initial state where {@link IProgressMonitor#beginTask(String, int)}
* - progress monitor in the initial state where * has not been called yet.
* {@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);
@ -691,9 +644,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
} }
try { try {
monitor.beginTask( monitor.beginTask(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName()), //$NON-NLS-1$
ManagedMakeMessages.getFormattedString(
"AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName()), //$NON-NLS-1$
TICKS_EXECUTE_COMMAND + TICKS_OUTPUT_PARSING); TICKS_EXECUTE_COMMAND + TICKS_OUTPUT_PARSING);
IConsole console; IConsole console;
@ -701,8 +652,7 @@ 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() console = CCorePlugin.getDefault().getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$
.getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$
} }
console.start(currentProject); console.start(currentProject);
@ -715,7 +665,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);
} }
} }
@ -723,32 +673,27 @@ 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, ErrorParserManager epm = new ErrorParserManager(currentProject, buildDirURI, markerGenerator, new String[] {GMAKE_ERROR_PARSER_ID});
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, buildRunnerHelper.prepareStreams(epm, parsers, console, new SubProgressMonitor(monitor, TICKS_OUTPUT_PARSING));
new SubProgressMonitor(monitor, TICKS_OUTPUT_PARSING));
buildRunnerHelper.greeting(ManagedMakeMessages buildRunnerHelper.greeting(ManagedMakeMessages.getFormattedString("AbstractBuiltinSpecsDetector.RunningScannerDiscovery", getName())); //$NON-NLS-1$
.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, runProgramForLanguage(currentLanguageId, currentCommandResolved, envp, buildDirURI, outStream, errStream,
errStream, new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND, new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
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.log(new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Error running Builtin Specs Detector" , e))); //$NON-NLS-1$
ManagedBuilderCorePlugin.PLUGIN_ID, "Error running Builtin Specs Detector", e))); //$NON-NLS-1$
} finally { } finally {
try { try {
buildRunnerHelper.close(); buildRunnerHelper.close();
@ -760,8 +705,8 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Returns list of environment variables to be used during execution of provider's command. Implementers * Returns list of environment variables to be used during execution of provider's command.
* are expected to add their variables to the end of the list. * Implementers 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
@ -770,8 +715,7 @@ 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>( List<IEnvironmentVariable> vars = new ArrayList<IEnvironmentVariable>(Arrays.asList(envMngr.getVariables(currentCfgDescription, true)));
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.
@ -805,15 +749,13 @@ 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, protected int runProgramForLanguage(String languageId, String command, String[] envp, URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr, IProgressMonitor monitor) throws CoreException, IOException {
URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr,
IProgressMonitor monitor) throws CoreException, IOException {
return buildRunnerHelper.build(monitor); return buildRunnerHelper.build(monitor);
} }
@ -832,7 +774,6 @@ 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() {
@ -847,39 +788,32 @@ 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() + '.' String consoleId = ManagedBuilderCorePlugin.PLUGIN_ID + '.' + getId() + '.' + currentLanguageId;
+ 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) URL defaultIcon = Platform.getBundle(CDT_MANAGEDBUILDER_UI_PLUGIN_ID).getEntry(DEFAULT_CONSOLE_ICON);
.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 " String msg = "Unable to find icon " + DEFAULT_CONSOLE_ICON + " in plugin " + CDT_MANAGEDBUILDER_UI_PLUGIN_ID;
+ CDT_MANAGEDBUILDER_UI_PLUGIN_ID; ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg));
ManagedBuilderCorePlugin
.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, msg));
} }
console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, defaultIcon);
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() console = CCorePlugin.getDefault().getConsole(ManagedBuilderCorePlugin.PLUGIN_ID + ".console.hidden"); //$NON-NLS-1$
.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. This value is used to replace * Get path to spec file which normally would be placed in workspace area.
* macro ${INPUTS}. * This value is used to replace macro ${INPUTS}.
* *
* @param languageId * @param languageId - language ID.
* - 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) {
@ -909,12 +843,11 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
/** /**
* Determine file extension by language id. This implementation retrieves first extension from the list as * Determine file extension by language id. This implementation retrieves first extension
* there could be multiple extensions associated with the given language. This value is used to replace * from the list as there could be multiple extensions associated with the given language.
* macro ${EXT}. * This value is used to replace macro ${EXT}.
* *
* @param languageId * @param languageId - given language ID.
* - 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) {
@ -931,18 +864,16 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
if (ext == null) { if (ext == null) {
ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Unable to find file extension for language " + languageId)); //$NON-NLS-1$
"Unable to find file extension for language " + languageId)); //$NON-NLS-1$
} }
return ext; return ext;
} }
/** /**
* Determine additional options to pass to scanner discovery command. These options are intended to come * Determine additional options to pass to scanner discovery command.
* from the tool-chain. * These options are intended to come from the tool-chain.
* *
* @param languageId * @param languageId - language ID.
* - 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
@ -976,8 +907,7 @@ 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, ManagedBuilderCorePlugin.log(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, "Wrong integer format [" + envPathHashStr + "]", e)); //$NON-NLS-1$ //$NON-NLS-2$
"Wrong integer format [" + envPathHashStr + "]", e)); //$NON-NLS-1$ //$NON-NLS-2$
} }
} }
} }

View file

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

View file

@ -59,4 +59,288 @@ 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.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
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,3 +1,4 @@
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

@ -16,6 +16,8 @@ import java.util.HashMap;
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.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;
@ -27,13 +29,10 @@ import org.eclipse.cdt.core.settings.model.ICSettingEntry;
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.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.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import junit.framework.TestSuite;
/** /**
* Test cases testing LanguageSettingsProvider extensions * Test cases testing LanguageSettingsProvider extensions
*/ */
@ -339,7 +338,7 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase {
List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>();
expected.add(EXTENSION_EDITABLE_PROVIDER_ENTRY); expected.add(EXTENSION_EDITABLE_PROVIDER_ENTRY);
assertEquals(expected, provider.getSettingEntries((IBuildConfiguration) null, null, null)); assertEquals(expected, provider.getSettingEntries(null, null, null));
} }
/** /**

View file

@ -14,6 +14,8 @@ 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;
@ -29,18 +31,12 @@ 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.
@ -66,85 +62,48 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
/** /**
* Mock configuration description. * Mock configuration description.
*/ */
class MockConfigurationDescription extends CModelMock.DummyCConfigurationDescription class MockConfigurationDescription extends CModelMock.DummyCConfigurationDescription implements ILanguageSettingsProvidersKeeper {
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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
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);
@ -154,18 +113,6 @@ 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
@ -184,8 +131,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
/** /**
* main function of the class. * main function of the class.
* *
* @param args * @param args - arguments
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -228,8 +174,7 @@ 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() ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
.getProjectDescription(project, true);
ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
@ -257,9 +202,6 @@ 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);
{ {
@ -270,14 +212,14 @@ 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.getSettingEntriesUpResourceTree(providerNull, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
config, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(providerNull, cfgDescription, FILE_0, LANG_ID);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, 0); .getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, 0);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
@ -298,13 +240,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, config, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(providerNull_2, cfgDescription, FILE_0, LANG_ID);
assertNotNull(actual); assertNotNull(actual);
assertEquals(1, actual.size()); assertEquals(1, actual.size());
} }
{ {
List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> actual = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, 0); .getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, 0);
assertNotNull(actual); assertNotNull(actual);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
@ -315,8 +257,7 @@ 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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) {
throw new NullPointerException("Can you handle me?"); throw new NullPointerException("Can you handle me?");
} }
}; };
@ -336,20 +277,16 @@ 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 // define provider returning entries when configuration id matches and null otherwise
// null otherwise
ILanguageSettingsProvider providerYes = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) { ILanguageSettingsProvider providerYes = new MockProvider(PROVIDER_0, PROVIDER_NAME_0, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (cfgDescription.getId().equals(modelCfgDescription.getId())) {
if (config.getName().equals(modelCfgDescription.getId())) {
return entries; return entries;
} }
return null; return null;
@ -357,13 +294,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
}; };
providers.add(providerYes); providers.add(providerYes);
// define provider returning entries when configuration id does NOT // define provider returning entries when configuration id does NOT match and null otherwise
// match and null otherwise
ILanguageSettingsProvider providerNo = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) { ILanguageSettingsProvider providerNo = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (cfgDescription!= null && !cfgDescription.getId().equals(modelCfgDescription.getId())) {
if (config != null && !config.getName().equals(modelCfgDescription.getId())) {
return entries; return entries;
} }
return null; return null;
@ -375,16 +310,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.getSettingEntriesUpResourceTree(providerYes, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
modelConfig, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(providerYes, modelCfgDescription, 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.getSettingEntriesUpResourceTree(providerNo, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
modelConfig, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(providerNo, modelCfgDescription, FILE_0, LANG_ID);
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
} }
@ -394,8 +329,6 @@ 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>();
@ -416,28 +349,28 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve the entries for provider-1 // retrieve the entries for provider-1
List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider1, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
config, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(provider1, cfgDescription, 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.getSettingEntriesUpResourceTree(provider2, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
config, FILE_0, LANG_ID); .getSettingEntriesUpResourceTree(provider2, cfgDescription, 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());
} }
@ -450,14 +383,11 @@ 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() ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
.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);
@ -470,12 +400,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (rc!=null && rc.equals(parentFolder)) {
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;
@ -488,26 +417,25 @@ 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.getSettingEntriesUpResourceTree(provider, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
configWritable, derived, LANG_ID); .getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, 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() IFile notRelated = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path("/AnotherFolder/Subfolder/resource"));
.getFile(new Path("/AnotherFolder/Subfolder/resource")); List<ICLanguageSettingEntry> actual = LanguageSettingsManager
List<ICLanguageSettingEntry> actual = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, .getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, notRelated, LANG_ID);
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.getSettingEntriesUpResourceTree(provider, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
configWritable, emptySettingsPath, LANG_ID); .getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, emptySettingsPath, LANG_ID);
// NOT taken from parent folder // NOT taken from parent folder
assertEquals(0, actual.size()); assertEquals(0, actual.size());
} }
@ -520,14 +448,11 @@ 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() ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
.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);
@ -540,9 +465,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (cfgDescription==null && rc==null) {
if (config == null && rc == null) {
return entries; return entries;
} }
return null; return null;
@ -555,10 +479,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.getSettingEntriesUpResourceTree(provider, List<ICLanguageSettingEntry> actual = LanguageSettingsManager
configWritable, derived, LANG_ID); .getSettingEntriesUpResourceTree(provider, cfgDescriptionWritable, 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());
} }
} }
@ -568,15 +492,13 @@ 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);
@ -585,17 +507,17 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSettingEntriesByKind(cfgDescription, 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.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.MACRO); .getSettingEntriesByKind(cfgDescription, 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());
} }
@ -604,8 +526,6 @@ 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>();
@ -619,10 +539,9 @@ 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(config, List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
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));
} }
/** /**
@ -630,8 +549,6 @@ 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>();
@ -644,8 +561,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.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSettingEntriesByKind(cfgDescription, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH);
assertEquals(0, includes.size()); assertEquals(0, includes.size());
} }
@ -654,8 +571,6 @@ 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>();
@ -672,7 +587,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve local entries // retrieve local entries
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
.getLocalSettingEntriesByKind(config, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getLocalSettingEntriesByKind(cfgDescription, 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());
} }
@ -680,15 +595,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// retrieve system entries // retrieve system entries
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
.getSystemSettingEntriesByKind(config, FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSystemSettingEntriesByKind(cfgDescription, 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.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSettingEntriesByKind(cfgDescription, 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());
@ -700,8 +615,6 @@ 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>();
@ -726,15 +639,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> includes = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH); .getSettingEntriesByKind(cfgDescription, 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());
} }
@ -743,14 +656,13 @@ 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));
@ -761,12 +673,12 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
// retrieve entries by kind // retrieve entries by kind
List<ICLanguageSettingEntry> result = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, List<ICLanguageSettingEntry> result = LanguageSettingsProvidersSerializer
FILE_0, LANG_ID, ICSettingEntry.INCLUDE_PATH | ICSettingEntry.MACRO); .getSettingEntriesByKind(cfgDescription, 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());
} }
@ -778,22 +690,19 @@ 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() ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
.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 ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID);
.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) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.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());
@ -807,8 +716,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
} }
{ {
// check that test provider got there // check that test provider got there
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders();
assertEquals(workspaceProvider, providers.get(0)); assertEquals(workspaceProvider, providers.get(0));
} }
@ -822,14 +730,12 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// check that test provider got loaded // check that test provider got loaded
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
.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) List<ILanguageSettingsProvider> loadedProviders = ((ILanguageSettingsProvidersKeeper) loadedCfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders();
assertTrue(LanguageSettingsManager.isWorkspaceProvider(loadedProviders.get(0))); assertTrue(LanguageSettingsManager.isWorkspaceProvider(loadedProviders.get(0)));
} }
@ -840,8 +746,7 @@ 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 ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
.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());
@ -855,10 +760,9 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
{ {
// make sure entries are the same // make sure entries are the same
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(1, entries.size()); // defined in the extension assertEquals(1, entries.size()); // defined in the extension
List<ICLanguageSettingEntry> rawEntries = rawProvider.getSettingEntries((IBuildConfiguration) null, null, List<ICLanguageSettingEntry> rawEntries = rawProvider.getSettingEntries(null, null, null);
null);
assertEquals(entries, rawEntries); assertEquals(entries, rawEntries);
} }
@ -867,11 +771,10 @@ 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((IBuildConfiguration) 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((IBuildConfiguration) null, null, List<ICLanguageSettingEntry> newRawEntries = rawProvider.getSettingEntries(null, null, null);
null);
assertEquals(newEntries, newRawEntries); assertEquals(newEntries, newRawEntries);
assertEquals(2, newEntries.size()); assertEquals(2, newEntries.size());
} }
@ -881,10 +784,8 @@ 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 ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
ILanguageSettingsProvider providerB = LanguageSettingsManager
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
assertEquals(providerA, providerB); assertEquals(providerA, providerB);
} }
@ -893,11 +794,10 @@ 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 ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
.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((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(1, entries.size()); // defined in the extension assertEquals(1, entries.size()); // defined in the extension
} }
@ -910,16 +810,15 @@ 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( LanguageSettingsSerializableProvider newRawProvider = new LanguageSettingsSerializableProvider(EXTENSION_EDITABLE_PROVIDER_ID, PROVIDER_NAME_0);
EXTENSION_EDITABLE_PROVIDER_ID, PROVIDER_NAME_0); newRawProvider.setSettingEntries(null, null, null, newEntries);
newRawProvider.setSettingEntries((IBuildConfiguration) null, null, null, newEntries);
providers.add(newRawProvider); providers.add(newRawProvider);
LanguageSettingsManager.setWorkspaceProviders(providers); LanguageSettingsManager.setWorkspaceProviders(providers);
} }
{ {
// check that provider provides the new entries // check that provider provides the new entries
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(newEntries.size(), entries.size()); assertEquals(newEntries.size(), entries.size());
assertEquals(newEntries, entries); assertEquals(newEntries, entries);
} }
@ -930,8 +829,7 @@ 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 ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertNotSame(provider, rawProvider); assertNotSame(provider, rawProvider);

View file

@ -18,6 +18,8 @@ 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;
@ -29,22 +31,16 @@ 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);
@ -71,8 +67,7 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
/** /**
* main function of the class. * main function of the class.
* *
* @param args * @param args - arguments
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -108,13 +103,8 @@ 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( final ICConfigurationDescription cfgDescriptionReferenced = getConfigurationDescriptions(projectReferenced)[0];
projectReferenced)[0]; cfgDescription.setReferenceInfo(new HashMap<String, String>() {{ put(projectReferenced.getName(), cfgDescriptionReferenced.getId()); }});
cfgDescription.setReferenceInfo(new HashMap<String, String>() {
{
put(projectReferenced.getName(), cfgDescriptionReferenced.getId());
}
});
coreModel.setProjectDescription(project, projectDescription); coreModel.setProjectDescription(project, projectDescription);
} }
@ -122,7 +112,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]);
@ -134,10 +124,9 @@ 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 ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(provider); assertNotNull(provider);
List<ICLanguageSettingEntry> entries = provider.getSettingEntries((IBuildConfiguration) null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(null, entries); assertEquals(null, entries);
} }
@ -148,41 +137,34 @@ 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 ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(refProjectsProvider); assertNotNull(refProjectsProvider);
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.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(config, project, List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL);
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", CIncludePathEntry nonRefEntry = CDataUtil.createCIncludePathEntry("non-referenced-exported", ICSettingEntry.EXPORTED);
ICSettingEntry.EXPORTED);
{ {
ICConfigurationDescription[] nonRefCfgDescriptions = getConfigurationDescriptions(nonReferencedProject); ICConfigurationDescription[] nonRefCfgDescriptions = getConfigurationDescriptions(nonReferencedProject);
ICConfigurationDescription nonRefCfgDescription = nonRefCfgDescriptions[0]; ICConfigurationDescription nonRefCfgDescription = nonRefCfgDescriptions[0];
List<ILanguageSettingsProvider> providersNonRef = ((ILanguageSettingsProvidersKeeper) nonRefCfgDescription) List<ILanguageSettingsProvider> providersNonRef = ((ILanguageSettingsProvidersKeeper) nonRefCfgDescription).getLanguageSettingProviders();
.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());
@ -190,12 +172,11 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
// add sample entries // add sample entries
ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(nonRefEntry); entries.add(nonRefEntry);
((LanguageSettingsGenericProvider) userProviderNonRef).setSettingEntries((IBuildConfiguration) null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderNonRef).setSettingEntries(null, null, null, entries);
} }
// 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(config, project, List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL);
null, ICSettingEntry.ALL);
assertEquals(0, entries.size()); assertEquals(0, entries.size());
} }
@ -204,10 +185,7 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
{ {
ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(referencedProject); ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(referencedProject);
ICConfigurationDescription refCfgDescription = refCfgDescriptions[0]; ICConfigurationDescription refCfgDescription = refCfgDescriptions[0];
IBuildConfiguration refConfig = Adapters.adapt(refCfgDescription, IBuildConfiguration.class); List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders();
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());
@ -217,16 +195,13 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
CIncludePathEntry refEntryNotExported = CDataUtil.createCIncludePathEntry("referenced-not-exported", 0); CIncludePathEntry refEntryNotExported = CDataUtil.createCIncludePathEntry("referenced-not-exported", 0);
entries.add(refEntry); entries.add(refEntry);
entries.add(refEntryNotExported); entries.add(refEntryNotExported);
((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries((IBuildConfiguration) null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries);
List<ICLanguageSettingEntry> entriesActual = LanguageSettingsManager.getSettingEntriesByKind(refConfig, List<ICLanguageSettingEntry> entriesActual = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, project, null, ICSettingEntry.ALL);
project, null, ICSettingEntry.ALL);
assertEquals(entries, entriesActual); assertEquals(entries, entriesActual);
} }
// Check that the new entries from referenced project made it to the // Check that the new entries from referenced project made it to the main project
// main project
{ {
List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(config, project, List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL);
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());
} }
@ -247,41 +222,30 @@ 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 ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID);
assertNotNull(refProjectsProvider); assertNotNull(refProjectsProvider);
List<ILanguageSettingsProvider> providersA = ((ILanguageSettingsProvidersKeeper) cfgDescriptionA) List<ILanguageSettingsProvider> providersA = ((ILanguageSettingsProvidersKeeper) cfgDescriptionA).getLanguageSettingProviders();
.getLanguageSettingProviders();
assertTrue(providersA.contains(refProjectsProvider)); assertTrue(providersA.contains(refProjectsProvider));
List<ILanguageSettingsProvider> providersB = ((ILanguageSettingsProvidersKeeper) cfgDescriptionB) List<ILanguageSettingsProvider> providersB = ((ILanguageSettingsProvidersKeeper) cfgDescriptionB).getLanguageSettingProviders();
.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(configA, projectA, List<ICLanguageSettingEntry> entriesA = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectA, null, ICSettingEntry.ALL);
null, ICSettingEntry.ALL);
assertEquals(0, entriesA.size()); assertEquals(0, entriesA.size());
List<ICLanguageSettingEntry> entriesB = LanguageSettingsManager.getSettingEntriesByKind(configB, projectB, List<ICLanguageSettingEntry> entriesB = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectB, null, ICSettingEntry.ALL);
null, ICSettingEntry.ALL);
assertEquals(0, entriesB.size()); assertEquals(0, entriesB.size());
} }
CIncludePathEntry entryExportedA = CDataUtil.createCIncludePathEntry("referenced-exported-A", CIncludePathEntry entryExportedA = CDataUtil.createCIncludePathEntry("referenced-exported-A", ICSettingEntry.EXPORTED);
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) List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders();
.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());
@ -290,18 +254,16 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(entryExportedA); entries.add(entryExportedA);
entries.add(entryNotExportedA); entries.add(entryNotExportedA);
((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries((IBuildConfiguration) null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries);
} }
CIncludePathEntry entryExportedB = CDataUtil.createCIncludePathEntry("referenced-exported-B", CIncludePathEntry entryExportedB = CDataUtil.createCIncludePathEntry("referenced-exported-B", ICSettingEntry.EXPORTED);
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) List<ILanguageSettingsProvider> providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders();
.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());
@ -310,17 +272,14 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); ArrayList<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(entryExportedB); entries.add(entryExportedB);
entries.add(entryNotExportedB); entries.add(entryNotExportedB);
((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries((IBuildConfiguration) null, null, null, entries); ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries);
} }
// Check that the new entries from projectB made it to projectA // Check that the new entries from projectB made it to projectA
{ {
ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA); ICConfigurationDescription[] cfgDescriptionsA = getConfigurationDescriptions(projectA);
ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0]; ICConfigurationDescription cfgDescriptionA = cfgDescriptionsA[0];
IBuildConfiguration configA = Adapters.adapt(cfgDescriptionA, IBuildConfiguration.class); List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionA, projectA, null, ICSettingEntry.ALL);
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));
@ -330,9 +289,7 @@ public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCas
{ {
ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB); ICConfigurationDescription[] cfgDescriptionsB = getConfigurationDescriptions(projectB);
ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0]; ICConfigurationDescription cfgDescriptionB = cfgDescriptionsB[0];
IBuildConfiguration configB = Adapters.adapt(cfgDescriptionB, IBuildConfiguration.class); List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescriptionB, projectB, null, ICSettingEntry.ALL);
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,6 +15,8 @@ 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;
@ -32,19 +34,15 @@ 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
*/ */
@ -67,17 +65,14 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
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);
@ -104,8 +99,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
/** /**
* main function of the class. * main function of the class.
* *
* @param args * @param args - arguments
* - arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
@ -130,8 +124,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
{ {
// triplecheck builderCWD for different project/configuration descriptions // triplecheck builderCWD for different project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY);
.getProjectDescription(project, READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -160,8 +153,7 @@ 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() ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY);
.getProjectDescription(project, READ_ONLY);
assertNull(prjDescription); assertNull(prjDescription);
LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider();
@ -179,8 +171,7 @@ 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() ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY);
.getProjectDescription(project, READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -208,8 +199,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY);
READ_ONLY);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -231,8 +221,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -253,7 +242,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);
@ -304,8 +293,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -359,8 +347,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -403,8 +390,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -454,8 +440,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -482,12 +467,9 @@ 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, CIncludePathEntry incWorkspaceEntry_2 = new CIncludePathEntry(incWorkspacePath_2, ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED);
ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED); CIncludePathEntry incWorkspaceEntry_3 = new CIncludePathEntry(incWorkspaceRelativePath_3, ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED);
CIncludePathEntry incWorkspaceEntry_3 = new CIncludePathEntry(incWorkspaceRelativePath_3, CIncludePathEntry incWorkspaceEntry_4 = new CIncludePathEntry(incWorkspacePathNoResolved_4, ICSettingEntry.VALUE_WORKSPACE_PATH);
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>();
@ -529,13 +511,12 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -579,17 +560,15 @@ 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, IFolder relativeFolderProjNameResolved = ResourceHelper.createFolder(project, "buildDir/" + prjName+markedResolved);
"buildDir/" + prjName + markedResolved); IPath buildCWD=buildFolder.getLocation();
IPath buildCWD = buildFolder.getLocation();
setBuilderCWD(project, buildCWD); setBuilderCWD(project, buildCWD);
// get project/configuration descriptions // get project/configuration descriptions
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -601,8 +580,7 @@ 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( CIncludePathEntry incProjNameMarkedResolvedEntry = new CIncludePathEntry(new Path("${ProjName}"+markedResolved), ICSettingEntry.RESOLVED);
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);
@ -631,7 +609,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);
} }
@ -644,7 +622,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
@ -656,12 +634,11 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -672,17 +649,13 @@ 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), CIncludePathEntry incRelativeEntry_dot_slash_path = new CIncludePathEntry(new Path(relativePath_dot_slash_path), 0);
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( CIncludePathEntry incRelativeEntry_dotdot_slash_path = new CIncludePathEntry(new Path(relativePath_dotdot_slash_path), 0);
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), CIncludePathEntry incRelativeEntry_dotdot_slash = new CIncludePathEntry(new Path(relativePath_dotdot_slash), ICSettingEntry.LOCAL);
ICSettingEntry.LOCAL); CIncludePathEntry incRelativeEntry_dot_slash = new CIncludePathEntry(new Path(relativePath_dot_slash), 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);
@ -748,8 +721,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -796,8 +768,7 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) {
if (this.rc.equals(rc)) if (this.rc.equals(rc))
return entries; return entries;
return null; return null;
@ -806,14 +777,11 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
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");
@ -828,8 +796,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(config, file, null)); assertNull(provider.getSettingEntries(cfgDescription, file, null));
assertEquals(includePathEntry, provider.getSettingEntries(config, parentFolder, null).get(0)); assertEquals(includePathEntry, provider.getSettingEntries(cfgDescription, parentFolder, null).get(0));
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider); providers.add(provider);
@ -857,8 +825,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
@ -904,7 +871,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);
} }
} }
@ -926,9 +893,8 @@ public class LanguageSettingsScannerInfoProviderTests extends BaseTestCase {
} }
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { if (langId==null || langId.equals(languageId))
if (langId == null || langId.equals(languageId))
return entries; return entries;
return new ArrayList<ICLanguageSettingEntry>(); return new ArrayList<ICLanguageSettingEntry>();
} }
@ -943,8 +909,7 @@ 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, ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE);
WRITEABLE);
assertNotNull(prjDescription); assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
assertNotNull(cfgDescription); assertNotNull(cfgDescription);

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(IBuildConfiguration config, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
return null; return null;
} }
} }

View file

@ -32,7 +32,6 @@ 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;
@ -43,8 +42,8 @@ import org.eclipse.core.runtime.QualifiedName;
*/ */
public class CModelMock { public class CModelMock {
/** /**
* Dummy implementation of ICProjectDescription for testing. Feel free to * Dummy implementation of ICProjectDescription for testing.
* override the methods you are interested to mock. * Feel free to override the methods you are interested to mock.
*/ */
public static class DummyCProjectDescription implements ICProjectDescription { public static class DummyCProjectDescription implements ICProjectDescription {
@ -89,7 +88,8 @@ public class CModelMock {
} }
@Override @Override
public ICStorageElement getStorage(String id, boolean create) throws CoreException { public ICStorageElement getStorage(String id, boolean create)
throws CoreException {
return null; return null;
} }
@ -136,17 +136,20 @@ public class CModelMock {
} }
@Override @Override
public void setActiveConfiguration(ICConfigurationDescription cfg) throws WriteAccessException { public void setActiveConfiguration(ICConfigurationDescription cfg)
throws WriteAccessException {
} }
@Override @Override
public ICConfigurationDescription createConfiguration(String id, String name, ICConfigurationDescription base) public ICConfigurationDescription createConfiguration(String id,
String name, ICConfigurationDescription base)
throws CoreException, WriteAccessException { throws CoreException, WriteAccessException {
return null; return null;
} }
@Override @Override
public ICConfigurationDescription createConfiguration(String buildSystemId, CConfigurationData data) public ICConfigurationDescription createConfiguration(
String buildSystemId, CConfigurationData data)
throws CoreException, WriteAccessException { throws CoreException, WriteAccessException {
return null; return null;
} }
@ -162,11 +165,13 @@ public class CModelMock {
} }
@Override @Override
public void removeConfiguration(String name) throws WriteAccessException { public void removeConfiguration(String name)
throws WriteAccessException {
} }
@Override @Override
public void removeConfiguration(ICConfigurationDescription cfg) throws WriteAccessException { public void removeConfiguration(ICConfigurationDescription cfg)
throws WriteAccessException {
} }
@Override @Override
@ -195,7 +200,8 @@ public class CModelMock {
} }
@Override @Override
public void setDefaultSettingConfiguration(ICConfigurationDescription cfg) { public void setDefaultSettingConfiguration(
ICConfigurationDescription cfg) {
} }
@Override @Override
@ -210,8 +216,8 @@ public class CModelMock {
} }
/** /**
* Dummy implementation of ICConfigurationDescription for testing. Feel free * Dummy implementation of ICConfigurationDescription for testing.
* to override the methods you are interested to mock. * Feel free 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;
@ -261,7 +267,8 @@ public class CModelMock {
} }
@Override @Override
public ICStorageElement getStorage(String id, boolean create) throws CoreException { public ICStorageElement getStorage(String id, boolean create)
throws CoreException {
return null; return null;
} }
@ -319,23 +326,27 @@ public class CModelMock {
} }
@Override @Override
public ICResourceDescription getResourceDescription(IPath path, boolean exactPath) { public ICResourceDescription getResourceDescription(IPath path,
boolean exactPath) {
return null; return null;
} }
@Override @Override
public void removeResourceDescription(ICResourceDescription des) throws CoreException, WriteAccessException { public void removeResourceDescription(ICResourceDescription des)
throws CoreException, WriteAccessException {
} }
@Override @Override
public ICFileDescription createFileDescription(IPath path, ICResourceDescription base) public ICFileDescription createFileDescription(IPath path,
throws CoreException, WriteAccessException { ICResourceDescription base) throws CoreException,
WriteAccessException {
return null; return null;
} }
@Override @Override
public ICFolderDescription createFolderDescription(IPath path, ICFolderDescription base) public ICFolderDescription createFolderDescription(IPath path,
throws CoreException, WriteAccessException { ICFolderDescription base) throws CoreException,
WriteAccessException {
return null; return null;
} }
@ -396,8 +407,9 @@ public class CModelMock {
} }
@Override @Override
public ICExternalSetting createExternalSetting(String[] languageIDs, String[] contentTypeIds, public ICExternalSetting createExternalSetting(String[] languageIDs,
String[] extensions, ICSettingEntry[] entries) throws WriteAccessException { String[] contentTypeIds, String[] extensions,
ICSettingEntry[] entries) throws WriteAccessException {
return null; return null;
} }
@ -477,37 +489,6 @@ 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,4 +78,287 @@ 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.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=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,3 +1,4 @@
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,21 +10,32 @@
*******************************************************************************/ *******************************************************************************/
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 * This interface is to be implemented by providers which want to broadcast the changes in their setting entries
* setting entries with {@link ILanguageSettingsChangeEvent}. * 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. It is * Return a copy of internal storage. This should be a deep copy/clone of the storage.
* used to calculate the delta and being kept in the last state object of configuration * It is 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,67 +14,42 @@ 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 their * contrary to some subclasses of {@link LanguageSettingsSerializableProvider} managing
* settings themselves and not providing such option to the user. * their 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 config * @param cfgDescription - configuration description.
* configuration. * @param rc - resource such as file or folder. If {@code null} the entries are
* @param rc * considered to be being defined as default entries for resources.
* resource such as file or folder. If {@code null} the entries are considered to be * @param languageId - language id. If {@code null}, then entries are considered
* being defined as default entries for resources. * to be defined as default entries for languages.
* @param languageId * @param entries - language settings entries to set.
* 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
*/ */
default public void setSettingEntries(IBuildConfiguration config, IResource rc, String languageId, public void setSettingEntries(ICConfigurationDescription cfgDescription, 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);
}
/** /**
* Sets language settings entries for the provider. * Shallow clone of the provider. "Shallow" is defined here as the exact copy except that
* * 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 * @throws CloneNotSupportedException in case {@link #clone()} throws the exception.
* in case {@link #clone()} throws the exception.
*/ */
public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException;
@ -82,5 +57,4 @@ public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroa
* @see Object#clone() * @see Object#clone()
*/ */
public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException;
} }

View file

@ -17,36 +17,35 @@ 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}. This interface is used to * Base interface to provide list of {@link ICLanguageSettingEntry}.
* deliver additions to compiler options such as include paths (-I) or preprocessor defines (-D) and * This interface is used to deliver additions to compiler options such as
* others (see {@link ICSettingEntry#INCLUDE_PATH} and other kinds). <br> * include paths (-I) or preprocessor defines (-D) and others (see
* <br> * {@link ICSettingEntry#INCLUDE_PATH} and other kinds).
* <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 interface. The * {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this
* recommended way of implementing is to extend {@link LanguageSettingsSerializableProvider} and * interface. The recommended way of implementing is to extend
* implement {@link ILanguageSettingsEditableProvider}. That will give the ability to persist and * {@link LanguageSettingsSerializableProvider} and implement {@link ILanguageSettingsEditableProvider}.
* edit/clean entries by user in UI. The clone methods defined by * That will give the ability to persist and edit/clean entries by user in UI.
* {@link ILanguageSettingsEditableProvider} should be chained as done for example by * The clone methods defined by {@link ILanguageSettingsEditableProvider} should be
* {@link LanguageSettingsGenericProvider}. <br> * chained as done for example by {@link LanguageSettingsGenericProvider}.
* <br> * <br><br>
* CDT provides a few general use implementations in the core such as * CDT provides a few general use implementations in the core such as {@link LanguageSettingsBaseProvider}
* {@link LanguageSettingsBaseProvider} or {@link LanguageSettingsSerializableProvider} or * or {@link LanguageSettingsSerializableProvider} or {@link LanguageSettingsGenericProvider}
* {@link LanguageSettingsGenericProvider} which could be used out of the box or built upon. There * which could be used out of the box or built upon. There are also abstract classes in build
* are also abstract classes in build plugins {@code AbstractBuildCommandParser} and * plugins {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} which
* {@code AbstractBuiltinSpecsDetector} which serve as a base for output parsers and built-in * serve as a base for output parsers and built-in compiler language settings detectors.
* compiler language settings detectors. See also extension point schema description * See also extension point schema description LanguageSettingsProvider.exsd.
* 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 to represent the * Id is used to keep track of the providers internally. Use unique id
* provider. * to represent the provider.
* *
* @return Id of the provider. * @return Id of the provider.
*/ */
@ -60,72 +59,28 @@ public interface ILanguageSettingsProvider {
public String getName(); public String getName();
/** /**
* Returns the list of setting entries for the given configuration description, resource and * Returns the list of setting entries for the given configuration description,
* language. <br> * resource and language.
* <br> * <br><br>
* Note to implementers - this method should not be used to do any long running operations such * Note to implementers - this method should not be used to do any long running
* as extensive calculations or reading files. If you need to do so, the recommended way is to * operations such as extensive calculations or reading files. If you need to do
* do the calculations outside of this function call - in advance and on appropriate event. For * so, the recommended way is to do the calculations outside of
* example, Build Output Parser prepares the list and stores it in internal cache while parsing * this function call - in advance and on appropriate event. For example, Build
* output. {@link #getSettingEntries(IBuildConfiguration, IResource, String)} will return cached * Output Parser prepares the list and stores it in internal cache while parsing output.
* entries when asked. You can also implement {@link ICListenerAgent} interface to get * {@link #getSettingEntries(ICConfigurationDescription, IResource, String)} will
* registered and listen to arbitrary events. * return cached entries when asked. You can also implement {@link ICListenerAgent}
* interface to get registered and listen to arbitrary events.
* *
* @param config * @param cfgDescription - configuration description.
* - configuration. * @param rc - resource such as file or folder.
* @param rc * If {@code null}, the default entries for all resources are returned.
* - resource such as file or folder. If {@code null}, the default entries for all * @param languageId - language id.
* resources are returned. * If {@code null}, the default entries for all languages are returned.
* @param languageId * (see {@link LanguageManager#getLanguageForFile(org.eclipse.core.resources.IFile, ICConfigurationDescription)}).
* - 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 * @return the list of setting entries or {@code null} if no settings defined.
* be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)} to * The list needs to be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)}
* save memory and avoid deep equality comparisons. * to save memory and avoid deep equality comparisons.
* @since 6.0
*/ */
default public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId);
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,24 +23,19 @@ 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 * {@code LanguageSettingsBaseProvider} is a basic implementation of {@link ILanguageSettingsProvider}
* {@link ILanguageSettingsProvider} for the extensions defined by * for the extensions defined by {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point.
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point.
* *
* This implementation supports "static" list of entries for languages specified in the extension * This implementation supports "static" list of entries for languages specified in
* point. * the extension point.
* *
* @since 5.4 * @since 5.4
*/ */
public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBase public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider {
implements ILanguageSettingsProvider { /** Language scope, i.e. list of languages the entries will be provided for. */
/**
* 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 */
@ -59,10 +54,8 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* Constructor. Creates an "empty" non-configured provider. * Constructor. Creates an "empty" non-configured provider.
* *
* @param id * @param id - id of the provider.
* - id of the provider. * @param name - name of the provider to be presented to a user.
* @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);
@ -71,97 +64,85 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* Constructor. * Constructor.
* *
* @param id * @param id - id of the provider.
* - id of the provider. * @param name - name of the provider to be presented to a user.
* @param name * @param languages - list of languages the {@code entries} provided for.
* - name of the provider to be presented to a user. * {@code languages} can be {@code null}, in this case the {@code entries}
* @param languages * are provided for any language.
* - list of languages the {@code entries} provided for. {@code languages} can be * @param entries - the list of language settings entries this provider provides.
* {@code null}, in this case the {@code entries} are provided for any language. * If {@code null} is passed, the provider creates an empty list.
* @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 * @param id - id of the provider.
* - id of the provider. * @param name - name of the provider to be presented to a user.
* @param name * @param languages - list of languages the {@code entries} provided for.
* - name of the provider to be presented to a user. * {@code languages} can be {@code null}, in this case the {@code entries}
* @param languages * are provided for any language.
* - list of languages the {@code entries} provided for. {@code languages} can be * @param entries - the list of language settings entries this provider provides.
* {@code null}, in this case the {@code entries} are provided for any language. * If {@code null} is passed, the provider creates an empty list.
* @param entries * @param properties - custom properties as the means to customize providers.
* - 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 the extension point * A method to configure the provider. The initialization of provider from
* is done in 2 steps. First, the class is created as an executable extension using the default * the extension point is done in 2 steps. First, the class is created as
* provider. Then this method is used to configure the provider. <br> * an executable extension using the default provider. Then this method is
* <br> * used to configure the provider.
*<br><br>
* It is not allowed to reconfigure the provider. * It is not allowed to reconfigure the provider.
* *
* @param id * @param id - id of the provider.
* - id of the provider. * @param name - name of the provider to be presented to a user.
* @param name * @param languages - list of languages the {@code entries} provided for.
* - name of the provider to be presented to a user. * {@code languages} can be {@code null}, in this case the {@code entries}
* @param languages * are provided for any language.
* - list of languages the {@code entries} provided for. {@code languages} can be * @param entries - the list of language settings entries this provider provides.
* {@code null}, in this case the {@code entries} are provided for any language. * If {@code null} is passed, the provider creates an empty list.
* @param entries * @param properties - custom properties as the means to customize providers.
* - 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 * @throws UnsupportedOperationException if an attempt to reconfigure provider is made.
* 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( throw new UnsupportedOperationException(SettingsModelMessages.getString("LanguageSettingsBaseProvider.CanBeConfiguredOnlyOnce")); //$NON-NLS-1$
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 so extenders of this * {@code LanguageSettingsBaseProvider} keeps the list of key-value pairs
* class can customize the provider. The properties of {@code LanguageSettingsBaseProvider} come * so extenders of this class can customize the provider. The properties
* from the extension in plugin.xml although the extenders can provide their own method. <br> * of {@code LanguageSettingsBaseProvider} come from the extension in plugin.xml
* <br> * although the extenders can provide their own method.
* Please note that empty string value is treated as "default" value and the same as * <br><br>
* {@code null} and the same as missing property, which allows {@link #equals(Object)} evaluate * Please note that empty string value is treated as "default" value and
* the property as equal while comparing providers. * the same as {@code null} and the same as missing property, which allows
* {@link #equals(Object)} evaluate the property as equal while comparing providers.
* *
* @param key * @param key - property to check the value.
* - 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) {
@ -174,13 +155,11 @@ 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 * @param key - property to check the value.
* - property to check the value. * @return boolean value of the property. If the property is missing or cannot be
* @return boolean value of the property. If the property is missing or cannot be interpreted as * interpreted as boolean returns {@code false}.
* 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));
@ -196,46 +175,33 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* @param languageId * @param languageId - language id. If {@code null}, then entries defined for
* - language id. If {@code null}, then entries defined for the language scope are * the language scope are returned. See {@link #getLanguageScope()}
* returned. See {@link #getLanguageScope()}
* *
* @return unmodifiable list of setting entries or {@code null} if no settings defined. the list * @return unmodifiable list of setting entries or {@code null} if no settings defined.
* is internally pooled and guaranteed to be the same object for equal lists. * the list is internally pooled and guaranteed to be the same object for equal
* @since 6.0 * lists.
*/ */
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription,
// For backwards compatibility IResource rc, String languageId) {
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. If {@code null}, the * @return the unmodifiable list of languages this provider provides for.
* provider provides for any language. * If {@code null}, the 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);
} }
@ -301,8 +267,7 @@ 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 // The trouble to ensure default properties are equal to missing ones.
// 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,90 +28,78 @@ 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. See * A collection of utility methods to manage language settings providers.
* {@link ILanguageSettingsProvider}. * See {@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) for the given * Returns the list of setting entries of a certain kind (such as include paths)
* configuration description, resource and language. This is a combined list for all providers * for the given configuration description, resource and language. This is a
* taking into account settings of parent folder if settings for the given resource are not * combined list for all providers taking into account settings of parent folder
* defined. For include paths both local (#include "...") and system (#include <...>) entries * if settings for the given resource are not defined. For include paths both
* are returned. * local (#include "...") and system (#include <...>) entries are returned.
* *
* @param config * @param cfgDescription - configuration description.
* - configuration. * @param rc - resource such as file or folder.
* @param rc * @param languageId - language id.
* - resource such as file or folder. * @param kind - kind of language settings entries, such as
* @param languageId * {@link ICSettingEntry#INCLUDE_PATH} etc. This is a binary flag
* - language id. * and it is possible to specify composite kind.
* @param kind * Use {@link ICSettingEntry#ALL} to get all kinds.
* - 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 6.0 * @since 5.5
*/ */
public static List<ICLanguageSettingEntry> getSettingEntriesByKind(IBuildConfiguration config, public static List<ICLanguageSettingEntry> getSettingEntriesByKind(ICConfigurationDescription cfgDescription, IResource rc, String languageId, int kind) {
IResource rc, String languageId, int kind) { return LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, languageId, kind);
return LanguageSettingsProvidersSerializer.getSettingEntriesByKind(config, rc, languageId, kind);
} }
/** /**
* Returns the list of setting entries of the given provider for the given configuration * Returns the list of setting entries of the given provider
* description, resource and language. This method reaches to the parent folder of the resource * for the given configuration description, resource and language.
* recursively if the resource does not define the entries for the given provider. * This method reaches to the parent folder of the resource recursively
* if the resource does not define the entries for the given provider.
* *
* @param provider * @param provider - language settings provider.
* - language settings provider. * @param cfgDescription - configuration description.
* @param config * @param rc - resource such as file or folder.
* - configuration. * @param languageId - language id.
* @param rc
* - resource such as file or folder.
* @param languageId
* - language id.
* *
* @return the list of setting entries. Never returns {@code null} although individual providers * @return the list of setting entries. Never returns {@code null}
* return {@code null} if no settings defined. * although individual providers return {@code null} if no settings defined.
* @since 6.0
*/ */
public static List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree( public static List<ICLanguageSettingEntry> getSettingEntriesUpResourceTree(ILanguageSettingsProvider provider, ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
ILanguageSettingsProvider provider, IBuildConfiguration config, IResource rc, String languageId) { return LanguageSettingsProvidersSerializer.getSettingEntriesUpResourceTree(provider, cfgDescription, rc, languageId);
return LanguageSettingsProvidersSerializer.getSettingEntriesUpResourceTree(provider, config, rc,
languageId);
} }
/** /**
* Get Language Settings Provider from the list of workspace providers, see * Get Language Settings Provider from the list of workspace providers,
* {@link #getWorkspaceProviders()}. * see {@link #getWorkspaceProviders()}.
* *
* @param id * @param id - id of provider to find.
* - id of provider to find. * @return the workspace provider. If workspace provider is not defined
* @return the workspace provider. If workspace provider is not defined a new instance is * a new instance is created and returned.
* 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 user-defined * Get Language Settings Providers defined in the workspace. That includes
* providers and after that providers defined as extensions via * user-defined providers and after that providers defined as extensions via
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. Note that this returns * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point.
* wrappers around workspace provider so underlying provider could be replaced internally * Note that this returns wrappers around workspace provider so underlying
* without need to change configuration. See also * provider could be replaced internally without need to change configuration.
* {@link #getRawProvider(ILanguageSettingsProvider)}. * See also {@link #getRawProvider(ILanguageSettingsProvider)}.
* *
* @return list of workspace providers. * @return list of workspace providers.
*/ */
@ -120,12 +108,12 @@ public class LanguageSettingsManager {
} }
/** /**
* Checks if the provider is a workspace level provider. This method is intended to check * Checks if the provider is a workspace level provider.
* providers retrieved from a configuration. Raw providers from * This method is intended to check providers retrieved from a configuration.
* {@link #getRawProvider(ILanguageSettingsProvider)} are not considered as workspace providers. * Raw providers from {@link #getRawProvider(ILanguageSettingsProvider)}
* are not considered as workspace providers.
* *
* @param provider * @param provider - provider to check.
* - 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) {
@ -135,14 +123,11 @@ 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 * @param provider - the provider to get raw provider for. Can be either workspace provider
* - the provider to get raw provider for. Can be either workspace provider or * or regular one.
* regular one. * @return raw underlying provider for workspace provider or provider itself if no wrapper is used.
* @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)) {
@ -151,42 +136,38 @@ 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 * @param providers - array of user defined workspace providers.
* - array of user defined workspace providers. Note that those providers will shadow * Note that those providers will shadow extension providers with the same ID.
* extension providers with the same ID. All not shadowed extension providers will be * All not shadowed extension providers will be added to the list to be present
* added to the list to be present as workspace providers. {@code null} is equivalent * as workspace providers. {@code null} is equivalent to passing an empty array
* to passing an empty array and so will reset workspace providers to match extension * and so will reset workspace providers to match extension providers.
* providers. * @throws CoreException in case of problems (such as problems with persistence).
* @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 it does not * Copy language settings provider. It is different from clone() methods in that
* throw {@code CloneNotSupportedException} but returns {@code null} instead. * it does not throw {@code CloneNotSupportedException} but returns {@code null}
* instead.
* *
* @param provider * @param provider - language settings provider to copy.
* - language settings provider to copy. * @param deep - {@code true} to request deep copy including copying settings entries
* @param deep * or {@code false} to return shallow copy with no settings entries.
* - {@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( public static ILanguageSettingsEditableProvider getProviderCopy(ILanguageSettingsEditableProvider provider, boolean deep) {
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() {
@ -195,17 +176,14 @@ 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}. A new copy of the extension provider * {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
* is returned. * A new copy of the extension provider is returned.
* *
* @param id * @param id - ID of the extension provider.
* - ID of the extension provider. * @param deep - {@code true} to request deep copy including copying settings entries
* @param deep * or {@code false} to return shallow copy with no settings entries.
* - {@code true} to request deep copy including copying settings entries or * @return the copy of the extension provider if possible (i.e. for {@link ILanguageSettingsEditableProvider})
* {@code false} to return shallow copy with no settings entries. * or {@code null} if provider is not copyable.
* @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);
@ -215,11 +193,9 @@ 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 * @param provider - the provider to test.
* - the provider to test. * @param deep - {@code true} to check for deep equality testing also settings entries
* @param deep * or {@code false} to test shallow copy with no settings entries.
* - {@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) {
@ -227,24 +203,24 @@ public class LanguageSettingsManager {
} }
/** /**
* Find language IDs for the resource represented by resource description. Under the hood build * Find language IDs for the resource represented by resource description.
* component is inquired and the language IDs would commonly come from the input type(s). * Under the hood build component is inquired and the language IDs would
* commonly come from the input type(s).
* *
* @param rcDescription * @param rcDescription - resource description
* - resource description * @return list of language IDs for the resource. The list can contain {@code null} ID.
* @return list of language IDs for the resource. The list can contain {@code null} ID. Never * Never returns {@code null} but empty list if no languages can be found.
* 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>();
@ -252,7 +228,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);
} }
} }
@ -263,14 +239,14 @@ public class LanguageSettingsManager {
} }
/** /**
* Find language IDs for the resource in given build configuration. Under the hood build * Find language IDs for the resource in given build configuration.
* component is inquired and the language IDs would commonly come from the input type(s). * Under the hood build component is inquired and the language IDs would
* commonly come from the input type(s).
* *
* @param resource * @param resource - the resource to find languages for.
* - the resource to find languages for.
* @param cfgDescription * @param cfgDescription
* @return list of language IDs for the resource. Never returns {@code null} but empty list if * @return list of language IDs for the resource.
* no languages can be found. * Never returns {@code null} but empty list if 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>();
@ -287,8 +263,7 @@ 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, ILanguage lang = LanguageManager.getInstance().getLanguageForFile((IFile) resource, cfgDescription);
cfgDescription);
if (lang != null) { if (lang != null) {
langId = lang.getId(); langId = lang.getId();
} }
@ -313,8 +288,7 @@ 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 * @param listener the listener to add
* the listener to add
*/ */
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener);
@ -323,35 +297,33 @@ public class LanguageSettingsManager {
/** /**
* Removes a language settings change listener. * Removes a language settings change listener.
* *
* @param listener * @param listener the listener to remove.
* 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 or belong to a * Tells if the provider is meant to be shared between projects in workspace
* specific configuration. This attribute is defined in * or belong to a specific configuration. This attribute is defined in
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. <br> * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point.
* Note that only {@link ILanguageSettingsEditableProvider} can be owned by a configuration. * <br>Note that only {@link ILanguageSettingsEditableProvider} can be owned by
* a configuration.
* *
* @param id * @param id - ID of the provider to inquire.
* - ID of the provider to inquire. * @return {@code true} if the provider is designed to be shared,
* @return {@code true} if the provider is designed to be shared, {@code false} if * {@code false} if configuration-owned.
* 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 (under * Tells if language settings entries of the provider are persisted with the project
* .settings/ folder) or in workspace area. Persistence in the project area lets the entries * (under .settings/ folder) or in workspace area. Persistence in the project area lets
* migrate with the project. * the entries migrate with the project.
* *
* @param provider * @param provider - provider to check the persistence mode.
* - 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) {
@ -361,23 +333,19 @@ public class LanguageSettingsManager {
/** /**
* Define where language settings are persisted for the provider. * Define where language settings are persisted for the provider.
* *
* @param provider * @param provider - provider to set the persistence mode.
* - provider to set the persistence mode. * @param storeEntriesWithProject - {@code true} if with the project,
* @param storeEntriesWithProject * {@code false} if in workspace area.
* - {@code true} if with the project, {@code false} if in workspace area.
*/ */
public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider, public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider, boolean storeEntriesWithProject) {
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 * @param prjDescription - project description of the project.
* - project description of the project. * @throws CoreException if something goes wrong.
* @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);
@ -386,8 +354,7 @@ 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 * @throws CoreException if something goes wrong.
* if something goes wrong.
*/ */
public static void serializeLanguageSettingsWorkspace() throws CoreException { public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
@ -396,16 +363,15 @@ 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 * @param prjDescription - project description of the project.
* - 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 in * Save language settings providers of the workspace (global providers) to persistent storage
* a background job. * in a background job.
*/ */
public static void serializeLanguageSettingsWorkspaceInBackground() { public static void serializeLanguageSettingsWorkspaceInBackground() {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspaceInBackground(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspaceInBackground();
@ -414,13 +380,11 @@ 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 * The list will contain global providers for ones where attribute "prefer-non-shared" is {@code true}
* {@code true} and a new copy for those where attribute "prefer-non-shared" is {@code false}. * and a new copy for those where attribute "prefer-non-shared" is {@code false}. Attribute "prefer-non-shared"
* Attribute "prefer-non-shared" is defined in extension point * is defined in extension point {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
* {@code org.eclipse.cdt.core.LanguageSettingsProvider}.
* *
* @param ids * @param ids - list of providers id which cannot be {@code null}.
* - 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,7 +24,6 @@ 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;
@ -35,21 +34,19 @@ 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 * This class is the base class for language settings providers able to serialize
* serialize into XML storage. Although this class has setter methods, by design * into XML storage.
* its instances are not editable in UI nor instances can be assigned to a * Although this class has setter methods, by design its instances are not editable in UI
* configuration (cannot be global or non-shared). Implement * nor instances can be assigned to a configuration (cannot be global or non-shared).
* {@link ILanguageSettingsEditableProvider} interface for that. There is a * Implement {@link ILanguageSettingsEditableProvider} interface for that. There is a generic
* generic implementation of this interface available to be used, see * implementation of this interface available to be used, see {@link LanguageSettingsGenericProvider}.
* {@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 public class LanguageSettingsSerializableProvider extends LanguageSettingsBaseProvider implements ILanguageSettingsBroadcastingProvider {
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;
@ -59,9 +56,8 @@ 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 * Default constructor. This constructor has to be always followed with setting id and name of the provider.
* setting id and name of the provider. This constructor is necessary to * This constructor is necessary to instantiate the class via the extension point in plugin.xml.
* instantiate the class via the extension point in plugin.xml.
*/ */
public LanguageSettingsSerializableProvider() { public LanguageSettingsSerializableProvider() {
super(); super();
@ -70,10 +66,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Constructor. * Constructor.
* *
* @param id * @param id - id of the provider.
* - id of the provider. * @param name - name of the provider. Note that this name shows up in UI.
* @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);
@ -90,24 +84,21 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
@Override @Override
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) {
// 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 // note that these entries are intended to be retrieved by LanguageSettingsManager.getSettingEntriesUpResourceTree()
// LanguageSettingsManager.getSettingEntriesUpResourceTree()
// when the whole resource hierarchy has been traversed up // when the whole resource hierarchy has been traversed up
setSettingEntries((IBuildConfiguration) null, null, null, entries); setSettingEntries(null, null, null, entries);
} }
} }
/** /**
* @return {@code true} if the provider does not keep any settings yet or * @return {@code true} if the provider does not keep any settings yet or {@code false} if there are some.
* {@code false} if there are some.
*/ */
public boolean isEmpty() { public boolean isEmpty() {
return fStorage.isEmpty(); return fStorage.isEmpty();
@ -116,9 +107,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
/** /**
* Sets the language scope of the provider. * Sets the language scope of the provider.
* *
* @param languages * @param languages - the list of languages this provider provides for.
* - the list of languages this provider provides for. If * If {@code null}, the provider provides for any language.
* {@code null}, the provider provides for any language.
* *
* @see #getLanguageScope() * @see #getLanguageScope()
*/ */
@ -131,66 +121,46 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Clears all the entries for all configurations, all resources and all * Clears all the entries for all configurations, all resources and all languages.
* languages.
*/ */
public void clear() { public void clear() {
fStorage.clear(); fStorage.clear();
} }
/** /**
* Sets language settings entries for the provider. Note that the entries * Sets language settings entries for the provider.
* are not persisted at that point. Use this method to set the entries for * Note that the entries are not persisted at that point. Use this method to set
* all resources one by one and after all done persist in one shot using * the entries for all resources one by one and after all done persist in one shot
* {@link #serializeLanguageSettings(ICConfigurationDescription)}. See for * using {@link #serializeLanguageSettings(ICConfigurationDescription)}.
* example {@code AbstractBuildCommandParser} and * See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector}
* {@code AbstractBuiltinSpecsDetector} in build plugins. * in build plugins.
* *
* @param config * @param cfgDescription - configuration description.
* - configuration. * @param rc - resource such as file or folder. If {@code null} the entries are
* @param rc * considered to be being defined as default entries for resources.
* - resource such as file or folder. If {@code null} the entries * @param languageId - language id. If {@code null}, then entries are considered
* are considered to be being defined as default entries for * to be defined for the language scope. See {@link #getLanguageScope()}
* resources. * @param entries - language settings entries to set.
* @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(IBuildConfiguration config, IResource rc, String languageId, public void setSettingEntries(ICConfigurationDescription cfgDescription, 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);
} }
/** /**
* @deprecated Use {@link #setSettingEntries(IBuildConfiguration, IResource, String, List)}. * {@inheritDoc}
*/
@Deprecated
public void setSettingEntries(ICConfigurationDescription config, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries) {
setSettingEntries((IBuildConfiguration) null, rc, languageId, entries);
}
/**
* {@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 also that <b>you can compare these lists with simple equality * Note that this list is <b>unmodifiable</b>. To modify the list copy it, change and use
* operator ==</b>, as the lists themselves are backed by * {@link #setSettingEntries(ICConfigurationDescription, IResource, String, List)}.
* WeakHashSet<List<ICLanguageSettingEntry>> where identical copies (deep * <br><br>
* comparison is used) are replaced with the same one instance. * Note also that <b>you can compare these lists with simple equality operator ==</b>,
* 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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
String languageId) { String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null;
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))) {
@ -202,32 +172,25 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* @deprecated Use {@link #getSettingEntries(IBuildConfiguration, IResource, String)}. * Serialize the provider under parent XML element.
*/ * This is convenience method not intended to be overridden on purpose.
@Deprecated * Override {@link #serializeAttributes(Element)} or
@Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription config, IResource rc,
String languageId) {
return getSettingEntries((IBuildConfiguration) null, rc, languageId);
}
/**
* Serialize the provider under parent XML element. This is convenience
* method not intended to be overridden on purpose. Override
* {@link #serializeAttributes(Element)} or
* {@link #serializeEntries(Element)} instead. * {@link #serializeEntries(Element)} instead.
* *
* @param parentElement * @param parentElement - element where to serialize.
* - 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" ...> <language-scope id="lang.id"/> <provider id="provider.id" ...>
* <language id="lang.id"> <resource project-relative-path="/"> <entry <language-scope id="lang.id"/>
* flags="" kind="includePath" name="path"/> </resource> </language> <language id="lang.id">
* </provider> <resource project-relative-path="/">
<entry flags="" kind="includePath" name="path"/>
</resource>
</language>
</provider>
*/ */
Element elementProvider = serializeAttributes(parentElement); Element elementProvider = serializeAttributes(parentElement);
serializeEntries(elementProvider); serializeEntries(elementProvider);
@ -236,17 +199,14 @@ 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 * equivalent to serializing everything (including language scope) except entries.
* entries.
* *
* @param parentElement * @param parentElement - element where to serialize.
* - 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, // Keeps pairs: key, value. See JavaDoc XmlUtil.appendElement(Node, String, String[]).
// String, String[]).
List<String> attributes = new ArrayList<String>(); List<String> attributes = new ArrayList<String>();
attributes.add(ATTR_ID); attributes.add(ATTR_ID);
@ -260,12 +220,11 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
attributes.add(entry.getValue()); attributes.add(entry.getValue());
} }
Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, attributes.toArray(new String[0]));
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;
@ -273,24 +232,21 @@ 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 * Convenience method to persist language settings entries for the project or
* or workspace as often-used operation. Note that configuration description * workspace as often-used operation.
* is passed as an argument but the current implementation saves all * Note that configuration description is passed as an argument but the
* configurations. * current implementation saves all configurations.
* *
* @param cfgDescription * @param cfgDescription - configuration description.
* - configuration description. If not {@code null}, all * If not {@code null}, all providers of the project are serialized.
* providers of the project are serialized. If {@code null}, * If {@code null}, global workspace providers are serialized.
* global workspace providers are serialized.
* *
* @return - status of operation. * @return - status of operation.
*/ */
@ -303,29 +259,26 @@ 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, status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); //$NON-NLS-1$
"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 * Convenience method to persist language settings entries in background for the project or
* the project or workspace as often-used operation. Note that configuration * workspace as often-used operation.
* description is passed as an argument but the current implementation saves * Note that configuration description is passed as an argument but the
* all configurations. * current implementation saves all configurations.
* *
* @param cfgDescription * @param cfgDescription - configuration description.
* - configuration description. If not {@code null}, all * If not {@code null}, all providers of the project are serialized.
* providers of the project are serialized. If {@code null}, * If {@code null}, global workspace providers are serialized.
* 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 LanguageSettingsManager.serializeLanguageSettingsInBackground(cfgDescription.getProjectDescription());
.serializeLanguageSettingsInBackground(cfgDescription.getProjectDescription());
} }
} else { } else {
LanguageSettingsManager.serializeLanguageSettingsWorkspaceInBackground(); LanguageSettingsManager.serializeLanguageSettingsWorkspaceInBackground();
@ -333,13 +286,12 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Compare provider store with cached persistent store used to calculate * Compare provider store with cached persistent store used to calculate delta.
* 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);
} }
@ -353,20 +305,19 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Load provider from XML provider element. This is convenience method not * Load provider from XML provider element.
* intended to be overridden on purpose. Override * This is convenience method not intended to be overridden on purpose.
* {@link #loadAttributes(Element)} or {@link #loadEntries(Element)} * Override {@link #loadAttributes(Element)} or
* instead. * {@link #loadEntries(Element)} instead.
* *
* @param providerNode * @param providerNode - XML element "provider" to load provider from.
* - 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);
} }
@ -376,7 +327,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);
@ -386,9 +337,7 @@ 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);
@ -396,9 +345,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();
@ -411,9 +360,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())) {
@ -425,44 +374,37 @@ 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. <br> * Set a custom property of the provider.
* <br> * <br><br>
* A note of caution - do not use default values for a provider which are * A note of caution - do not use default values for a provider which are different
* different from empty or {@code null} value. When providers are checked * from empty or {@code null} value. When providers are checked for equality
* for equality (during internal operations in core) the missing properties * (during internal operations in core) the missing properties are evaluated as
* are evaluated as empty ones. * empty ones.
* *
* @see LanguageSettingsBaseProvider#getProperty(String) * @see LanguageSettingsBaseProvider#getProperty(String)
* *
* @param key * @param key - name of the property.
* - name of the property. * @param value - value of the property.
* @param value * If value is {@code null} the property is removed from the list.
* - 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. <br> * Set a custom boolean property of the provider.
* Please, note that default value is always {@code false}. * <br>Please, note that default value is always {@code false}.
*
* @see LanguageSettingsBaseProvider#getProperty(String) * @see LanguageSettingsBaseProvider#getProperty(String)
* *
* @param key * @param key - name of the property.
* - name of the property. * @param value - {@code boolean} value 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));
@ -470,12 +412,11 @@ 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 * {@link #clone()} via {@link #cloneShallow()}. Do not inline to "optimize"!
* "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);
@ -484,12 +425,11 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
/** /**
* Shallow clone of the provider. "Shallow" is defined here as the exact * Shallow clone of the provider. "Shallow" is defined here as the exact copy except that
* copy except that the copy will have zero language settings entries. * the copy will have zero language settings entries.
* *
* @return shallow copy of the provider. * @return shallow copy of the provider.
* @throws CloneNotSupportedException * @throws CloneNotSupportedException in case {@link #clone()} throws the exception.
* in case {@link #clone()} throws the exception.
*/ */
protected LanguageSettingsSerializableProvider cloneShallow() throws CloneNotSupportedException { protected LanguageSettingsSerializableProvider cloneShallow() throws CloneNotSupportedException {
return cloneShallowInternal(); return cloneShallowInternal();

View file

@ -34,14 +34,14 @@ public class LanguageSettingsStorage implements Cloneable {
/** Storage to keep settings entries. */ /** Storage to keep settings entries. */
protected Map<String, // languageId protected Map<String, // languageId
Map<String, // resource project path Map<String, // resource project path
List<ICLanguageSettingEntry>>> fStorage = new HashMap<>(); List<ICLanguageSettingEntry>>> fStorage = new HashMap<String, Map<String, List<ICLanguageSettingEntry>>>();
/** /**
* Pool of LSE lists implemented as WeakHashSet. That allows to gain memory savings * Pool of LSE lists implemented as WeakHashSet. That allows to gain memory savings
* at the expense of CPU time. WeakHashSet handles garbage collection when a list is not * at the expense of CPU time. WeakHashSet handles garbage collection when a list is not
* referenced anywhere else. See JavaDoc {@link java.lang.ref.WeakReference} about weak reference objects. * referenced anywhere else. See JavaDoc {@link java.lang.ref.WeakReference} about weak reference objects.
*/ */
private static WeakHashSet<List<ICLanguageSettingEntry>> listPool = new WeakHashSetSynchronized<>(); private static WeakHashSet<List<ICLanguageSettingEntry>> listPool = new WeakHashSetSynchronized<List<ICLanguageSettingEntry>>();
/** /**
* Returns the list of setting entries for the given resource and language. * Returns the list of setting entries for the given resource and language.
@ -218,13 +218,13 @@ public class LanguageSettingsStorage implements Cloneable {
@Override @Override
public LanguageSettingsStorage clone() throws CloneNotSupportedException { public LanguageSettingsStorage clone() throws CloneNotSupportedException {
LanguageSettingsStorage storageClone = (LanguageSettingsStorage) super.clone(); LanguageSettingsStorage storageClone = (LanguageSettingsStorage) super.clone();
storageClone.fStorage = new HashMap<>(); storageClone.fStorage = new HashMap<String, Map<String, List<ICLanguageSettingEntry>>>();
synchronized (fStorage) { synchronized (fStorage) {
Set<Entry<String, Map<String, List<ICLanguageSettingEntry>>>> entrySetLang = fStorage.entrySet(); Set<Entry<String, Map<String, List<ICLanguageSettingEntry>>>> entrySetLang = fStorage.entrySet();
for (Entry<String, Map<String, List<ICLanguageSettingEntry>>> entryLang : entrySetLang) { for (Entry<String, Map<String, List<ICLanguageSettingEntry>>> entryLang : entrySetLang) {
String langId = entryLang.getKey(); String langId = entryLang.getKey();
Map<String, List<ICLanguageSettingEntry>> mapRc = entryLang.getValue(); Map<String, List<ICLanguageSettingEntry>> mapRc = entryLang.getValue();
Map<String, List<ICLanguageSettingEntry>> mapRcClone = new HashMap<>(); Map<String, List<ICLanguageSettingEntry>> mapRcClone = new HashMap<String, List<ICLanguageSettingEntry>>();
Set<Entry<String, List<ICLanguageSettingEntry>>> entrySetRc = mapRc.entrySet(); Set<Entry<String, List<ICLanguageSettingEntry>>> entrySetRc = mapRc.entrySet();
for (Entry<String, List<ICLanguageSettingEntry>> entryRc : entrySetRc) { for (Entry<String, List<ICLanguageSettingEntry>> entryRc : entrySetRc) {
String rcProjectPath = entryRc.getKey(); String rcProjectPath = entryRc.getKey();
@ -262,4 +262,5 @@ public class LanguageSettingsStorage implements Cloneable {
return false; return false;
return true; return true;
} }
} }

View file

@ -42,11 +42,9 @@ 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;
@ -54,15 +52,14 @@ 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 language settings providers * Implementation of {@link IScannerInfoProvider} backed by the list of
* of "default settings configuration" (see * language settings providers of "default settings configuration"
* {@link ICProjectDescription#getDefaultSettingConfiguration()}). * (see {@link ICProjectDescription#getDefaultSettingConfiguration()}).
* *
* @see IScannerInfo#getIncludePaths() * @see IScannerInfo#getIncludePaths()
* *
*/ */
public class LanguageSettingsScannerInfoProvider public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider, ILanguageSettingsChangeListener {
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();
@ -72,26 +69,20 @@ public class LanguageSettingsScannerInfoProvider
@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() ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
.getProjectDescription(project, false); if (prjDescription==null)
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( String msg = NLS.bind(SettingsModelMessages.getString("LanguageSettingsScannerInfoProvider.UnableToDetermineLanguage"), rc.toString()); //$NON-NLS-1$
"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;
@ -104,24 +95,24 @@ public class LanguageSettingsScannerInfoProvider
LinkedHashSet<ICLanguageSettingEntry> macroEntries = new LinkedHashSet<ICLanguageSettingEntry>(); LinkedHashSet<ICLanguageSettingEntry> macroEntries = new LinkedHashSet<ICLanguageSettingEntry>();
for (String langId : languageIds) { for (String langId : languageIds) {
List<ICLanguageSettingEntry> incSys = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> incSys = LanguageSettingsProvidersSerializer.getSystemSettingEntriesByKind(cfgDescription, rc, langId,
.getSystemSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_PATH); ICSettingEntry.INCLUDE_PATH);
includePathEntries.addAll(incSys); includePathEntries.addAll(incSys);
List<ICLanguageSettingEntry> incLocal = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> incLocal = LanguageSettingsProvidersSerializer.getLocalSettingEntriesByKind(cfgDescription, rc, langId,
.getLocalSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_PATH); ICSettingEntry.INCLUDE_PATH);
includePathLocalEntries.addAll(incLocal); includePathLocalEntries.addAll(incLocal);
List<ICLanguageSettingEntry> incFiles = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> incFiles = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId,
.getSettingEntriesByKind(config, rc, langId, ICSettingEntry.INCLUDE_FILE); ICSettingEntry.INCLUDE_FILE);
includeFileEntries.addAll(incFiles); includeFileEntries.addAll(incFiles);
List<ICLanguageSettingEntry> macroFiles = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> macroFiles = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId,
.getSettingEntriesByKind(config, rc, langId, ICSettingEntry.MACRO_FILE); ICSettingEntry.MACRO_FILE);
macroFileEntries.addAll(macroFiles); macroFileEntries.addAll(macroFiles);
List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer List<ICLanguageSettingEntry> macros = LanguageSettingsProvidersSerializer.getSettingEntriesByKind(cfgDescription, rc, langId,
.getSettingEntriesByKind(config, rc, langId, ICSettingEntry.MACRO); ICSettingEntry.MACRO);
macroEntries.addAll(macros); macroEntries.addAll(macros);
} }
@ -132,14 +123,13 @@ public class LanguageSettingsScannerInfoProvider
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, ExtendedScannerInfo extendedScannerInfo = new ExtendedScannerInfo(definedMacros, includePaths, macroFiles, includeFiles, includePathsLocal);
macroFiles, includeFiles, includePathsLocal);
extendedScannerInfo.setParserSettings(new ParserSettings2(project)); extendedScannerInfo.setParserSettings(new ParserSettings2(project));
return extendedScannerInfo; return extendedScannerInfo;
} }
@ -156,8 +146,8 @@ public class LanguageSettingsScannerInfoProvider
} }
/** /**
* Get build working directory for the provided configuration. Returns project location if none * Get build working directory for the provided configuration. Returns
* defined. * project location if none defined.
*/ */
private static IPath getBuildCWD(ICConfigurationDescription cfgDescription) { private static IPath getBuildCWD(ICConfigurationDescription cfgDescription) {
IPath buildCWD = cfgDescription.getBuildSetting().getBuilderCWD(); IPath buildCWD = cfgDescription.getBuildSetting().getBuilderCWD();
@ -190,14 +180,11 @@ public class LanguageSettingsScannerInfoProvider
} }
/** /**
* Resolve location to file system location in a configuration context. Resolving includes * Resolve location to file system location in a configuration context.
* replacing build/environment variables with values, making relative path absolute etc. * Resolving includes replacing build/environment variables with values, making relative path absolute etc.
* *
* @param location * @param location - location to resolve. If relative, it is taken to be rooted in build working directory.
* - location to resolve. If relative, it is taken to be rooted in build working * @param cfgDescription - the configuration context.
* 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) {
@ -238,8 +225,7 @@ public class LanguageSettingsScannerInfoProvider
/** /**
* 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 * being careful to preserve "../" segments and not let collapsing them which is not correct for symbolic links.
* 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)
@ -253,19 +239,16 @@ public class LanguageSettingsScannerInfoProvider
* 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 * @param entriesPath - language settings path entries.
* - language settings path entries. * @param cfgDescription - configuration description for resolving entries.
* @param cfgDescription
* - configuration description for resolving entries.
* @return array of the locations. * @return array of the locations.
*/ */
private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath, private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath, ICConfigurationDescription cfgDescription) {
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);
} }
@ -324,8 +307,7 @@ public class LanguageSettingsScannerInfoProvider
} }
if (listenersMap == null) { if (listenersMap == null) {
listenersMap = Collections listenersMap = Collections.synchronizedMap(new HashMap<IResource, List<IScannerInfoChangeListener>>());
.synchronizedMap(new HashMap<IResource, List<IScannerInfoChangeListener>>());
} }
IProject project = resource.getProject(); IProject project = resource.getProject();
@ -364,14 +346,12 @@ public class LanguageSettingsScannerInfoProvider
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 ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration();
.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 for (Entry<IResource, List<IScannerInfoChangeListener>> entry : listenersMap.entrySet()) {
.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,29 +41,20 @@ 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 * Wrapper class intended to provide backward compatibility with ScannerInfo supplied by {@link PathEntryManager}.
* supplied by {@link PathEntryManager}.
*/ */
public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettingsBaseProvider { public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettingsBaseProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
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;
@ -81,8 +72,7 @@ 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() return ((IMacroEntry)macro1).getMacroName().compareTo(((IMacroEntry)macro2).getMacroName());
.compareTo(((IMacroEntry) macro2).getMacroName());
} }
return 0; return 0;
} }
@ -92,20 +82,17 @@ 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 int typesMask = IPathEntry.CDT_INCLUDE | IPathEntry.CDT_MACRO | IPathEntry.CDT_INCLUDE_FILE | IPathEntry.CDT_MACRO_FILE | IPathEntry.CDT_LIBRARY;
| 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() IPathEntryContainer container = PathEntryManager.getDefault().getPathEntryContainer((IContainerEntry) storePathEntry, cproject);
.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) pathEntries = ((IPathEntryContainerExtension)container).getPathEntries(rc.getFullPath(), typesMask);
.getPathEntries(rc.getFullPath(), typesMask);
} else { } else {
pathEntries = container.getPathEntries(); pathEntries = container.getPathEntries();
} }
@ -137,12 +124,10 @@ public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettin
} }
} }
return LanguageSettingsSerializableStorage return LanguageSettingsSerializableStorage.getPooledList(new ArrayList<ICLanguageSettingEntry>(lsEntries));
.getPooledList(new ArrayList<ICLanguageSettingEntry>(lsEntries));
} }
private void collectPathEntry(LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap, IPath projectPath, private void collectPathEntry(LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap, IPath projectPath, IPathEntry pathEntry) {
IPathEntry pathEntry) {
switch (pathEntry.getEntryKind()) { switch (pathEntry.getEntryKind()) {
case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE:
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
@ -160,16 +145,14 @@ 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(), return CDataUtil.createCIncludePathEntry(includeEntry.getFullIncludePath().toOSString(), includeEntry.isSystemInclude() ? 0 : ICSettingEntry.LOCAL);
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(), return CDataUtil.createCIncludeFileEntry(includeFileEntry.getFullIncludeFilePath().toOSString(), 0);
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,9 +22,7 @@ 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.
@ -41,8 +39,7 @@ public class ReferencedProjectsLanguageSettingsProvider extends LanguageSettings
}; };
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
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,
@ -50,11 +47,6 @@ 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;
} }
@ -66,18 +58,14 @@ 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 ICConfigurationDescription[] refCfgDescriptions = CoreModelUtil.getReferencedConfigurationDescriptions(cfgDescription, false);
.getReferencedConfigurationDescriptions(cfgDescription, false);
for (ICConfigurationDescription refCfgDescription : refCfgDescriptions) { for (ICConfigurationDescription refCfgDescription : refCfgDescriptions) {
IBuildConfiguration refConfig = Adapters.adapt(refCfgDescription, IBuildConfiguration.class); List<ICLanguageSettingEntry> refEntries = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, rc, languageId, ICSettingEntry.ALL);
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, ICLanguageSettingEntry entry = CDataUtil.createEntry(refEntry, flags & ~ICSettingEntry.EXPORTED);
flags & ~ICSettingEntry.EXPORTED);
entries.add(entry); entries.add(entry);
} }
} }

View file

@ -28,29 +28,16 @@ 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 * Wrapper class intended to provide backward compatibility with ScannerInfoProvider defined by org.eclipse.cdt.core.ScannerInfoProvider extension point
* 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(IBuildConfiguration config, IResource rc, public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
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) {
@ -77,11 +64,9 @@ public class ScannerInfoExtensionLanguageSettingsProvider extends LanguageSettin
} }
/** /**
* Return ScannerInfoProvider defined in configuration metadata in * Return ScannerInfoProvider defined in configuration metadata in .cproject.
* .cproject.
* *
* @param cfgDescription * @param cfgDescription - configuration description.
* - 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) {
@ -95,9 +80,8 @@ 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", //$NON-NLS-1$ IConfigurationElement el = CExtensionUtil.getFirstConfigurationElement(ref, "cextension", false); //$NON-NLS-1$
false); cExtension = (AbstractCExtension)el.createExecutableExtension("run"); //$NON-NLS-1$
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

@ -1,38 +0,0 @@
/*******************************************************************************
* 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

@ -1,73 +0,0 @@
/*******************************************************************************
* 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,19 +35,17 @@ 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, private static final QualifiedName ACTIVE_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID, ACTIVE_CFG);
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, private static final QualifiedName SETTING_CFG_PROPERTY = new QualifiedName(CCorePlugin.PLUGIN_ID, SETTING_CFG);
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;
@ -155,8 +153,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
public CProjectDescription(IProject project, ICSettingsStorage storage, ICStorageElement element, public CProjectDescription(IProject project, ICSettingsStorage storage, ICStorageElement element, boolean loading, boolean isCreating) throws CoreException {
boolean loading, boolean isCreating) throws CoreException {
fProject = project; fProject = project;
fStorage = storage; fStorage = storage;
fRootStorageElement = element; fRootStorageElement = element;
@ -203,9 +200,9 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
} }
// doneInitializing(); // doneInitializing();
// fIsLoading = false; // fIsLoading = false;
} }
public boolean applyDatas(SettingsContext context) { public boolean applyDatas(SettingsContext context) {
@ -225,16 +222,18 @@ 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 fIsApplying => false * Called when the read-only project description has / is being set
* setModified (false) set the ICSettingsStorage to readonly * fIsApplying => false
* setModified (false)
* set the ICSettingsStorage to readonly
*/ */
public void doneApplying() { public void doneApplying() {
doneInitializing(); doneInitializing();
@ -260,8 +259,7 @@ 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 // FIXME How and why are we down casting to a CConfigurationDescriptionCache. Comments, please!
// CConfigurationDescriptionCache. Comments, please!
CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache) cfg; CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache) cfg;
cache.doneInitialization(); cache.doneInitialization();
} }
@ -287,8 +285,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
* @param el * @param el
* @param isCreating * @param isCreating
*/ */
public CProjectDescription(CProjectDescription base, boolean saving, ICSettingsStorage storage, public CProjectDescription(CProjectDescription base, boolean saving, ICSettingsStorage storage, ICStorageElement el, boolean isCreating) {
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;
@ -299,10 +296,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
fIsApplying = saving || base.fIsApplying; fIsApplying = saving || base.fIsApplying;
fIsCreating = isCreating; fIsCreating = isCreating;
fPrefs = new CProjectDescriptionPreferences(base.fPrefs, fPrefs = new CProjectDescriptionPreferences(base.fPrefs, (CProjectDescriptionPreferences)CProjectDescriptionManager.getInstance().getProjectDescriptionWorkspacePreferences(false), false);
(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 {
@ -314,9 +308,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
baseCache = (CConfigurationDescriptionCache) baseData; baseCache = (CConfigurationDescriptionCache) baseData;
baseData = baseCache.getConfigurationData(); baseData = baseCache.getConfigurationData();
} }
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache( CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache((ICConfigurationDescription) cfgDes, baseData, baseCache, cfgDes.getSpecSettings(), this, null);
(ICConfigurationDescription) cfgDes, baseData, baseCache,
cfgDes.getSpecSettings(), this, null);
configurationCreated(cache); configurationCreated(cache);
} else { } else {
CConfigurationData baseData = cfgDes.getConfigurationData(false); CConfigurationData baseData = cfgDes.getConfigurationData(false);
@ -329,17 +321,16 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
// Shallow cloning the base map // Shallow cloning the base map
Map<QualifiedName, Object> cloneMap = Collections Map<QualifiedName, Object> cloneMap = Collections.synchronizedMap(new HashMap<QualifiedName, Object>());
.synchronizedMap(new HashMap<QualifiedName, Object>()); synchronized(base.fPropertiesMap) {
synchronized (base.fPropertiesMap) {
cloneMap.putAll(base.fPropertiesMap); cloneMap.putAll(base.fPropertiesMap);
} }
fPropertiesMap = cloneMap; fPropertiesMap = cloneMap;
} }
/** /**
* Convert the current CConfigurationDescriptions to cached versions This occurs during the * Convert the current CConfigurationDescriptions to cached versions
* SetCProjectDescription Operation * This occurs during the 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()) {
@ -351,8 +342,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, CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(cfgDes, baseData, baseCache,
baseCache, cfgDes.getSpecSettings(), this, null); cfgDes.getSpecSettings(), this, null);
e.setValue(cache); e.setValue(cache);
} }
} }
@ -364,7 +355,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);
@ -409,6 +400,7 @@ 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();
@ -432,7 +424,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
@Override @Override
public void setActiveConfiguration(ICConfigurationDescription cfg) throws WriteAccessException { public void setActiveConfiguration(
ICConfigurationDescription cfg) throws WriteAccessException {
if (fIsReadOnly) if (fIsReadOnly)
throw ExceptionFactory.createIsReadOnlyException(); throw ExceptionFactory.createIsReadOnlyException();
if (cfg == null) if (cfg == null)
@ -455,14 +448,13 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
} }
@Override @Override
public ICStorageElement importStorage(String id, ICStorageElement el) public ICStorageElement importStorage(String id, ICStorageElement el) throws UnsupportedOperationException, CoreException {
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() {
@ -476,7 +468,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
@Override @Override
public String getId() { public String getId() {
// TODO: //TODO:
return null; return null;
} }
@ -497,7 +489,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
@ -525,27 +517,25 @@ 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, // fRootStorageElement = CProjectDescriptionManager.getInstance().createStorage(fProject, true, true, isReadOnly());
// 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) public ICConfigurationDescription createConfiguration(String buildSystemId, CConfigurationData data) throws CoreException {
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);
@ -553,8 +543,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
return cfg; return cfg;
} }
public CConfigurationDescription createConvertedConfiguration(String id, String name, ICStorageElement el) public CConfigurationDescription createConvertedConfiguration(String id, String name, ICStorageElement el) throws CoreException{
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);
@ -679,10 +668,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,22 +856,5 @@
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 for access to many * CCorePlugin is the life-cycle owner of the core plug-in, and starting point
* core APIs. * for access to many 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,7 +103,8 @@ 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 the supported limit. * Status code for core exception that is thrown if a pdom grew larger than
* the supported limit.
* *
* @since 5.2 * @since 5.2
*/ */
@ -275,7 +276,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the shared working copies currently registered for the default buffer factory. * Returns the shared working copies currently registered for the default
* buffer factory.
* *
* @since 5.1 * @since 5.1
*/ */
@ -380,21 +382,25 @@ 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 manager // bug 186755, when started after the platform has been started the job
// is no longer suspended. So we have to start a job at the very end to make // manager
// sure we don't trigger a concurrent plug-in activation from within the job. // is no longer suspended. So we have to start a job at the very end to
// 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 options with their * TODO: Add all options here Returns a table of all known configurable
* default values. These options allow to configure the behavior of the underlying components. * options with their default values. These options allow to configure the
* The client may safely use the result as a template that they can modify and then pass to * behavior of the underlying components. The client may safely use the
* 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 ID and their * Helper constants have been defined on CCorePlugin for each of the option
* possible constant values. * ID and their possible constant values.
* *
* Note: more options might be added in further releases. * Note: more options might be added in further releases.
* *
@ -409,8 +415,9 @@ public class CCorePlugin extends Plugin {
* - default: <platform default> * - default: <platform default>
* </pre> * </pre>
* *
* @return a mutable map containing the default settings of all known options (key type: * @return a mutable map containing the default settings of all known
* <code>String</code>; value type: <code>String</code>) * options (key type: <code>String</code>; value type:
* <code>String</code>)
* @see #setOptions * @see #setOptions
*/ */
public static HashMap<String, String> getDefaultOptions() { public static HashMap<String, String> getDefaultOptions() {
@ -439,10 +446,11 @@ 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 it may answer * <code>(String)CCorePlugin.getOptions().get(optionName)</code> Note that
* <code>null</code> if this option does not exist. * it may answer <code>null</code> if this option does not exist.
* <p> * <p>
* For a complete description of the configurable options, see <code>getDefaultOptions</code>. * For a complete description of the configurable options, see
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @param optionName * @param optionName
@ -463,14 +471,16 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the table of the current options. Initially, all options have their default values, * Returns the table of the current options. Initially, all options have
* and this method returns a table that includes all known options. * their default values, and this method returns a table that includes all
* known options.
* <p> * <p>
* For a complete description of the configurable options, see <code>getDefaultOptions</code>. * For a complete description of the configurable options, see
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @return table of current settings of all options (key type: <code>String</code>; value type: * @return table of current settings of all options (key type:
* <code>String</code>) * <code>String</code>; value type: <code>String</code>)
* @see CCorePlugin#getDefaultOptions * @see CCorePlugin#getDefaultOptions
*/ */
public static HashMap<String, String> getOptions() { public static HashMap<String, String> getOptions() {
@ -502,16 +512,18 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Sets the current table of options. All and only the options explicitly included in the given * Sets the current table of options. All and only the options explicitly
* table are remembered; all previous option settings are forgotten, including ones not * included in the given table are remembered; all previous option settings
* explicitly mentioned. * are forgotten, including ones not explicitly mentioned.
* <p> * <p>
* For a complete description of the configurable options, see <code>getDefaultOptions</code>. * For a complete description of the configurable options, see
* <code>getDefaultOptions</code>.
* </p> * </p>
* *
* @param newOptions * @param newOptions
* the new options (key type: <code>String</code>; value type: <code>String</code>), * the new options (key type: <code>String</code>; value type:
* or <code>null</code> to reset all options to their default values * <code>String</code>), or <code>null</code> to reset all
* 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) {
@ -538,22 +550,24 @@ 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 console class is instance * {@code org.eclipse.cdt.core.CBuildConsole} extension point. If the
* of {@link ICConsole} it is initialized with context id, name and icon to be shown in the list * console class is instance of {@link ICConsole} it is initialized with
* of consoles in the Console view. * context id, name and icon to be shown in the list of consoles in the
* 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 define a distinct one for * - context menu id in the Console view. A caller needs to
* own use. * define a distinct one for own use.
* @param name * @param name
* - name of console to appear in the list of consoles in context menu in the Console * - name of console to appear in the list of consoles in context
* view. * menu in the Console view.
* @param iconUrl * @param iconUrl
* - a {@link URL} of the icon for the context menu of the Console view. The url is * - a {@link URL} of the icon for the context menu of the
* expected to point to an image in eclipse OSGi bundle. Here is an example how to * Console view. The url is expected to point to an image in
* retrieve URL: <br/> * eclipse OSGi bundle. Here is an example how to retrieve URL:
* <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>
@ -590,11 +604,13 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Create CDT console adapter. The adapter serves as a bridge between core plugin and UI console * Create CDT console adapter. The adapter serves as a bridge between core
* API in a way that a user can create a UI console from plugins having no dependencies to UI. * plugin and UI console API in a way that a user can create a UI console
* from plugins having no dependencies to UI.
* *
* @param id * @param id
* - id of the console specified in extension point to instantiate console adapter. * - id of the console specified in extension point to
* instantiate console adapter.
* @return CDT console adapter. * @return CDT console adapter.
*/ */
public IConsole getConsole(String id) { public IConsole getConsole(String id) {
@ -603,23 +619,25 @@ 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 and initialized * {@code org.eclipse.cdt.internal.ui.buildconsole.CBuildConsole} is created
* with the parameters. * and initialized with the parameters.
* *
* @param contextId * @param contextId
* - context menu id in the Console view. A caller needs to define a distinct one for * - context menu id in the Console view. A caller needs to
* own use. * define a distinct one for own use.
* @param name * @param name
* - name of console to appear in the list of consoles in context menu in the Console * - name of console to appear in the list of consoles in context
* view. * menu in the Console view.
* @param iconUrl * @param iconUrl
* - a {@link URL} of the icon for the context menu of the Console view. The url is * - a {@link URL} of the icon for the context menu of the
* expected to point to an image in eclipse OSGi bundle. Here is an example how to * Console view. The url is expected to point to an image in
* retrieve URL: <br/> * eclipse OSGi bundle. Here is an example how to retrieve URL:
* <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 image is used. See * {@code iconUrl} can be <b>null</b>, in that case the default
* 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.
@ -639,7 +657,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated Use {@link #getDefaultBinaryParserExtensions(IProject)} instead. * @deprecated Use {@link #getDefaultBinaryParserExtensions(IProject)}
* instead.
*/ */
@Deprecated @Deprecated
public ICExtensionReference[] getBinaryParserExtensions(IProject project) throws CoreException { public ICExtensionReference[] getBinaryParserExtensions(IProject project) throws CoreException {
@ -660,7 +679,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the binary parser extensions for the default settings configuration. * Returns the binary parser extensions for the default settings
* configuration.
* *
* @since 5.2 * @since 5.2
*/ */
@ -774,14 +794,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, allowing you to store * ICConfigurationDescriptions, which have similar API to ICDescriptor,
* settings and configure extensions at the Configuration level rather than at the project * allowing you to store settings and configure extensions at the
* level. * Configuration level rather than at the project level.
* *
* @param project * @param project
* @param create * @param create
* @return ICDescriptor or <b>null</b> if <b>create</b> is <b>false</b> and no .cdtproject file * @return ICDescriptor or <b>null</b> if <b>create</b> is <b>false</b> and
* exists on disk. * no .cdtproject file exists on disk.
* @throws CoreException * @throws CoreException
* @deprecated * @deprecated
*/ */
@ -803,13 +823,15 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated Settings should be set per ICConfigurationDescription rather than global to the * @deprecated Settings should be set per ICConfigurationDescription rather
* project. Please use {@link #getProjectDescription(IProject, boolean)} to fetch * than global to the project. Please use
* {@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 array of * {@link ICProjectDescription#getConfigurations()} to get an
* ICConfigurationDescriptions, which have similar API to ICDescriptor, allowing you * array of ICConfigurationDescriptions, which have similar API
* to store settings and configure extensions at the Configuration level rather than * to ICDescriptor, allowing you to store settings and configure
* at the project level. * extensions at the Configuration level rather than at the
* project level.
*/ */
@Deprecated @Deprecated
public ICDescriptorManager getCDescriptorManager() { public ICDescriptorManager getCDescriptorManager() {
@ -932,8 +954,9 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Method convertProjectFromCtoCC converts a C Project to a C++ Project The newProject MUST, not * Method convertProjectFromCtoCC converts a C Project to a C++ Project The
* be null, already have a C Nature && must NOT already have a C++ Nature * newProject MUST, not be null, already have a C Nature && must NOT already
* have a C++ Nature
* *
* @param projectHandle * @param projectHandle
* @param monitor * @param monitor
@ -949,8 +972,9 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Method to convert a project to a C nature All checks should have been done externally (as in * Method to convert a project to a C nature All checks should have been
* the Conversion Wizards). This method blindly does the conversion. * done externally (as in the Conversion Wizards). This method blindly does
* the conversion.
*/ */
public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID) public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID)
throws CoreException { throws CoreException {
@ -1033,7 +1057,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated since CDT 6.1. Use {@link ErrorParserManager#getErrorParserAvailableIds()} * @deprecated since CDT 6.1. Use
* {@link ErrorParserManager#getErrorParserAvailableIds()}
* instead * instead
* @return array of error parsers ids * @return array of error parsers ids
*/ */
@ -1045,7 +1070,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated since CDT 6.1. Use {@link ErrorParserManager#getErrorParserCopy(String)} instead * @deprecated since CDT 6.1. Use
* {@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
@ -1097,8 +1123,9 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Clears cached scanner info provider for the given project so that the next call to * Clears cached scanner info provider for the given project so that the
* {@link #getScannerInfoProvider(IProject)} would return an up to date scanner info provider. * next call to {@link #getScannerInfoProvider(IProject)} would return an up
* 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.
*/ */
@ -1114,8 +1141,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Find {@link IScannerInfoProvider} registered as extension via extension point * Find {@link IScannerInfoProvider} registered as extension via extension
* org.eclipse.cdt.core.ScannerInfoProvider2. * point 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;
@ -1155,11 +1182,13 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the content type for a filename. The method respects project specific content type * Returns the content type for a filename. The method respects project
* definitions. The lookup prefers case- sensitive matches over the others. * specific content type definitions. The lookup prefers case- sensitive
* matches over the others.
* *
* @param project * @param project
* a project with possible project specific settings. Can be <code>null</code> * a project with possible project specific settings. Can be
* <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>
@ -1189,7 +1218,8 @@ 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 ".options" file * Configure the plug-in with respect to option settings defined in
* ".options" file
*/ */
public void configurePluginDebugOptions() { public void configurePluginDebugOptions() {
if (CCorePlugin.getDefault().isDebugging()) { if (CCorePlugin.getDefault().isDebugging()) {
@ -1227,7 +1257,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* @deprecated use {@link ITranslationUnit} or {@link ILanguage} to construct ASTs, instead. * @deprecated use {@link ITranslationUnit} or {@link ILanguage} to
* construct ASTs, instead.
*/ */
@Deprecated @Deprecated
public org.eclipse.cdt.core.dom.CDOM getDOM() { public org.eclipse.cdt.core.dom.CDOM getDOM() {
@ -1257,7 +1288,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Equivalent to <code>createProjectDescription(IProject, boolean, false)</code>. * Equivalent to
* <code>createProjectDescription(IProject, boolean, false)</code>.
* *
* @see #createProjectDescription(IProject, boolean, boolean) * @see #createProjectDescription(IProject, boolean, boolean)
*/ */
@ -1272,19 +1304,23 @@ 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 description from the * if true the method first tries to load and return the project
* settings file (.cproject), if false, the stored settings are ignored and the new * description from the settings file (.cproject), if false, the
* (empty) project description is created * stored settings are ignored and the new (empty) project
* description is created
* @param creating * @param creating
* if true the created project description will be contain the true * if true the created project description will be contain the
* "isCdtProjectCreating" state. <br> * true "isCdtProjectCreating" state. <br>
* NOTE: in case the project already contains the project description AND its * NOTE: in case the project already contains the project
* "isCdtProjectCreating" is false the resulting description will be created with the * description AND its "isCdtProjectCreating" is false the
* false "isCdtProjectCreating" state. * resulting description will be created with the false
* "isCdtProjectCreating" state.
* *
* <br> * <br>
* NOTE: changes made to the returned project description will not be applied until * NOTE: changes made to the returned project description will
* the {@link #setProjectDescription(IProject, ICProjectDescription)} is called. * not be applied until the
* {@link #setProjectDescription(IProject, ICProjectDescription)}
* is called.
* @return {@link ICProjectDescription} * @return {@link ICProjectDescription}
* @throws CoreException * @throws CoreException
*/ */
@ -1294,17 +1330,20 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the project description associated with this project or null if the project does not * Returns the project description associated with this project or null if
* contain the CDT data associated with it. * the project does not contain the CDT data associated with it.
* *
* This is a convenience method fully equivalent to getProjectDescription(project, true) see * This is a convenience method fully equivalent to
* 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 project does not contain * @return a writable copy of the ICProjectDescription or null if the
* the CDT data associated with it. <br> * project does not contain the CDT data associated with it. <br>
* Note: changes to the project description will not be reflected/used by the core until * Note: changes to the project description will not be
* the {@link #setProjectDescription(IProject, ICProjectDescription)} is called. * reflected/used by the core until the
* {@link #setProjectDescription(IProject, ICProjectDescription)} is
* called.
* *
* @see #getProjectDescription(IProject, boolean) * @see #getProjectDescription(IProject, boolean)
*/ */
@ -1313,8 +1352,8 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Called to save/apply the project description. The method should be called to apply changes * Called to save/apply the project description. The method should be called
* made to the project description returned by the * to apply changes 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)}
* *
@ -1335,37 +1374,40 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the project description associated with this project or null if the project does not * Returns the project description associated with this project or null if
* contain the CDT data associated with it. * the project does not 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 the cached read-only * if true, the writable description copy is returned. If false
* description is returned. * the cached read-only description is returned.
* *
* <br> * <br>
* CDT core maintains the cached project description settings. If only read access is * CDT core maintains the cached project description settings. If
* needed to description, then the read-only project description should be obtained. * only read access is needed to description, then the read-only
* This description always operates with cached data and thus it is better to use it * project description should be obtained. This description
* for performance reasons. All set* calls to the read-only description result in the * always operates with cached data and thus it is better to use
* {@link WriteAccessException}. * it for performance reasons. All set* calls to the read-only
* description result in the {@link WriteAccessException}.
* *
* When the writable description is requested, the description copy is created. * When the writable description is requested, the description
* Changes to this description will not be reflected/used by the core and the Build * copy is created. Changes to this description will not be
* System until the {@link #setProjectDescription(IProject, ICProjectDescription)} is * reflected/used by the core and the Build System until the
* called. * {@link #setProjectDescription(IProject, ICProjectDescription)}
* is called.
* *
* Each getProjectDescription(project, true) returns a new copy of the project * Each getProjectDescription(project, true) returns a new copy
* description. * of the project description.
* *
* The writable description uses the cached data until the first set call after that * The writable description uses the cached data until the first
* the description communicates directly to the Build System i.e. the implementer of * set call after that the description communicates directly to
* the org.eclipse.cdt.core.CConfigurationDataProvider extension This ensures the * the Build System i.e. the implementer of the
* Core<->Build System settings integrity. * org.eclipse.cdt.core.CConfigurationDataProvider extension This
* ensures the Core<->Build System settings integrity.
* *
* @return {@link ICProjectDescription} or null if the project does not contain the CDT data * @return {@link ICProjectDescription} or null if the project does not
* associated with it. * contain the CDT data 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);
@ -1375,7 +1417,8 @@ 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 updated * if <code>null</code>, all projects within the workspace are
* updated
* @param monitor * @param monitor
* @throws CoreException * @throws CoreException
*/ */
@ -1414,7 +1457,8 @@ public class CCorePlugin extends Plugin {
// NON-API // NON-API
/** /**
* @noreference This constructor is not intended to be referenced by clients. * @noreference This constructor is not intended to be referenced by
* clients.
*/ */
public CCorePlugin() { public CCorePlugin() {
super(); super();
@ -1432,8 +1476,9 @@ 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 {@link IStatus#INFO}, * - desired severity of the message in the log, one of
* {@link IStatus#WARNING} or {@link IStatus#ERROR} * {@link IStatus#INFO}, {@link IStatus#WARNING} or
* {@link IStatus#ERROR}
* @param msg * @param msg
* - message * - message
* *
@ -1448,8 +1493,9 @@ 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 {@link IStatus#INFO}, * - desired severity of the message in the log, one of
* {@link IStatus#WARNING} or {@link IStatus#ERROR} * {@link IStatus#INFO}, {@link IStatus#WARNING} or
* {@link IStatus#ERROR}
* @param msg * @param msg
* - message * - message
* *
@ -1515,8 +1561,9 @@ public class CCorePlugin extends Plugin {
} }
/** /**
* Returns the preference controlling whether source roots are shown at the top of projects or * Returns the preference controlling whether source roots are shown at the
* embedded within the resource tree of projects when they are not top level folders. * top of projects or embedded within the resource tree of projects when
* they are not top level folders.
* *
* @return boolean preference value * @return boolean preference value
* @since 5.2 * @since 5.2

View file

@ -79,4 +79,287 @@ 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.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=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,5 @@
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,12 +21,10 @@ 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;
@ -71,7 +69,8 @@ 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 settings providers. * This tab presents language settings entries categorized by language
* 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.
@ -134,23 +133,17 @@ 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 } else if (provider instanceof ILanguageSettingsBroadcastingProvider && (page.isForFile() || page.isForFolder())) {
&& (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 List<ICLanguageSettingEntry> entriesParent = provider.getSettingEntries(null, null, currentLanguageId);
.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 List<ILanguageSettingsProvider> initialProviders = initialProvidersMap.get(cfgDescription.getId());
.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;
} }
@ -201,7 +194,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;
@ -232,7 +225,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
@ -249,7 +242,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();
} }
/** /**
@ -276,7 +269,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
} }
if (itemData instanceof ILanguageSettingsProvider) { if (itemData instanceof ILanguageSettingsProvider) {
provider = (ILanguageSettingsProvider) itemData; provider = (ILanguageSettingsProvider)itemData;
} }
} }
@ -294,7 +287,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;
} }
} }
@ -309,28 +302,19 @@ 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 List<ICLanguageSettingEntry> entries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, rc, currentLanguageId);
.getSettingEntriesUpResourceTree(provider, config, rc, currentLanguageId);
return entries; return entries;
} }
/** /**
* Shortcut for getting setting entries for current context without checking the parent * Shortcut for getting setting entries for current context without checking the parent resource.
* 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) {
IResource rc = getResource();
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(cfgDescription, rc, currentLanguageId); IResource rc = getResource();
if (entries == null) { return provider.getSettingEntries(cfgDescription, rc, currentLanguageId);
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class);
entries = provider.getSettingEntries(config, rc, currentLanguageId);
}
return entries;
} }
/** /**
@ -342,8 +326,7 @@ 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) List<ILanguageSettingsProvider> initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders();
initialProvidersMap.put(cfgId, initialProviders); initialProvidersMap.put(cfgId, initialProviders);
} }
} }
@ -429,7 +412,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);
} }
}); });
@ -440,7 +423,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;
@ -460,8 +443,7 @@ 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, builtInCheckBox = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1, GridData.FILL_HORIZONTAL);
GridData.FILL_HORIZONTAL);
builtInCheckBox.addSelectionListener(new SelectionAdapter() { builtInCheckBox.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
@ -480,7 +462,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;
@ -602,7 +584,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);
@ -612,14 +594,12 @@ 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, status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID, Messages.LanguageSettingsEntriesTab_Entries_Not_Editable);
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, status = new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, Messages.LanguageSettingsEntriesTab_Cannot_Determine_Languages);
Messages.LanguageSettingsEntriesTab_Cannot_Determine_Languages);
} }
} }
fStatusLine.setErrorStatus(status); fStatusLine.setErrorStatus(status);
@ -658,9 +638,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
/** /**
* That method returns exact position of an element in the list. Note that * That method returns exact position of an element in the list.
* {@link List#indexOf(Object)} returns position of the first element equals to the given one, * Note that {@link List#indexOf(Object)} returns position of the first element
* not exact element. * equals to the given one, not exact element.
* *
* @param entries * @param entries
* @param entry * @param entry
@ -684,7 +664,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;
} }
@ -701,12 +681,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;
} }
} }
@ -744,7 +724,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);
@ -757,34 +737,27 @@ 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 List<ICLanguageSettingEntry> parentEntries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, parent, currentLanguageId);
.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(config, rc, currentLanguageId, ((ILanguageSettingsEditableProvider)provider).setSettingEntries(cfgDescription, rc, currentLanguageId, entries);
entries);
} }
} }
/** /**
* Get list of setting entries shown to user. If current resource has no entries assigned the * Get list of setting entries shown to user. If current resource has no entries assigned the parent
* parent resource is inspected. * resource is inspected.
*/ */
private List<ICLanguageSettingEntry> getEntriesShownToUser(ILanguageSettingsProvider provider) { private List<ICLanguageSettingEntry> getEntriesShownToUser(ILanguageSettingsProvider provider) {
IResource rc = getResource();
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource();
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);
} }
@ -799,12 +772,11 @@ 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(), LanguageSettingEntryDialog addDialog = new LanguageSettingEntryDialog(usercomp.getShell(), cfgDescription, selectedEntry, true);
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);
} }
} }
@ -812,27 +784,25 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
/** /**
* Return working copy of the provider to edit in current session. If the supplied provider is * Return working copy of the provider to edit in current session. If the supplied provider is already
* already the working copy return it. If not, create a copy to be edited. * 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>( List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders());
((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) ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
.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;
@ -841,16 +811,14 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Call dialog to edit settings entry. * Call dialog to edit settings entry.
*/ */
private void performEdit(ILanguageSettingsProvider selectedProvider, private void performEdit(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
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(), LanguageSettingEntryDialog editDialog = new LanguageSettingEntryDialog(usercomp.getShell(), cfgDecsription, selectedEntry);
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);
} }
} }
@ -882,8 +850,7 @@ 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, private void replaceEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry oldEntry, ICLanguageSettingEntry newEntry) {
ICLanguageSettingEntry newEntry) {
if (provider != null && oldEntry != null && newEntry != null) { if (provider != null && oldEntry != null && newEntry != null) {
String providerId = provider.getId(); String providerId = provider.getId();
@ -911,10 +878,9 @@ 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, private void performDelete(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
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 {
@ -926,8 +892,7 @@ 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, private void exportEntry(ILanguageSettingsProvider provider, ICLanguageSettingEntry entry, boolean isExport) {
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) {
@ -937,7 +902,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);
} }
} }
@ -950,8 +915,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) {
@ -971,8 +936,7 @@ 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, private void performExport(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
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) {
@ -992,7 +956,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);
@ -1003,10 +967,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Move provider's entry up. * Move provider's entry up.
*/ */
private void performMoveUp(ILanguageSettingsProvider selectedProvider, private void performMoveUp(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
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);
} }
} }
@ -1014,10 +977,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Move provider's entry down. * Move provider's entry down.
*/ */
private void performMoveDown(ILanguageSettingsProvider selectedProvider, private void performMoveDown(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
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);
} }
} }
@ -1030,14 +992,12 @@ 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) List<ILanguageSettingsProvider> cfgProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.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) List<String> languageIds = ((LanguageSettingsBaseProvider)rawProvider).getLanguageScope();
.getLanguageScope();
if (languageIds != null && !languageIds.contains(currentLanguageId)) { if (languageIds != null && !languageIds.contains(currentLanguageId)) {
continue; continue;
} }
@ -1051,11 +1011,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
/** /**
* Re-reads and refreshes the entries tree. * Re-reads and refreshes the entries tree.
* *
* @param selectedProviderId * @param selectedProviderId - provider of the entry to select after update.
* - provider of the entry to select after update. If the entry is {@code null} the * If the entry is {@code null} the provider itself will be selected.
* provider itself will be selected. * @param selectedEntry - entry to select in the tree after update.
* @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();
@ -1073,8 +1031,7 @@ 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() if (((ILanguageSettingsProvider) expandedElements[i]).getId().equals(selectedProviderId)) {
.equals(selectedProviderId)) {
expandedElements[i] = provider; expandedElements[i] = provider;
break; break;
} }
@ -1105,8 +1062,7 @@ 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 // if no languages are defined keep null language as "Unspecified language"
// language"
languageIds.add(null); languageIds.add(null);
} }
@ -1116,8 +1072,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
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() String langName = language != null ? language.getName() : Messages.LanguageSettingsEntriesTab_UnspecifiedLanguage;
: 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);
@ -1215,33 +1170,26 @@ 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) List<ILanguageSettingsProvider> oldProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
.getLanguageSettingProviders(); List<ILanguageSettingsProvider> newProviders = new ArrayList<ILanguageSettingsProvider>(oldProviders.size());
List<ILanguageSettingsProvider> newProviders = new ArrayList<ILanguageSettingsProvider>(
oldProviders.size());
// clear entries for a given resource for all languages where // clear entries for a given resource for all languages where applicable
// applicable
providers: for (ILanguageSettingsProvider provider : oldProviders) { 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 providerCopy = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) provider, true);
.getProviderCopy((ILanguageSettingsEditableProvider) provider, true);
if (providerCopy == null) { if (providerCopy == null) {
continue providers; continue providers;
} }
} }
providerCopy.setSettingEntries(config, rc, langId, null); providerCopy.setSettingEntries(cfgDescription, rc, langId, null);
changed = true; changed = true;
} }
} }
@ -1260,15 +1208,12 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
@Override @Override
protected void performApply(ICResourceDescription srcRcDescription, protected void performApply(ICResourceDescription srcRcDescription, ICResourceDescription destRcDescription) {
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 if (sd instanceof ILanguageSettingsProvidersKeeper && dd instanceof ILanguageSettingsProvidersKeeper) {
&& dd instanceof ILanguageSettingsProvidersKeeper) { List<ILanguageSettingsProvider> newProviders = ((ILanguageSettingsProvidersKeeper) sd).getLanguageSettingProviders();
List<ILanguageSettingsProvider> newProviders = ((ILanguageSettingsProvidersKeeper) sd)
.getLanguageSettingProviders();
((ILanguageSettingsProvidersKeeper) dd).setLanguageSettingProviders(newProviders); ((ILanguageSettingsProvidersKeeper) dd).setLanguageSettingProviders(newProviders);
} }
} }
@ -1300,8 +1245,7 @@ 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, ILanguage language = LanguageManager.getInstance().getLanguageForFile((IFile)rc, null);
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,12 +12,10 @@ 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;
@ -36,18 +34,15 @@ 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 * Determines if a file or folder got customized build settings and if so decorates with the "wrench" overlay.
* "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() ICProjectDescriptionManager projectDescriptionManager = CoreModel.getDefault().getProjectDescriptionManager();
.getProjectDescriptionManager(); ICProjectDescription prjDescription = projectDescriptionManager.getProjectDescription(rc.getProject(), ICProjectDescriptionManager.GET_IF_LOADDED);
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) {
@ -59,23 +54,14 @@ public class CustomBuildSettingsDecorator implements ILightweightLabelDecorator
} }
private static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { private static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) {
IBuildConfiguration config = Adapters.adapt(cfgDescription, IBuildConfiguration.class); if (ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject()) && cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
if (config != null
&& ScannerDiscoveryLegacySupport
.isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject())
&& cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
IContainer parent = rc.getParent(); IContainer parent = rc.getParent();
List<String> languages = LanguageSettingsManager.getLanguages(rc, cfgDescription); List<String> languages = LanguageSettingsManager.getLanguages(rc, cfgDescription);
for (ILanguageSettingsProvider provider : ((ILanguageSettingsProvidersKeeper) cfgDescription) for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) {
.getLanguageSettingProviders()) {
for (String languageId : languages) { for (String languageId : languages) {
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId); List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
if (list == null) {
list = provider.getSettingEntries(config, rc, languageId);
}
if (list != null) { if (list != null) {
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(config, parent, List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(cfgDescription, parent, languageId);
languageId);
// != is OK here due as the equal lists will have the same reference in WeakHashSet // != is OK here due as the equal lists will have the same reference in WeakHashSet
if (list != listDefault) if (list != listDefault)
return true; return true;
@ -84,8 +70,7 @@ public class CustomBuildSettingsDecorator implements ILightweightLabelDecorator
} }
} }
ICResourceDescription rcDescription = cfgDescription ICResourceDescription rcDescription = cfgDescription.getResourceDescription(rc.getProjectRelativePath(), true);
.getResourceDescription(rc.getProjectRelativePath(), true);
return rcDescription != null; return rcDescription != null;
} }

View file

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

View file

@ -16,7 +16,6 @@ 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;
@ -25,8 +24,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 the * Qt installations. A Qt installation is uniquely identified by the path to
* qmake binary within the installation. * the 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.
@ -34,19 +33,17 @@ 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 * The provider identifies Qt installations by the absolute path to the qmake binary. The
* qmake binary. The include paths relevant to the installations are * include paths relevant to the installations are computed and persisted in {@link QtIncludePaths}.
* 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 * The build configuration stores the path to the qmake binary as an environment variable.
* environment variable.
*/ */
private static final String ENVVAR_QMAKE = "QMAKE"; //$NON-NLS-1$ private static final String ENVVAR_QMAKE = "QMAKE";
private static final String ELEMENT_QMAKE = "qmake"; //$NON-NLS-1$ private static final String ELEMENT_QMAKE = "qmake";
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
@ -71,19 +68,17 @@ 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 // Find and load all qmake child nodes. There will be one node for each Qt
// Qt // installation that has been used. Qt installations that are no longer valid
// installation that has been used. Qt installations that are no longer // are not loaded. This means they will be removed from the file the next time
// 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 && qtIncludePaths.isValid()) if (qtIncludePaths != null
&& qtIncludePaths.isValid())
qtInstallHeaders.put(qtIncludePaths.getQMakePath(), qtIncludePaths); qtInstallHeaders.put(qtIncludePaths.getQMakePath(), qtIncludePaths);
} }
} }
@ -91,17 +86,14 @@ 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 // NOTE: This creates its own XML structure where children of the provider node are qmake nodes.
// provider node are qmake nodes. // Within each qmake node is a list of include paths for that installation. Calling the
// Within each qmake node is a list of include paths for that // base #serializeEntries here would try to write this instance's (empty) list of settings
// installation. Calling the
// base #serializeEntries here would try to write this instance's
// (empty) list of settings
// to the file. // 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);
@ -109,24 +101,19 @@ public class QtIncludePathsProvider extends LanguageSettingsSerializableProvider
} }
/** /**
* The given build configuration's QMAKE environment variable is used to * The given build configuration's QMAKE environment variable is used to identify the appropriate
* identify the appropriate Qt installation. The language settings are then * Qt installation. The language settings are then either returned from the previously persisted
* either returned from the previously persisted data or loaded, serialized, * data or loaded, serialized, and returned.
* and returned.
*/ */
@Override @Override
public synchronized List<ICLanguageSettingEntry> getSettingEntries(IBuildConfiguration config, IResource rc, public synchronized List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription configDesc, IResource rc, String languageId) {
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 // The value of the build configuration's QMAKE environment variable is used to select the
// used to select the
// right version of qmake. // right version of qmake.
ICConfigurationDescription configDesc = config.getAdapter(ICConfigurationDescription.class); IEnvironmentVariable qmake_var = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariable(ENVVAR_QMAKE, configDesc, true);
IEnvironmentVariable qmake_var = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariable(ENVVAR_QMAKE,
configDesc, true);
if (qmake_var == null) if (qmake_var == null)
return null; return null;
@ -134,14 +121,13 @@ 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 // The path to qmake is used as the key into the in-memory cache of header paths.
// 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(config, null, languageId); return paths.getSettingEntries(configDesc, null, languageId);
} }
} }