From 41daeadbb86ef987a4d7c0743cbccc60a5c9bc8f Mon Sep 17 00:00:00 2001 From: dolby-oss Date: Wed, 27 Apr 2011 14:55:30 +0000 Subject: [PATCH] merge polyglot3 branch git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@4154 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- com.ibm.wala.cast.java.polyglot/.classpath | 16 +- .../.settings/org.eclipse.jdt.core.prefs | 538 +++++++++--------- .../META-INF/MANIFEST.MF | 69 +-- .../EclipseProjectSourceAnalysisEngine.java | 1 + .../translator/polyglot/AscriptionGoal.java | 7 +- .../cast/java/translator/polyglot/IRGoal.java | 12 +- .../polyglot/JavaIRTranslatorExtension.java | 6 +- .../translator/polyglot/ModuleSource.java | 60 ++ .../polyglot/PolyglotIdentityMapper.java | 2 +- .../polyglot/PolyglotJava2CAstTranslator.java | 280 +++++---- .../polyglot/PolyglotSourceLoaderImpl.java | 1 + .../PolyglotSourceModuleTranslator.java | 6 +- .../polyglot/PolyglotTypeDictionary.java | 14 +- 13 files changed, 537 insertions(+), 475 deletions(-) create mode 100644 com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java diff --git a/com.ibm.wala.cast.java.polyglot/.classpath b/com.ibm.wala.cast.java.polyglot/.classpath index cf6f27562..d154f35ab 100644 --- a/com.ibm.wala.cast.java.polyglot/.classpath +++ b/com.ibm.wala.cast.java.polyglot/.classpath @@ -1,9 +1,7 @@ - - - - - - - - - + + + + + + + diff --git a/com.ibm.wala.cast.java.polyglot/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.cast.java.polyglot/.settings/org.eclipse.jdt.core.prefs index 3e6680a6f..bdc44d798 100644 --- a/com.ibm.wala.cast.java.polyglot/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.cast.java.polyglot/.settings/org.eclipse.jdt.core.prefs @@ -1,275 +1,263 @@ -#Thu Feb 03 10:12:26 EST 2011 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 -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_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=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.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=2 -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_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_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=132 -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=space -org.eclipse.jdt.core.formatter.tabulation.size=2 -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_outer_expressions_when_nested=true +#Mon Apr 13 15:38:50 EDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 +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=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_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=1 +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=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=132 +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_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.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=132 +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=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/com.ibm.wala.cast.java.polyglot/META-INF/MANIFEST.MF b/com.ibm.wala.cast.java.polyglot/META-INF/MANIFEST.MF index 161522ccd..ccfe12074 100644 --- a/com.ibm.wala.cast.java.polyglot/META-INF/MANIFEST.MF +++ b/com.ibm.wala.cast.java.polyglot/META-INF/MANIFEST.MF @@ -5,14 +5,15 @@ Bundle-SymbolicName: com.ibm.wala.cast.java.polyglot Bundle-Version: 1.0.0 Bundle-Activator: com.ibm.wala.cast.java.polyglot.Activator Bundle-Vendor: IBM -Require-Bundle: com.ibm.wala.cast.java;bundle-version="1.0.0", - com.ibm.wala.cast;bundle-version="1.0.0", - com.ibm.wala.core;bundle-version="1.1.3", +Require-Bundle: com.ibm.wala.cast.java, + com.ibm.wala.cast, + com.ibm.wala.core, org.eclipse.core.runtime, - com.ibm.wala.shrike;bundle-version="1.1.3", - com.ibm.wala.ide;bundle-version="1.1.3", - org.eclipse.jdt.core;bundle-version="3.4.2", - org.eclipse.core.resources;bundle-version="3.4.1" + polyglot3, + com.ibm.wala.shrike, + org.eclipse.jdt.core, + org.eclipse.core.resources, + com.ibm.wala.ide Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-ActivationPolicy: lazy Export-Package: com.ibm.wala.cast.java.client.polyglot, @@ -32,56 +33,4 @@ Export-Package: com.ibm.wala.cast.java.client.polyglot, polyglot.frontend.goals, com.ibm.wala.cast.tree.impl, com.ibm.wala.cast.java.translator, - polyglot.frontend, - com.ibm.wala.cast.java.types", - java_cup;uses:="java_cup.runtime", - java_cup.runtime, - polyglot.ast; - uses:="polyglot.visit, - polyglot.types, - polyglot.util, - polyglot.frontend", - polyglot.ext.param;uses:="polyglot.frontend", - polyglot.ext.param.types;uses:="polyglot.util,polyglot.types,polyglot.frontend", - polyglot.frontend, - polyglot.frontend.goals; - uses:="polyglot.visit, - polyglot.types, - polyglot.ast, - polyglot.frontend", - polyglot.frontend.passes; - uses:="polyglot.visit, - polyglot.types, - polyglot.frontend.goals, - polyglot.frontend", - polyglot.lex;uses:="polyglot.util,java_cup.runtime", - polyglot.main;uses:="polyglot.util,polyglot.frontend", - polyglot.parse; - uses:="polyglot.util, - polyglot.types, - polyglot.ast, - java_cup.runtime, - polyglot.lex, - polyglot.frontend", - polyglot.qq; - uses:="polyglot.util, - polyglot.types, - polyglot.ast, - polyglot.parse, - java_cup.runtime, - polyglot.lex, - polyglot.frontend", - polyglot.types; - uses:="polyglot.util, - polyglot.main, - polyglot.types.reflect, - polyglot.frontend", - polyglot.types.reflect;uses:="polyglot.util,polyglot.types,polyglot.frontend", - polyglot.util;uses:="polyglot.types", - polyglot.util.typedump;uses:="polyglot.util,polyglot.types", - polyglot.visit; - uses:="polyglot.util, - polyglot.types, - polyglot.main, - polyglot.ast, - polyglot.frontend" + com.ibm.wala.cast.java.types" diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/client/polyglot/EclipseProjectSourceAnalysisEngine.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/client/polyglot/EclipseProjectSourceAnalysisEngine.java index f40398eed..309092ac0 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/client/polyglot/EclipseProjectSourceAnalysisEngine.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/client/polyglot/EclipseProjectSourceAnalysisEngine.java @@ -37,6 +37,7 @@ import com.ibm.wala.ipa.callgraph.impl.Util; import com.ibm.wala.ipa.cha.ClassHierarchy; import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.IClassHierarchy; +import com.ibm.wala.ssa.ConstantValue; import com.ibm.wala.ssa.SSAOptions; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.ClassLoaderReference; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java index 23d71ceeb..d49ba8a84 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java @@ -12,16 +12,11 @@ package com.ibm.wala.cast.java.translator.polyglot; import polyglot.ast.ArrayInit; import polyglot.ast.Expr; -import polyglot.frontend.CyclicDependencyException; -import polyglot.frontend.ExtensionInfo; import polyglot.frontend.Job; -import polyglot.frontend.Pass; import polyglot.frontend.Scheduler; -import polyglot.frontend.VisitorPass; -import polyglot.frontend.goals.AbstractGoal; +import polyglot.frontend.VisitorGoal; import polyglot.types.SemanticException; import polyglot.types.Type; -import polyglot.util.ErrorInfo; import polyglot.visit.AscriptionVisitor; /** diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java index bb4603958..265a902ca 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java @@ -8,24 +8,18 @@ * Contributors: * IBM Corporation - initial API and implementation *****************************************************************************/ -/* - * Created on Oct 6, 2005 - */ package com.ibm.wala.cast.java.translator.polyglot; -import polyglot.frontend.CyclicDependencyException; +import polyglot.frontend.ExtensionInfo; import polyglot.frontend.Job; -import polyglot.frontend.Pass; import polyglot.frontend.Scheduler; -import polyglot.frontend.goals.AbstractGoal; -import polyglot.frontend.goals.EndGoal; -import polyglot.util.ErrorInfo; +import polyglot.frontend.SourceGoal_c; import com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl; import com.ibm.wala.cast.java.translator.Java2IRTranslator; /** - * A kind of EndGoal that indicates that DOMO IR has been generated for the given compilation unit. + * A kind of EndGoal that indicates that WALA IR has been generated for the given compilation unit. * * @author rfuhrer */ diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java index b4b6e4cd2..3ade654f0 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java @@ -13,9 +13,13 @@ */ package com.ibm.wala.cast.java.translator.polyglot; +import java.util.List; + +import polyglot.frontend.Goal; import polyglot.frontend.JLExtensionInfo; +import polyglot.frontend.JLScheduler; import polyglot.frontend.Job; -import polyglot.frontend.goals.Goal; +import polyglot.frontend.Scheduler; import com.ibm.wala.cast.tree.impl.CAstRewriterFactory; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java new file mode 100644 index 000000000..993d1f262 --- /dev/null +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) 2002 - 2006 IBM Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *****************************************************************************/ +/* + * Created on Oct 6, 2005 + */ +package com.ibm.wala.cast.java.translator.polyglot; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import com.ibm.wala.classLoader.SourceModule; + +import polyglot.frontend.FileSource; +import polyglot.frontend.Resource; + +/** + * A Polyglot Source whose input comes from an InputStream.
+ * Currently extends FileSource since that's all that the Polyglot Compiler class + * will accept. + * @author rfuhrer + */ +public class ModuleSource extends FileSource { + private final SourceModule module; + + SourceModule getModule() { + return module; + } + + public ModuleSource(final SourceModule module) throws IOException { + super(new Resource() { + public File file() { + return new File(module.getURL().getFile()); + } + + public InputStream getInputStream() throws IOException { + return module.getInputStream(); + } + + public String name() { + String fullPath = module.getURL().getFile(); + int idx= fullPath.lastIndexOf(File.separatorChar); + return (idx > 0) ? fullPath.substring(idx+1) : fullPath; + } + @Override + public String toString() { + return module.getName(); + } + }, true); + this.module = module; + } +} diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java index 893d24b56..bae3b46db 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java @@ -14,7 +14,7 @@ import polyglot.types.CodeInstance; import polyglot.types.ConstructorInstance; import polyglot.types.FieldInstance; import polyglot.types.InitializerInstance; -import polyglot.types.MemberInstance; +import polyglot.types.MemberDef; import polyglot.types.MethodInstance; import polyglot.types.PrimitiveType; import polyglot.types.ProcedureInstance; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJava2CAstTranslator.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJava2CAstTranslator.java index fd44bb8a7..9851f3a68 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJava2CAstTranslator.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJava2CAstTranslator.java @@ -62,6 +62,7 @@ import polyglot.ast.FieldDecl; import polyglot.ast.FloatLit; import polyglot.ast.For; import polyglot.ast.Formal; +import polyglot.ast.Id; import polyglot.ast.If; import polyglot.ast.Import; import polyglot.ast.Initializer; @@ -99,18 +100,20 @@ import polyglot.types.ArrayType; import polyglot.types.ClassType; import polyglot.types.CodeInstance; import polyglot.types.ConstructorInstance; +import polyglot.types.Context; import polyglot.types.FieldInstance; import polyglot.types.Flags; +import polyglot.types.InitializerDef; import polyglot.types.InitializerInstance; -import polyglot.types.InitializerInstance_c; -import polyglot.types.MemberInstance; +import polyglot.types.MemberDef; import polyglot.types.MethodInstance; -import polyglot.types.ParsedClassType; +import polyglot.types.ObjectType; import polyglot.types.ProcedureInstance; -import polyglot.types.ReferenceType; import polyglot.types.SemanticException; +import polyglot.types.StructType; import polyglot.types.Type; import polyglot.types.TypeSystem; +import polyglot.types.Types; import polyglot.util.Position; import com.ibm.wala.cast.ir.translator.AstTranslator.InternalCAstSymbol; @@ -290,8 +293,8 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { // and glue that code into the right place relative to the // constructor method body ("wherever that may turn out to be"). List/* */inits = mc.getInitializers(); - Block body = cd.body(); + if (hasSuperCall(body)) { // Split at call to super: // super(); @@ -314,21 +317,28 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { return walkNodes(body, mc); } else { // add explicit call to default super() - // TODO following superClass lookup of default ctor won't work if we - // process Object in source... - ClassType superClass = (ClassType) cd.constructorInstance().container().superType(); - ProcedureInstance defaultSuperCtor = findDefaultCtor(superClass); - CAstNode[] bodyNodes = new CAstNode[inits.size() + body.statements().size() + 1]; - CallSiteReference callSiteRef = CallSiteReference.make(0, fIdentityMapper.getMethodRef(defaultSuperCtor), - IInvokeInstruction.Dispatch.SPECIAL); + // RMF 4/17/2009- The following search for a superClass default ctor + // won't work if we process Object in source. In particular, the + // superClass might be null. In that case, simply omit the explicit + // super() call. + ClassType superClass = (ClassType) ((ObjectType) cd.constructorDef().asInstance().container()).superClass(); + CAstNode[] bodyNodes; + int idx= 0; + int bodyInitsSize= inits.size() + body.statements().size(); + if (superClass != null) { + ProcedureInstance defaultSuperCtor = findDefaultCtor(superClass); + CallSiteReference callSiteRef = CallSiteReference.make(0, fIdentityMapper.getMethodRef(defaultSuperCtor), + IInvokeInstruction.Dispatch.SPECIAL); + CAstNode superCall = makeNode(mc, fFactory, cd, CAstNode.CALL, + makeNode(mc, fFactory, cd, CAstNode.SUPER), + fFactory.makeConstant(callSiteRef)); + bodyNodes = new CAstNode[bodyInitsSize + 1]; + bodyNodes[idx++] = superCall; + } else { // no super class, so no super call + bodyNodes = new CAstNode[bodyInitsSize]; + } + idx= insertInitializers(mc, bodyNodes, false, idx); - CAstNode superCall = makeNode(mc, fFactory, cd, CAstNode.CALL, makeNode(mc, fFactory, cd, CAstNode.SUPER), fFactory - .makeConstant(callSiteRef)); - - bodyNodes[0] = superCall; - insertInitializers(mc, bodyNodes, false, 1); - - int idx = inits.size() + 1; for (Iterator iter = body.statements().iterator(); iter.hasNext(); idx++) { Stmt s = (Stmt) iter.next(); bodyNodes[idx] = walkNodes(s, mc); @@ -352,13 +362,13 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { // Generate CAST node for the initializer (init()) // Type targetType = f.memberInstance().container(); // Type fieldType = f.type().type(); - FieldReference fieldRef = fIdentityMapper.getFieldRef(f.fieldInstance()); + FieldReference fieldRef = fIdentityMapper.getFieldRef(f.fieldDef().asInstance()); // We use null to indicate an OBJECT_REF to a static field, as the // FieldReference doesn't // hold enough info to determine this. In this case, (unlike field ref) // we don't have a // target expr to evaluate. - CAstNode thisNode = f.flags().isStatic() ? makeNode(ctorContext, fFactory, null, CAstNode.VOID) : makeNode(ctorContext, + CAstNode thisNode = f.flags().flags().isStatic() ? makeNode(ctorContext, fFactory, null, CAstNode.VOID) : makeNode(ctorContext, fFactory, f, CAstNode.THIS); CAstNode lhsNode = makeNode(ctorContext, fFactory, f, CAstNode.OBJECT_REF, thisNode, fFactory.makeConstant(fieldRef)); @@ -488,6 +498,13 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } } + private CAstNode processAssign(Assign a, WalkContext wc) { + Expr lhs= a.left(fNodeFactory).type(a.type()); // PORT1.7 An Assign no longer has a lhs Expr per se; but you can ask it to materialize one... + WalkContext lvc = new AssignmentContext(wc); + + return processAssign(a, walkNodes(lhs, lvc), a.operator(), a.right(), wc); + } + protected CAstOperator mapAssignOperator(Assign.Operator op) { if (op == Assign.ADD_ASSIGN) return CAstOperator.OP_ADD; @@ -574,7 +591,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private void handleThrowsFromCall(ProcedureInstance procedureInstance, Node callAstNode, WalkContext wc) { List throwTypes = procedureInstance.throwTypes(); for (Iterator iter = IteratorPlusOne.make(throwTypes.iterator(), fREType); iter.hasNext();) { - Type thrownType = (Type) iter.next(); + Type thrownType = iter.next(); Collection/* > */catchTargets = wc.getCatchTargets(thrownType); for (Iterator targetIter = catchTargets.iterator(); targetIter.hasNext();) { @@ -588,7 +605,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { public CAstNode visit(Call c, WalkContext wc) { MethodInstance methodInstance = c.methodInstance(); boolean isStatic = methodInstance.flags().isStatic(); - ReferenceType methodOwner = methodInstance.container(); + StructType methodOwner = methodInstance.container(); if (methodOwner.isArray()) { List realOne = methodInstance.overrides(); @@ -879,17 +896,28 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { public CAstNode visit(ArrayAccess aa, WalkContext wc) { TypeReference eltTypeRef = fIdentityMapper.getTypeRef(aa.type()); + hookUpNPETargets(aa, wc); + + CAstNode n = makeNode(wc, fFactory, aa, CAstNode.ARRAY_REF, walkNodes(aa.array(), wc), fFactory.makeConstant(eltTypeRef), + walkNodes(aa.index(), wc)); + + wc.cfg().map(aa, n); + + return n; + } + + protected void hookUpNPETargets(Node n, WalkContext wc) { Collection excTargets = wc.getCatchTargets(fNPEType); if (!excTargets.isEmpty()) { // connect NPE exception edge to relevant catch targets // (presumably only one) for (Iterator iterator = excTargets.iterator(); iterator.hasNext();) { Pair catchPair = (Pair) iterator.next(); - wc.cfg().add(aa, catchPair.snd, fNPEType); + wc.cfg().add(n, catchPair.snd, fNPEType); } } else { // connect exception edge to exit - wc.cfg().add(aa, CAstControlFlowMap.EXCEPTION_TO_EXIT, fNPEType); + wc.cfg().add(n, CAstControlFlowMap.EXCEPTION_TO_EXIT, fNPEType); } CAstNode n = makeNode(wc, fFactory, aa, CAstNode.ARRAY_REF, walkNodes(aa.array(), wc), fFactory.makeConstant(eltTypeRef), @@ -903,16 +931,15 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { public CAstNode visit(Field f, WalkContext wc) { Receiver target = f.target(); Type targetType = target.type(); - // Type fieldType = f.type(); if (targetType.isArray()) { assert f.name().equals("length"); return makeNode(wc, fFactory, f, CAstNode.ARRAY_LENGTH, walkNodes(target, wc)); } - FieldReference fieldRef = fIdentityMapper.getFieldRef(f.fieldInstance()); - CAstNode targetNode = walkNodes(target, wc); FieldInstance fi = f.fieldInstance(); + FieldReference fieldRef = fIdentityMapper.getFieldRef(fi); + CAstNode targetNode = walkNodes(target, wc); if (fi.flags().isStatic()) { // JLS says: evaluate the target of the field ref and throw it away. @@ -961,7 +988,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public CAstNode visit(Local l, WalkContext wc) { - return makeNode(wc, fFactory, l, CAstNode.VAR, fFactory.makeConstant(l.name())); + return makeNode(wc, fFactory, l, CAstNode.VAR, fFactory.makeConstant(l.name().id().toString())); } public CAstNode visit(ClassBody cb, WalkContext wc) { @@ -986,10 +1013,12 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { public CAstNode visit(Branch b, WalkContext wc) { Node target = null; + Id labelNode = b.labelNode(); + String labelStr = labelNode != null ? labelNode.id().toString() : null; if (b.kind() == Branch.BREAK) { - target = wc.getBreakFor(b.label()); + target = wc.getBreakFor(labelStr); } else { - target = wc.getContinueFor(b.label()); + target = wc.getContinueFor(labelStr); } assert target != null; @@ -1028,7 +1057,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { Block body = c.body(); Formal f = c.formal(); - CAstNode excDecl = makeNode(wc, fFactory, c, CAstNode.CATCH, fFactory.makeConstant(f.name()), walkNodes(body, wc)); + CAstNode excDecl = makeNode(wc, fFactory, c, CAstNode.CATCH, fFactory.makeConstant(f.name().id().toString()), walkNodes(body, wc)); CAstNode localScope = makeNode(wc, fFactory, c, CAstNode.LOCAL_SCOPE, excDecl); wc.cfg().map(c, excDecl); @@ -1049,7 +1078,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { stmt = (Node) ((Block) stmt).statements().iterator().next(); } - wc.getLabelMap().put(stmt, l.label()); + wc.getLabelMap().put(stmt, l.labelNode().id().toString()); CAstNode result; if (!(l.statement() instanceof Empty)) { @@ -1069,7 +1098,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public CAstNode visit(LocalClassDecl lcd, WalkContext wc) { - fIdentityMapper.mapLocalAnonTypeToMethod(lcd.decl().type(), wc.getEnclosingMethod()); + fIdentityMapper.mapLocalAnonTypeToMethod(lcd.decl().classDef().asType(), wc.getEnclosingMethod()); CAstEntity classEntity = walkEntity(lcd.decl(), wc); @@ -1080,12 +1109,14 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } protected Node makeBreakTarget(Node loop) { - return fNodeFactory.Labeled(Position.COMPILER_GENERATED, "breakLabel" + loop.position().toString().replace('.', '_'), - fNodeFactory.Empty(Position.COMPILER_GENERATED)); + return fNodeFactory.Labeled(Position.COMPILER_GENERATED, + fNodeFactory.Id(Position.COMPILER_GENERATED, "breakLabel" + loop.position().toString().replace('.', '_')), + fNodeFactory.Empty(Position.COMPILER_GENERATED)); } protected Node makeContinueTarget(Node loop) { - return fNodeFactory.Labeled(Position.COMPILER_GENERATED, "continueLabel" + loop.position().toString().replace('.', '_'), + return fNodeFactory.Labeled(Position.COMPILER_GENERATED, + fNodeFactory.Id(Position.COMPILER_GENERATED, "continueLabel" + loop.position().toString().replace('.', '_')), fNodeFactory.Empty(Position.COMPILER_GENERATED)); } @@ -1242,7 +1273,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { // try/catch/[finally] } else { - TryCatchContext tc = new TryCatchContext(wc, t); + TryCatchContext tc = new TryCatchContext(wc, t, fTypeSystem.emptyContext()); CAstNode tryNode = walkNodes(tryBlock, tc); for (Iterator iter = catchBlocks.iterator(); iter.hasNext();) { @@ -1294,9 +1325,9 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { else defaultValue = CAstSymbol.NULL_DEFAULT_VALUE; - boolean isFinal = ld.flags().isFinal(); + boolean isFinal = ld.flags().flags().isFinal(); - return makeNode(wc, fFactory, ld, CAstNode.DECL_STMT, fFactory.makeConstant(new CAstSymbolImpl(ld.name(), isFinal, + return makeNode(wc, fFactory, ld, CAstNode.DECL_STMT, fFactory.makeConstant(new CAstSymbolImpl(ld.name().id().toString(), isFinal, defaultValue)), initNode); } @@ -1333,7 +1364,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public CAstNode visit(Formal f, WalkContext wc) { - return makeNode(wc, fFactory, f, CAstNode.VAR, fFactory.makeConstant(f.name())); + return makeNode(wc, fFactory, f, CAstNode.VAR, fFactory.makeConstant(f.name().id().toString())); } } @@ -1343,7 +1374,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private final Collection fTopLevelDecls; public CompilationUnitEntity(SourceFile file, List topLevelDecls) { - fName = (file.package_() == null) ? "" : file.package_().package_().fullName().replace('.', '/'); + fName = (file.package_() == null) ? "" : file.package_().package_().get().fullName().toString().replace('.', '/'); fTopLevelDecls = topLevelDecls; } @@ -1415,12 +1446,12 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } } - public final class PolyglotJavaType implements JavaType { - private final CAstTypeDictionary fDict; + public class PolyglotJavaType implements JavaType { + protected final CAstTypeDictionary fDict; - private final TypeSystem fSystem; + protected final TypeSystem fSystem; - private final ClassType fType; + protected final ClassType fType; private Collection fSuperTypes = null; @@ -1432,8 +1463,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public String getName() { - // TODO Will the IdentityMapper do the right thing for anonymous - // classes? + // TODO Will the IdentityMapper do the right thing for anonymous classes? // If so, we can delete most of the following logic... if (fType.isLocal() || fType.isAnonymous()) { return fIdentityMapper.anonLocalTypeToTypeID(fType); @@ -1441,7 +1471,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { return fIdentityMapper.getTypeRef(fType).getName().toString(); } - public Collection getSupertypes() { + public Collection getSupertypes() { if (fSuperTypes == null) { buildSuperTypes(); } @@ -1452,20 +1482,27 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { // TODO this is a source entity, but it might actually be the root type // (Object), so assume # intfs + 1 Type superType; - try { - superType = (fType.superType() == null) ? fSystem.typeForName("java.lang.Object") : fType.superType(); - } catch (SemanticException e) { - Assertions.UNREACHABLE("Can't find java.lang.Object???"); - return; + if (fType.superClass() == null && fType != fSystem.Object()) { + superType = fSystem.Object(); // fSystem.Object() MUST be the root of the class hierarchy + } else { + superType = fType.superClass(); } int N = fType.interfaces().size() + 1; fSuperTypes = new ArrayList(N); - // Following assumes that noone can call getSupertypes() before we have + // Following assumes that no one can call getSupertypes() before we have // created CAstType's for every type in the program being analyzed. - fSuperTypes.add(fDict.getCAstTypeFor(superType)); - for (Iterator iter = fType.interfaces().iterator(); iter.hasNext();) { + if (superType != null) { + fSuperTypes.add(fDict.getCAstTypeFor(superType)); + } + for (Iterator iter = fType.interfaces().iterator(); iter.hasNext(); ) { Type t = (Type) iter.next(); + if (t instanceof ClassType) { + ClassType classType = (ClassType) t; + if (classType == fSystem.Object()) { + continue; // Skip fSystem.Object() as a super-interface; it really MUST be a class as far as WALA is concerned + } + } fSuperTypes.add(fDict.getCAstTypeFor(t)); } } @@ -1475,6 +1512,9 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public boolean isInterface() { + if (fType == fSystem.Object()) { + return false; // fSystem.Object() MUST be a class, as far as WALA is concerned + } return fType.flags().isInterface(); } } @@ -1484,8 +1524,8 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { public CodeBodyEntity(Map entities) { fEntities = new LinkedHashMap>(); - for (Iterator keys = entities.keySet().iterator(); keys.hasNext();) { - CAstNode key = (CAstNode) keys.next(); + for (Iterator keys = entities.keySet().iterator(); keys.hasNext();) { + CAstNode key = keys.next(); fEntities.put(key, Collections.singleton(entities.get(key))); } } @@ -1520,7 +1560,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private final CAstSourcePositionMap.Position sourcePosition; private ClassEntity(ClassContext context, List entities, ClassDecl cd, Position p) { - this(context, entities, cd.type(), cd.name(), p); + this(context, entities, cd.classDef().asType(), cd.name().id().toString(), p); } private ClassEntity(ClassContext context, List entities, ClassType ct, String name, Position p) { @@ -1597,12 +1637,20 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public Collection getQualifiers() { + if (fCT == fTypeSystem.Object()) { // pretend the root of the hierarchy is always a class + return mapFlagsToQualifiers(fCT.flags().clear(Flags.INTERFACE)); + } return mapFlagsToQualifiers(fCT.flags()); } public CAstType getType() { return new PolyglotJavaType(fCT, getTypeDict(), fTypeSystem); } + + @Override + public String toString() { + return fCT.fullName().toString(); + } } protected final class ProcedureEntity extends CodeBodyEntity implements JavaProcedureEntity { @@ -1618,7 +1666,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private final String[] argumentNames; - private ProcedureEntity(CAstNode pdast, TypeSystem system, CodeInstance pd, Type declaringType, String[] argumentNames, + public ProcedureEntity(CAstNode pdast, TypeSystem system, CodeInstance pd, Type declaringType, String[] argumentNames, Map entities, MethodContext mc) { super(entities); fPdast = pdast; @@ -1629,9 +1677,10 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { fMc = mc; } - private ProcedureEntity(CAstNode pdast, TypeSystem system, CodeInstance pd, String[] argumentNames, + public ProcedureEntity(CAstNode pdast, TypeSystem system, CodeInstance pd, String[] argumentNames, Map entities, MethodContext mc) { - this(pdast, system, pd, ((MemberInstance) pd).container(), argumentNames, entities, mc); + //PORT1.7 used to be this(pdast, system, pd, ((MemberInstance) pd).container(), argumentNames, entities, mc); + this(pdast, system, pd, ((MemberDef) pd.def()).container().get(), argumentNames, entities, mc); } private List formalTypes() { @@ -1671,8 +1720,26 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { return new CAstNode[0]; } + private Flags getFlags() { + // PORT1.7 + if (fPd instanceof ProcedureInstance) { + return ((MemberDef) fPd.def()).flags(); + } + return Flags.NONE; + } + + private boolean isStatic() { + // PORT1.7 + if (fPd instanceof ProcedureInstance) { + return ((MemberDef) fPd.def()).flags().isStatic(); + } else if (fPd instanceof InitializerInstance) { + return ((InitializerInstance) fPd).def().flags().isStatic(); + } + return false; + } + public int getArgumentCount() { - return fPd.flags().isStatic() ? formalTypes().size() : formalTypes().size() + 1; + return isStatic() ? formalTypes().size() : formalTypes().size() + 1; } public CAstNode getAST() { @@ -1696,7 +1763,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public Collection getQualifiers() { - return mapFlagsToQualifiers(fPd.flags()); + return mapFlagsToQualifiers(getFlags()); } public CAstType getType() { @@ -1710,7 +1777,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { (fPd instanceof MethodInstance) ? ((MethodInstance) fPd).returnType() : fSystem.Void()); } - public List getArgumentTypes() { + public List getArgumentTypes() { if (fParameterTypes == null) { final List formalTypes = formalTypes(); fParameterTypes = new ArrayList(formalTypes.size()); @@ -1727,12 +1794,12 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { return "?"; } - public Collection getSupertypes() { + public Collection getSupertypes() { Assertions.UNREACHABLE("CAstType.FunctionImpl#getSupertypes() called???"); return null; } - public Collection/* */getExceptionTypes() { + public Collection/* */ getExceptionTypes() { if (fExceptionTypes == null) { fExceptionTypes = new LinkedHashSet(); @@ -1769,7 +1836,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private FieldEntity(FieldDecl fd, WalkContext context) { super(); - fFI = fd.fieldInstance(); + fFI = fd.fieldDef().asInstance(); fContext = context; } @@ -1778,7 +1845,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } public String getName() { - return fFI.name(); + return fFI.name().toString(); } public String getSignature() { @@ -2070,7 +2137,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { fEntities.put(node, entity); } - public Map/* */getScopedEntities() { + public Map/* */ getScopedEntities() { return fEntities; } @@ -2105,12 +2172,15 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { private static class TryCatchContext extends DelegatingContext { @SuppressWarnings("unused") private final Try tryNode; + + private final Context context; Collection> fCatchNodes = new ArrayList>(); - TryCatchContext(WalkContext parent, Try tryNode) { + TryCatchContext(WalkContext parent, Try tryNode, final Context context) { super(parent); this.tryNode = tryNode; + this.context = context; for (Iterator catchIter = tryNode.catchBlocks().iterator(); catchIter.hasNext();) { Catch c = (Catch) catchIter.next(); @@ -2127,16 +2197,16 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { Collection> catchNodes = new ArrayList>(); for (Iterator> iter = fCatchNodes.iterator(); iter.hasNext();) { - Pair p = (Pair) iter.next(); - Type catchType = (Type) p.fst; + Pair p = iter.next(); + Type catchType = p.fst; // _must_ be caught - if (label.descendsFrom(catchType) || label.equals(catchType)) { + if (label.isSubtype(catchType, this.context) || label.typeEquals(catchType, this.context)) { catchNodes.add(p); return catchNodes; // _might_ get caught - } else if (catchType.descendsFrom(label)) { + } else if (catchType.isSubtype(label, this.context)) { catchNodes.add(p); continue; } @@ -2284,22 +2354,19 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } } - public PolyglotJava2CAstTranslator(ClassLoaderReference clr, NodeFactory nf, TypeSystem ts, PolyglotIdentityMapper identityMapper) { + public PolyglotJava2CAstTranslator(ClassLoaderReference clr, NodeFactory nf, TypeSystem ts, PolyglotIdentityMapper identityMapper, boolean replicateForDoLoops) { fClassLoaderRef = clr; fTypeSystem = ts; fNodeFactory = nf; fIdentityMapper = identityMapper; - try { - fNPEType = fTypeSystem.typeForName("java.lang.NullPointerException"); - fCCEType = fTypeSystem.typeForName("java.lang.ClassCastException"); - fREType = fTypeSystem.typeForName("java.lang.RuntimeException"); - fDivByZeroType = fTypeSystem.typeForName("java.lang.ArithmeticException"); - } catch (SemanticException e) { - Assertions.UNREACHABLE("Couldn't find Polyglot type for NPE/RE!"); - } + this.replicateForDoLoops = replicateForDoLoops; + fNPEType = fTypeSystem.NullPointerException(); + fCCEType = fTypeSystem.ClassCastException(); + fREType = fTypeSystem.RuntimeException(); + fDivByZeroType = fTypeSystem.ArithmeticException(); } - protected static class PolyglotSourcePosition extends AbstractSourcePosition { + public static class PolyglotSourcePosition extends AbstractSourcePosition { private final Position p; public PolyglotSourcePosition(Position p) { @@ -2513,13 +2580,13 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { protected void processClassMembers(Node n, ClassType classType, List members, DelegatingContext classContext, List memberEntities) { // Collect all initializer-related gorp - for (Iterator memberIter = members.iterator(); memberIter.hasNext();) { - ClassMember member = (ClassMember) memberIter.next(); + for (Iterator memberIter = members.iterator(); memberIter.hasNext();) { + ClassMember member = memberIter.next(); if (member instanceof Initializer) { Initializer initializer = (Initializer) member; - if (initializer.flags().isStatic()) + if (initializer.flags().flags().isStatic()) classContext.getStaticInitializers().add(initializer); else classContext.getInitializers().add(initializer); @@ -2527,7 +2594,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { FieldDecl fd = (FieldDecl) member; if (fd.init() != null) { - if (fd.flags().isStatic()) + if (fd.flags().flags().isStatic()) classContext.getStaticInitializers().add(fd); else classContext.getInitializers().add(fd); @@ -2536,8 +2603,8 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } // Now process - for (Iterator memberIter = members.iterator(); memberIter.hasNext();) { - ClassMember member = (ClassMember) memberIter.next(); + for (Iterator memberIter = members.iterator(); memberIter.hasNext();) { + ClassMember member = memberIter.next(); if (!(member instanceof Initializer)) { CAstEntity memberEntity = walkEntity(member, classContext); @@ -2548,7 +2615,8 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { // add class initializer, if needed if (!classContext.getStaticInitializers().isEmpty()) { - InitializerInstance initInstance = new InitializerInstance_c(fTypeSystem, n.position(), classType, Flags.STATIC); + InitializerDef initDef = fTypeSystem.initializerDef(n.position(), Types.ref(classType), Flags.STATIC); + InitializerInstance initInstance = fTypeSystem.createInitializerInstance(n.position(), Types.ref(initDef)); Map childEntities = HashMapFactory.make(); final MethodContext mc = new MethodContext(initInstance, childEntities, classContext); @@ -2564,9 +2632,9 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } } - protected void addConstructorsToAnonymousClass(New n, ParsedClassType anonType, ClassContext classContext, + protected void addConstructorsToAnonymousClass(New n, ClassType anonType, ClassContext classContext, List memberEntities) { - List superConstructors = ((ClassType) anonType.superType()).constructors(); + List superConstructors = ((ClassType) anonType.superClass()).constructors(); for (Iterator iter = superConstructors.iterator(); iter.hasNext();) { ConstructorInstance superCtor = (ConstructorInstance) iter.next(); @@ -2621,15 +2689,15 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } else if (rootNode instanceof ClassDecl) { final ClassDecl cd = (ClassDecl) rootNode; final List memberEntities = new ArrayList(); - final ClassContext classContext = new ClassContext(cd.type(), memberEntities, context); + final ClassContext classContext = new ClassContext(cd.classDef().asType(), memberEntities, context); - processClassMembers(rootNode, cd.type(), cd.body().members(), classContext, memberEntities); + processClassMembers(rootNode, cd.classDef().asType(), cd.body().members(), classContext, memberEntities); return new ClassEntity(classContext, memberEntities, cd, cd.position()); } else if (rootNode instanceof New) { final New n = (New) rootNode; final List memberEntities = new ArrayList(); - ParsedClassType anonType = n.anonType(); + ClassType anonType = (ClassType) n.anonType().asType(); String anonTypeName = anonTypeName(anonType); final ClassContext classContext = new ClassContext(anonType, memberEntities, context); @@ -2640,11 +2708,11 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } else if (rootNode instanceof ProcedureDecl) { final ProcedureDecl pd = (ProcedureDecl) rootNode; final Map memberEntities = new LinkedHashMap(); - final MethodContext mc = new MethodContext(pd.procedureInstance(), memberEntities, context); + final MethodContext mc = new MethodContext(pd.procedureInstance().asInstance(), memberEntities, context); CAstNode pdAST = null; - if (!pd.flags().isAbstract()) { + if (!pd.flags().flags().isAbstract()) { // Presumably the MethodContext's parent is a ClassContext, // and he has the list of initializers. Hopefully the following // will glue that stuff in the right place in any constructor body. @@ -2654,7 +2722,7 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { List/* */formals = pd.formals(); String[] argNames; int i = 0; - if (!pd.flags().isStatic()) { + if (!pd.flags().flags().isStatic()) { argNames = new String[formals.size() + 1]; argNames[i++] = "this"; } else { @@ -2662,10 +2730,10 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } for (Iterator iter = formals.iterator(); iter.hasNext(); i++) { Formal formal = (Formal) iter.next(); - argNames[i] = formal.name(); + argNames[i] = formal.name().toString(); } - return new ProcedureEntity(pdAST, fTypeSystem, pd.procedureInstance(), argNames, memberEntities, mc); + return new ProcedureEntity(pdAST, fTypeSystem, pd.procedureInstance().asInstance(), argNames, memberEntities, mc); } else if (rootNode instanceof FieldDecl) { final FieldDecl fd = (FieldDecl) rootNode; @@ -2702,10 +2770,10 @@ public class PolyglotJava2CAstTranslator implements TranslatorToCAst { } private int insertInitializers(WalkContext wc, CAstNode[] initCode, boolean wantStatic, int offset) { - List inits = wantStatic ? wc.getStaticInitializers() : wc.getInitializers(); + List inits = wantStatic ? wc.getStaticInitializers() : wc.getInitializers(); - for (Iterator iter = inits.iterator(); iter.hasNext(); offset++) { - ClassMember init = (ClassMember) iter.next(); + for (Iterator iter = inits.iterator(); iter.hasNext(); offset++) { + ClassMember init = iter.next(); CAstNode initNode = walkNodes(init, wc); if (initNode != null) { diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java index 06632ca88..6a9cea26b 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java @@ -15,6 +15,7 @@ package com.ibm.wala.cast.java.translator.polyglot; import java.io.IOException; +import com.ibm.wala.cast.java.ipa.callgraph.JavaSourceAnalysisScope; import com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl; import com.ibm.wala.cast.java.translator.SourceModuleTranslator; import com.ibm.wala.classLoader.IClassLoader; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java index 6f12e4c3e..db6e48f9d 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java @@ -8,9 +8,6 @@ * Contributors: * IBM Corporation - initial API and implementation *****************************************************************************/ -/* - * Created on Oct 6, 2005 - */ package com.ibm.wala.cast.java.translator.polyglot; import java.io.File; @@ -23,6 +20,8 @@ import java.util.Set; import polyglot.frontend.Compiler; import polyglot.frontend.ExtensionInfo; +import polyglot.frontend.Globals; +import polyglot.frontend.Source; import polyglot.main.Options; import polyglot.main.UsageError; import polyglot.util.ErrorInfo; @@ -33,6 +32,7 @@ import com.ibm.wala.classLoader.DirectoryTreeModule; import com.ibm.wala.classLoader.FileModule; import com.ibm.wala.classLoader.JarFileModule; import com.ibm.wala.classLoader.Module; +import com.ibm.wala.classLoader.ModuleEntry; import com.ibm.wala.classLoader.SourceFileModule; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.types.ClassLoaderReference; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java index 498a9ecf9..802a953b5 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java @@ -20,6 +20,7 @@ import java.util.Iterator; import polyglot.types.ArrayType; import polyglot.types.ClassType; +import polyglot.types.ObjectType; import polyglot.types.PrimitiveType; import polyglot.types.ReferenceType; import polyglot.types.Type; @@ -61,18 +62,21 @@ public class PolyglotTypeDictionary extends CAstTypeDictionaryImpl { assert fEltPolyglotType.isReference() : "Non-primitive, non-reference array element type!"; ReferenceType baseRefType = (ReferenceType) fEltPolyglotType; Collection supers = new ArrayList(); - for (Iterator superIter = baseRefType.interfaces().iterator(); superIter.hasNext();) { + for (Iterator superIter = baseRefType.interfaces().iterator(); superIter.hasNext(); ) { supers.add(getCAstTypeFor(superIter.next())); } - if (baseRefType.superType() != null) - supers.add(getCAstTypeFor(baseRefType.superType())); + if (baseRefType instanceof ClassType) { + ClassType baseClassType = (ClassType) baseRefType; + if (baseClassType.superClass() != null) + supers.add(getCAstTypeFor(baseRefType.superClass())); + } return supers; } } protected final TypeSystem fTypeSystem; - private final PolyglotJava2CAstTranslator fTranslator; + protected final PolyglotJava2CAstTranslator fTranslator; public PolyglotTypeDictionary(TypeSystem typeSystem, PolyglotJava2CAstTranslator translator) { fTypeSystem = typeSystem; @@ -91,7 +95,7 @@ public class PolyglotTypeDictionary extends CAstTypeDictionaryImpl { if (polyglotType.isClass()) type = fTranslator.new PolyglotJavaType((ClassType) astType, this, fTypeSystem); else if (polyglotType.isPrimitive()) { - type = JavaPrimitiveTypeMap.lookupType(((PrimitiveType) polyglotType).name()); + type = JavaPrimitiveTypeMap.lookupType(((PrimitiveType) polyglotType).name().toString()); } else if (polyglotType.isArray()) { type = new PolyglotJavaArrayType((ArrayType) polyglotType); } else