google / google/google-java-format

Design Smell Refactoring in JavacTokens

Đang mở
#1,201 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
6.2k
Fork
937
Merge trung bình
6 phút
Pull request đã merge (30 ngày)
3

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
1. **Organization**
- Clear separation of concerns
- Logical grouping of related functionality
- Reduced duplication

2. **Maintainability**
- Centralized position management
- Single point for position-related changes
- Better error handling

3. **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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.