2015-08-26 10:25 GMT+02:00 Marcus Denker <marcus.denker@inria.fr>:
Hi,

Review needed for

�� �� �� �� https://pharo.fogbugz.com/f/cases/16074/Is-RBClassNotReferencedRule-200x-slower-in-Pharo-4-vs-Pharo-3

Speedup can be checked with:

rule:=RBClassNotReferencedRule new.
environment:=RBBrowserEnvironment new forPackageNames: #('Fuel').
[RBSmalllintChecker runRule: rule onEnvironment:
environment] timeToRun


Pharo5: "0:00:00:13.526"
Pharo5 with fix: "0:00:00:00.761"
Pharo3:�� 0:00:00:00.547

Checking all classes for usage:

[Smalltalk allClassesAndTraits select: [ : each | each isUsed not]] timeToRun

still takes 1:40 to find 600 unused classes.

This shows that adding a cache for ���referenced classes��� per environment would speed this
up further. But it should be general, not just for RB or even RB Code Critique.

The nice things is that code environments only change when you add classes or methods,
so adding a very general cache should be quite possible.

Another thing we should add is a way for classes to define ���I am used���. E.g this
now finds all Configurations, all the Manifests and all cases like the RB Rules themselves.
All these should know that they are not useless even though there are no references.

�� �� �� �� Marcus

But now, we have the problem that this rule does not find references to classes by symbol.
The comment for this rule says:

"This smell arises when a class is not referenced either directly or indirectly by a symbol."

But all spec adapter classes are only referenced by their symbol and this now isn't found anymore:

MorphicMenuGroupAdapter isUsed " - > false "


��