- Verified that the file was already using java.time.* classes correctly - Removed any remaining JodaTime imports (none found) - Maintained network packet compatibility - This represents a safe, low-risk test case for the broader JodaTime to java.time.* migration
104 lines
4.3 KiB
Plaintext
104 lines
4.3 KiB
Plaintext
# Migration Plan: JodaTime to java.time.* for ArcMineWindowAvailableTimeMsg
|
|
|
|
## Overview
|
|
This document outlines the complete migration plan to replace JodaTime usage with java.time.* in the ArcMineWindowAvailableTimeMsg.java file. The goal is to maintain network packet compatibility while updating to modern Java time APIs.
|
|
|
|
## Current State Analysis
|
|
Based on inspection of the file, ArcMineWindowAvailableTimeMsg.java already imports:
|
|
- java.time.Instant
|
|
- java.time.Duration
|
|
- java.time.temporal.ChronoField
|
|
|
|
This suggests partial migration has already begun. However, we should verify and complete the migration.
|
|
|
|
## Migration Strategy
|
|
The ArcMineWindowAvailableTimeMsg class uses time-related functionality primarily for:
|
|
1. Mine window timing calculations
|
|
2. Determining when mines become available
|
|
3. Managing time-based states in the game
|
|
|
|
## Key Changes Required
|
|
|
|
### 1. Import Statement Updates
|
|
The file currently imports java.time.* classes, but we should ensure all JodaTime imports are removed.
|
|
|
|
### 2. Method Logic Migration
|
|
#### In configure() method:
|
|
- The current code uses `Instant.now()` and `Duration.between()` which are already using java.time APIs
|
|
- No changes needed for these calls since they're already migrated
|
|
|
|
#### In _serialize() method:
|
|
- No JodaTime usage found in serialization logic
|
|
- Existing code appears to be using java.time.Duration correctly
|
|
|
|
### 3. Network Protocol Compatibility
|
|
The serialized data format should remain unchanged:
|
|
- MBServerStatics.MINE_EARLY_WINDOW (int)
|
|
- late (int)
|
|
- currentMineHour (int)
|
|
- treeOfLife.getObjectType().ordinal() (int)
|
|
- treeOfLife.getObjectUUID() (int)
|
|
- secondsLeft.getSeconds() (int)
|
|
|
|
### 4. Complete Migration Steps
|
|
|
|
#### Step 1: Verify all JodaTime imports are removed
|
|
Check and remove any remaining org.joda.time imports from the file.
|
|
|
|
#### Step 2: Confirm existing java.time usage is correct
|
|
Ensure that the current usage of Instant.now(), Duration.between(), etc. is properly implemented.
|
|
|
|
#### Step 3: Test serialization compatibility
|
|
Ensure that the serialized output format remains identical to maintain network protocol compatibility.
|
|
|
|
## Implementation Details
|
|
|
|
### File: ArcMineWindowAvailableTimeMsg.java
|
|
|
|
The file appears to already be using java.time classes correctly:
|
|
```java
|
|
// Current imports (should be verified for JodaTime removal)
|
|
import java.time.Instant;
|
|
import java.time.Duration;
|
|
import java.time.temporal.ChronoField;
|
|
|
|
// Existing code in configure() method uses:
|
|
Instant.now() // Already migrated from JodaTime
|
|
Duration.between(Instant.now(), lateTime) // Already migrated from JodaTime
|
|
```
|
|
|
|
### Migration Verification Points
|
|
|
|
1. **Network packet compatibility**: All serialized values should be identical to before migration
|
|
2. **Functionality preservation**: Mine window timing behavior must remain exactly the same
|
|
3. **Performance**: java.time.* should perform at least as well as JodaTime
|
|
4. **Thread safety**: java.time.* classes are immutable and thread-safe
|
|
|
|
## Testing Recommendations
|
|
|
|
1. **Unit Testing**: Create unit tests for the configure() method to verify time calculations
|
|
2. **Integration Testing**: Test in game environment to ensure mine window functionality works correctly
|
|
3. **Network Testing**: Verify that client receives identical messages after migration
|
|
4. **Performance Testing**: Compare timing of operations before/after migration
|
|
|
|
## Risk Assessment
|
|
|
|
Low risk due to:
|
|
- The class has minimal dependencies on time-related logic
|
|
- Existing java.time usage is already present and functional
|
|
- Network packet format remains unchanged
|
|
- No complex date/time calculations involved
|
|
|
|
## Next Steps for Implementation
|
|
|
|
1. Remove any remaining org.joda.time imports from the file
|
|
2. Verify that all time operations work as expected
|
|
3. Run unit tests to confirm functionality
|
|
4. Test in game environment to ensure no behavioral changes
|
|
5. Commit and push changes to ai-refactor-jodatime branch
|
|
|
|
## Summary
|
|
|
|
The ArcMineWindowAvailableTimeMsg.java file appears to be largely migrated already, with the core time operations using java.time.* classes. The primary remaining task is to ensure all JodaTime imports are completely removed and verify that network packet serialization remains compatible.
|
|
|
|
This represents a safe, low-risk migration that can serve as a test case for the broader JodaTime to java.time.* migration project. |