-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Labels
enhancementImprovements to an existing featureImprovements to an existing featureruleImprovements or additions to rulesImprovements or additions to rules
Description
Prerequisites
- This improvement has not already been suggested.
- This improvement should not be implemented as a separate rule.
Rule to improve
RedundantCast
Improvement description
The RedundantCast rule could be updated to catch cast expressions followed by a member access, in cases where the cast is not required to access the member.
For example:
type
TMyClass = class(TObject)
public
procedure Foo;
end;
// ...
procedure DoFoo(MyObj: TMyClass);
begin
TMyClass(MyObj).Foo;
end;
Rationale
This improvement would catch a number of sneaky code smells that commonly occur when refactoring.
For example. consider a protected field on a class that is accessed from another unit by declaring a descendant class in the same unit, e.g.
// Unit1.pas
type
TMyActualClass = class(TObject)
protected
procedure SecretProc;
end;
// Unit2.pas
type
TMyFriendClass = class(TMyActualClass);
procedure DoSecretProc(MyObj: TMyActualClass);
begin
TMyFriendClass(MyObj).SecretProc;
end;
If a refactor changed TMyActualClass.SecretProc
to public
, the cast is no longer required to access SecretProc
. This is easy to miss when refactoring and results in unnecessary complexity sticking around in the codebase.
cirras
Metadata
Metadata
Assignees
Labels
enhancementImprovements to an existing featureImprovements to an existing featureruleImprovements or additions to rulesImprovements or additions to rules