-
Notifications
You must be signed in to change notification settings - Fork 248
Open
Description
While scanning the source code with Qodana, an issue was identified:
In 9 out of the 11 classes extending the Joint
abstract class, the following instructions are repeated within the initVelocityConstraints
function:
this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;
this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;
this.m_invMassA = this.m_bodyA.m_invMass;
this.m_invMassB = this.m_bodyB.m_invMass;
this.m_invIA = this.m_bodyA.m_invI;
this.m_invIB = this.m_bodyB.m_invI;
This repetition suggests a potential flaw in the method abstraction. There is an opportunity to refactor and extract these repetitive instructions into a reusable module or method. Such a change would significantly reduce code duplication, enhance maintainability, and establish a more robust structure for future growth, where similar repetitions could arise.
Two possible solutions are suggested:
- Introduce an additional parent class in the abstraction hierarchy (e.g.,
Mass2VJoint
), inheriting fromJoint
. This class would encapsulate the necessary attributes (e.g., mass, inertia, and constraints between two bodies) and provide a method to initialize the required constraints. - Add an interface that defines the required attributes, implement it in classes with the duplicated routine, and extract the initialization logic into the
Joint
class as a method. This method would accept objects extendingJoint
and implementing the interface.
Either approach would enhance the abstraction layer, simplify the code, and support future scalability.
Metadata
Metadata
Assignees
Labels
No labels