Design Smell Refactoring in JavacTokens
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
Hướng nghiên cứu
Bắt đầu với JavacTokens.java trong com.google.googlejavaformat.java và kiểm tra cách JavacTokens, RawTok và CommentWithTextAndPosition quản lý pos và endPos. Xem xét các trách nhiệm được đề xuất cho TokenPosition và các bài kiểm thử hiện có trước khi thay đổi thiết kế. Công việc được xem là hoàn tất khi việc xử lý vị trí được tập trung và đóng gói, việc xác thực nhất quán, và tất cả các bài kiểm thử hiện có vẫn vượt qua mà không thay đổi public API.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- 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.
Labels
- design-smells
- refactoring
- code-quality
- java
- google-java-format
- Ngôn ngữ chính
- Java
- Star
- 6.2k
- Fork
- 936
- Merge trung bình
- 6 phút
- Pull request đã merge (30 ngày)
- 3
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của google/google-java-format
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
google/google-java-format#1094 · 1 bình luận ·
-
Complementary Teamups Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 15/100
google/google-java-format#1450 · 1 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
google/google-java-format#1439 · 1 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 62/100
google/google-java-format#1436 · 2 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
google/google-java-format#1428 · 3 bình luận ·
Tất cả issue của google/google-java-format
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
elastic/gradle-plugins#157 ·
-
enhancement Tools
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
apache/rocketmq-dashboard#5008 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
DETECT_PARAMETER_NAMES=false silently disables @ConstructorProperties-based Creator detection too Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
FasterXML/jackson-databind#6229 ·