/[eiffelstudio]/branches/eth/eve/Src/framework/code_analysis/ca_code_analyzer.e
ViewVC logotype

Diff of /branches/eth/eve/Src/framework/code_analysis/ca_code_analyzer.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 96077 by schmisam, Tue Oct 7 03:40:41 2014 UTC revision 96078 by schmisam, Wed Nov 12 04:16:34 2014 UTC
# Line 98  feature {NONE} -- Initialization Line 98  feature {NONE} -- Initialization
98                          create output_actions                          create output_actions
99    
100                          create ignoredby.make (25)                          create ignoredby.make (25)
101                            create checked_only_by.make (25)
102                          create library_class.make (25)                          create library_class.make (25)
103                          create nonlibrary_class.make (25)                          create nonlibrary_class.make (25)
104                  end                  end
# Line 360  feature {NONE} -- Implementation Line 361  feature {NONE} -- Implementation
361    
362                          Result := True                          Result := True
363    
364                          if ignoredby.has (l_affected_class)                          if checked_only_by.at(l_affected_class).is_empty then
365                                                          and then (ignoredby.at (l_affected_class)).has (l_rule.id) then                                  if  (ignoredby.at (l_affected_class)).has (l_rule.id) then
366                                            Result := False
367                                    end
368                            elseif  not checked_only_by.at (l_affected_class).has (l_rule.id) then
369                                  Result := False                                  Result := False
370                          end                          end
   
371                          if (not l_rule.checks_library_classes) and then library_class.at (l_affected_class) then                          if (not l_rule.checks_library_classes) and then library_class.at (l_affected_class) then
372                                  Result := False                                  Result := False
373                          end                          end
# Line 411  feature {NONE} -- Class-wide Options (Fr Line 414  feature {NONE} -- Class-wide Options (Fr
414                          -- Extracts options from the indexing clause of class `a_class'.                          -- Extracts options from the indexing clause of class `a_class'.
415                  local                  local
416                          l_ast: CLASS_AS                          l_ast: CLASS_AS
417                          l_ignoredby: LINKED_LIST [STRING_32]                          l_ignoredby, l_check_only: LINKED_LIST [STRING_32]
418                  do                  do
419                          create l_ignoredby.make                          create l_ignoredby.make
420                          l_ignoredby.compare_objects -- We want to compare the actual strings.                          create l_check_only.make
421                                    -- We want to compare the actual strings.
422                            l_ignoredby.compare_objects
423                            l_check_only.compare_objects
424                                  -- Reset the class flags.                                  -- Reset the class flags.
425                          library_class.force (False, a_class)                          library_class.force (False, a_class)
426                          nonlibrary_class.force (False, a_class)                          nonlibrary_class.force (False, a_class)
427                          l_ast := a_class.ast                          l_ast := a_class.ast
428    
429                          if attached l_ast.internal_top_indexes as l_top then                          if attached l_ast.internal_top_indexes as l_top then
430                                  search_indexing_tags (l_top, a_class, l_ignoredby)                                  search_indexing_tags (l_top, a_class, l_ignoredby, l_check_only)
431                          end                          end
432                          if attached l_ast.internal_bottom_indexes as l_bottom then                          if attached l_ast.internal_bottom_indexes as l_bottom then
433                                  search_indexing_tags (l_bottom, a_class, l_ignoredby)                                  search_indexing_tags (l_bottom, a_class, l_ignoredby, l_check_only)
434                          end                          end
435    
436                          ignoredby.force (l_ignoredby, a_class)                          ignoredby.force (l_ignoredby, a_class)
437                            checked_only_by.force (l_check_only, a_class)
438                  end                  end
439    
440          search_indexing_tags (a_clause: attached INDEXING_CLAUSE_AS; a_class: attached CLASS_C; a_ignoredby: attached LINKED_LIST [STRING_32])          search_indexing_tags (a_clause: attached INDEXING_CLAUSE_AS; a_class: attached CLASS_C; a_ignoredby, a_check_only: attached LINKED_LIST [STRING_32])
441                          -- Searches `a_clause' for settings relevant to code analysis.                          -- Searches `a_clause' for settings relevant to code analysis.
442                  local                  local
443                          l_item: STRING_32                          l_item: STRING_32
444                  do                  do
445                          across a_clause as ic loop                          across a_clause as ic loop
446                                  if attached ic.item.tag as l_tag then                                  if attached ic.item.tag as l_tag then
447                                          if l_tag.name_32.same_string_general ("ca_ignoredby") then                                          if l_tag.name_32.same_string_general ("ca_ignore") then
448                                                          -- Class wants to ignore certain rules.                                                          -- Class wants to ignore certain rules.
449                                                  across ic.item.index_list as l_list loop                                                  across ic.item.index_list as l_list loop
450                                                          l_item := l_list.item.string_value_32                                                          l_item := l_list.item.string_value_32
451                                                          l_item.prune_all ('%"')                                                          l_item.prune_all ('"')
452                                                          a_ignoredby.extend (l_item)                                                          a_ignoredby.extend (l_item)
453                                                  end                                                  end
454                                          elseif l_tag.name_32.is_equal ("ca_library") then                                          elseif l_tag.name_32.is_equal ("ca_library") then
# Line 449  feature {NONE} -- Class-wide Options (Fr Line 456  feature {NONE} -- Class-wide Options (Fr
456                                                  if not ic.item.index_list.is_empty then                                                  if not ic.item.index_list.is_empty then
457                                                          l_item := ic.item.index_list.first.string_value_32                                                          l_item := ic.item.index_list.first.string_value_32
458                                                          l_item.to_lower                                                          l_item.to_lower
459                                                          l_item.prune_all ('%"')                                                          l_item.prune_all ('"')
460                                                          if l_item.is_equal ("true") then                                                          if l_item.is_equal ("true") then
461                                                                  library_class.force (True, a_class)                                                                  library_class.force (True, a_class)
462                                                          elseif l_item.is_equal ("false") then                                                          elseif l_item.is_equal ("false") then
463                                                                  nonlibrary_class.force (True, a_class)                                                                  nonlibrary_class.force (True, a_class)
464                                                          end                                                          end
465                                                  end                                                  end
466                                            elseif l_tag.name_32.is_equal ("ca_only") then
467                                                            -- Class wants to check only certain rules.
468                                                    across ic.item.index_list as l_list loop
469                                                            l_item := l_list.item.string_value_32
470                                                            l_item.prune_all ('"')
471                                                            a_check_only.extend (l_item)
472                                                    end
473                                          end                                          end
474                                  end                                  end
475                          end                          end
# Line 464  feature {NONE} -- Class-wide Options (Fr Line 478  feature {NONE} -- Class-wide Options (Fr
478          ignoredby: HASH_TABLE [LINKED_LIST [STRING_32], CLASS_C]          ignoredby: HASH_TABLE [LINKED_LIST [STRING_32], CLASS_C]
479                          -- Maps classes to lists of rules (rule IDs) the class wants to be ignored by.                          -- Maps classes to lists of rules (rule IDs) the class wants to be ignored by.
480    
481            checked_only_by: HASH_TABLE [LINKED_LIST [STRING_32], CLASS_C]
482                            -- Maps classes to lists of rules (rule IDs) the class wants to be checked by exclusively.
483    
484    
485          library_class, nonlibrary_class: HASH_TABLE [BOOLEAN, CLASS_C]          library_class, nonlibrary_class: HASH_TABLE [BOOLEAN, CLASS_C]
486                          -- Stores classes that are marked as library or non-library classes.                          -- Stores classes that are marked as library or non-library classes.
487    

Legend:
Removed from v.96077  
changed lines
  Added in v.96078

  ViewVC Help
Powered by ViewVC 1.1.23