import "eiffel.refacola" /* * CHANGE ACCESSIBILITY rule set for Eiffel * * see: * Steimann, Kollee, v. Pilgrim: * A Refactoring Constraint Language and its Application. * Figure 5 */ ruleset Export language Eiffel rules accessibilityInference for all e: Eiffel.Export f: Eiffel.Feature do if Eiffel.feature(e, f) then e.accessibility = f.accessibility end accessibleFeature for all r: Eiffel.FeatureReference f: Eiffel.Feature do if Eiffel.binds(r, f) then /* single element instead of set, cf Sec. 7 */ Eiffel.inherits*(r.location, f.accessibility) end preconditionExport for all r: Eiffel.FeatureReference f1: Eiffel.Feature f2: Eiffel.Feature do if Eiffel.requires(f1, f2), Eiffel.accesses(r, f1) then /* single element instead of set, cf Sec. 7 */ Eiffel.inherits*(r.location, f2.accessibility) end noCatCalls for all r: Eiffel.Reference f1: Eiffel.Feature f2: Eiffel.Feature do if Eiffel.reexports(f2, f1), Eiffel.accesses(r, f1) then /* single element instead of set, cf Sec. 7 */ Eiffel.inherits*(r.location, f2.accessibility) end