Several design smells were identified in the JavacTokens class of google-java-format project. The goal focused on improving code organization, maintainability, and encapsulation while preserving all functionality.
Location
Package: com.google.googlejavaformat.java
Class: JavacTokens
File: JavacTokens.java
Design Smells Identified
1. Position Management Issues
Smells:
Unnecessary Abstraction
Multifaceted Abstraction
Symptoms:
Position fields (pos, endPos) scattered across classes
Position-related logic mixed with other concerns
Duplicate position handling in RawTok and CommentWithTextAndPosition
2. Position Validation Logic Issues
Smells:
Multifaceted Abstraction
Feature Envy
Symptoms:
Position validation separated from position data
Validation logic duplicated or inconsistent
High coupling between classes for position validation
3. Field Organization Issues
Smells:
Leaky Encapsulation
Duplicate Abstraction
Symptoms:
Position fields not properly encapsulated
Same fields appearing in multiple classes
Inconsistent position field management
Possible Refactoring Solutions
1. Extract Class
Created new TokenPosition class to handle position management
Centralized all position-related functionality
Improved code organization and maintainability
Clear separation of responsibilities
2. Move Method
Moved position validation logic to TokenPosition class
Placed validation near the data it validates
Improved cohesion and reduced coupling
Ensured consistent validation across usage
3. Move Field
Consolidated position fields into TokenPosition class
Eliminated field duplication across classes
Enforced consistent position handling
Enhanced encapsulation of position data
Implementation Impact
Code Quality Improvements
Organization
Clear separation of concerns
Logical grouping of related functionality
Reduced duplication
Maintainability
Centralized position management
Single point for position-related changes
Better error handling
Reliability
Consistent position validation
Reduced chance of position-related bugs
Better type safety
Verification
✅ All existing tests pass
✅ No public API changes
✅ Original functionality preserved
✅ Backward compatible
✅ Follows project coding standards
Conclusion
The implemented refactorings address the identified design smells while maintaining functionality and compatibility. The code is now more maintainable, better organized, and less prone to position-related errors.
Overview
Several design smells were identified in the JavacTokens class of google-java-format project. The goal focused on improving code organization, maintainability, and encapsulation while preserving all functionality.
Location
Design Smells Identified
1. Position Management Issues
Smells:
Symptoms:
2. Position Validation Logic Issues
Smells:
Symptoms:
3. Field Organization Issues
Smells:
Symptoms:
Possible Refactoring Solutions
1. Extract Class
2. Move Method
3. Move Field
Implementation Impact
Code Quality Improvements
Organization
Maintainability
Reliability
Verification
Conclusion
The implemented refactorings address the identified design smells while maintaining functionality and compatibility. The code is now more maintainable, better organized, and less prone to position-related errors.
Labels