1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 489563 - API change for Language Settings Providers.

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

Clean up formating of the code involved.

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

View file

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

View file

@ -1,4 +1,3 @@
#Thu Oct 08 20:38:59 EDT 2009
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
@ -85,262 +84,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
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_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_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
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter

View file

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

View file

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

View file

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

View file

@ -1,4 +1,3 @@
#Thu Apr 29 13:15:20 EDT 2010
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
@ -81,262 +80,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
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_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_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
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -59,288 +59,4 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.7
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
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -78,287 +78,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.8
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
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter

View file

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

View file

@ -10,32 +10,21 @@
*******************************************************************************/
package org.eclipse.cdt.core.language.settings.providers;
import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IResource;
/**
* This interface is to be implemented by providers which want to broadcast the changes in their setting entries
* with {@link ILanguageSettingsChangeEvent}.
* This interface is to be implemented by providers which want to broadcast the changes in their
* setting entries with {@link ILanguageSettingsChangeEvent}.
*
* @since 5.4
*/
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 used to calculate the delta and being kept in the last state object of configuration
* Return a copy of internal storage. This should be a deep copy/clone of the storage. 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.
*
* @return a copy of internal storage.
*/
public LanguageSettingsStorage copyStorage();
}

View file

@ -14,42 +14,67 @@ import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IResource;
/**
* This interface is used in UI to identify classes allowing user to modify settings externally
* contrary to some subclasses of {@link LanguageSettingsSerializableProvider} managing
* their settings themselves and not providing such option to the user.
* contrary to some subclasses of {@link LanguageSettingsSerializableProvider} managing their
* settings themselves and not providing such option to the user.
*
* @since 5.4
*/
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.
*
* @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.
* @param config
* configuration.
* @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.
* @since 6.0
*/
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries);
default public void setSettingEntries(IBuildConfiguration config, IResource rc, String languageId,
List<? extends ICLanguageSettingEntry> entries) {
// Call the old method by default
setSettingEntries(config.getAdapter(ICConfigurationDescription.class), rc, languageId, entries);
}
/**
* Shallow clone of the provider. "Shallow" is defined here as the exact copy except that
* the copy will have zero language settings entries.
* Sets language settings entries for the provider.
*
* @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.
* @throws CloneNotSupportedException in case {@link #clone()} throws the exception.
* @throws CloneNotSupportedException
* in case {@link #clone()} throws the exception.
*/
public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException;
@ -57,4 +82,5 @@ public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroa
* @see Object#clone()
*/
public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright (c) 2016 QNX Software Systems and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.runtime.IAdapterFactory;
public class BuildConfigAdapterFactory implements IAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adaptableObject instanceof IBuildConfiguration
&& adapterType.equals(ICConfigurationDescription.class)) {
IBuildConfiguration buildConfig = (IBuildConfiguration) adaptableObject;
ICProjectDescription prjDesc = CCorePlugin.getDefault()
.getProjectDescription(buildConfig.getProject());
if (prjDesc != null) {
return (T) prjDesc.getConfigurationById(buildConfig.getName());
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { ICConfigurationDescription.class };
}
}

View file

@ -0,0 +1,73 @@
/*******************************************************************************
* Copyright (c) 2016 QNX Software Systems and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResourceStatus;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.NullProgressMonitor;
public class CConfigurationAdapterFactory implements IAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adaptableObject instanceof ICConfigurationDescription
&& adapterType.equals(IBuildConfiguration.class)) {
ICConfigurationDescription cfgDesc = (ICConfigurationDescription) adaptableObject;
IProject project = cfgDesc.getProjectDescription().getProject();
if (project != null) {
String configId = cfgDesc.getId();
try {
IBuildConfiguration config = project.getBuildConfig(configId);
if (config == null) {
CCorePlugin.log(String.format("null config %s: %s", project.getName(), configId)); //$NON-NLS-1$
}
return (T) config;
} catch (CoreException e) {
if (!ResourcesPlugin.getWorkspace().isTreeLocked() &&
e.getStatus().getCode() == IResourceStatus.BUILD_CONFIGURATION_NOT_FOUND) {
try {
Set<String> configNames = new HashSet<>();
for (IBuildConfiguration config : project.getBuildConfigs()) {
configNames.add(config.getName());
}
configNames.add(configId);
IProjectDescription projectDesc = project.getDescription();
projectDesc.setBuildConfigs(
configNames.toArray(new String[configNames.size()]));
project.setDescription(projectDesc, new NullProgressMonitor());
return (T) project.getBuildConfig(configId);
} catch (CoreException e2) {
CCorePlugin.log(e2.getStatus());
}
} else {
CCorePlugin.log(e.getStatus());
}
}
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { IBuildConfiguration.class };
}
}

View file

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

View file

@ -856,5 +856,22 @@
ordering="first">
</filterMatcher>
</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>

View file

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

View file

@ -79,287 +79,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
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_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
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter

View file

@ -1,5 +1,4 @@
eclipse.preferences.version=1
formatter_profile=_CDT
formatter_settings_version=12
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;

View file

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

View file

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

View file

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

View file

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