9 |
|
|
10 |
inherit {NONE} |
inherit {NONE} |
11 |
SHARED_EIFFEL_PROJECT |
SHARED_EIFFEL_PROJECT |
12 |
|
CA_SHARED_NAMES |
13 |
|
|
14 |
create |
create |
15 |
make |
make |
24 |
-- Adding example rules |
-- Adding example rules |
25 |
rules.extend (create {CA_SELF_ASSIGNMENT_RULE}.make) |
rules.extend (create {CA_SELF_ASSIGNMENT_RULE}.make) |
26 |
rules.extend (create {CA_UNUSED_ARGUMENT_RULE}.make) |
rules.extend (create {CA_UNUSED_ARGUMENT_RULE}.make) |
27 |
|
rules.extend (create {CA_NPATH_RULE}.make) |
28 |
|
rules.extend (create {CA_EMPTY_IF_RULE}.make) |
29 |
|
rules.extend (create {CA_FEATURE_NEVER_CALLED_RULE}.make) |
30 |
|
-- Issues (contract violations, exceptions) with {EPA_CFG_BUILDER} and |
31 |
|
-- classes from library 'program_analysis' in general. |
32 |
|
-- rules.extend (create {CA_VARIABLE_NOT_READ_RULE}.make) |
33 |
|
|
34 |
create classes_to_analyze.make |
create classes_to_analyze.make |
35 |
create rule_violations.make (100) |
create rule_violations.make (100) |
46 |
if l_rules.item.is_enabled then -- important: only add enabled rules |
if l_rules.item.is_enabled then -- important: only add enabled rules |
47 |
if system_wide_check or else (not l_rules.item.is_system_wide) then |
if system_wide_check or else (not l_rules.item.is_system_wide) then |
48 |
-- do not add system wide rules if we check only parts of the system |
-- do not add system wide rules if we check only parts of the system |
49 |
l_rules.item.prepare_checking (l_rules_checker) |
if attached {CA_STANDARD_RULE} l_rules.item as l_std_rule then |
50 |
|
l_std_rule.prepare_checking (l_rules_checker) |
51 |
|
-- TODO: prepare rules of other types? |
52 |
|
end |
53 |
end |
end |
54 |
end |
end |
55 |
end |
end |
59 |
-- TODO: more elegant and performant solution? |
-- TODO: more elegant and performant solution? |
60 |
across rules as l_rules loop |
across rules as l_rules loop |
61 |
l_rules.item.set_checking_class (l_classes.item) |
l_rules.item.set_checking_class (l_classes.item) |
62 |
|
-- If rule is non-standard then it will not be checked by l_rules_checker. |
63 |
|
-- We will have the rule check the current class here: |
64 |
|
if attached {CA_CFG_RULE} l_rules.item as l_cfg_rule then |
65 |
|
l_cfg_rule.check_class (l_classes.item) |
66 |
|
end |
67 |
end |
end |
68 |
|
|
69 |
l_rules_checker.run_on_class (l_classes.item) |
l_rules_checker.run_on_class (l_classes.item) |
156 |
if a_class.is_compiled then |
if a_class.is_compiled then |
157 |
l_class_c := a_class.compiled_class |
l_class_c := a_class.compiled_class |
158 |
check l_class_c /= Void end |
check l_class_c /= Void end |
|
print ("Analyzing class " + a_class.name + "...%N") |
|
159 |
classes_to_analyze.extend (l_class_c) |
classes_to_analyze.extend (l_class_c) |
160 |
else |
else |
161 |
print ("Class " + a_class.name + " not compiled (skipped).%N") |
print ("Class " + a_class.name + " not compiled (skipped).%N") |
178 |
|
|
179 |
system_wide_check: BOOLEAN |
system_wide_check: BOOLEAN |
180 |
|
|
181 |
|
|
182 |
end |
end |