[
https://issues.apache.org/jira/browse/GEODE-10479?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18043863#comment-18043863
]
Jinwoo Hwang commented on GEODE-10479:
--------------------------------------
Hi [~sboorlagadda] ,
The scope of this work is significant, so I’ve broken it down into sub-tasks to
make it more manageable. I trust this will ease the process. Thank you for your
continued effort and commitment.
> Address deprecation and removal warnings in Java 17 migration by
> incrementally re-enabling compiler warnings and modernizing deprecated API
> usage
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: GEODE-10479
> URL: https://issues.apache.org/jira/browse/GEODE-10479
> Project: Geode
> Issue Type: Task
> Reporter: Jinwoo Hwang
> Assignee: Sai Boorlagadda
> Priority: Major
> Labels: SAS
>
> h3. Current State
> Following the successful Java 17 migration (GEODE-10465), all deprecation and
> removal warnings have been suppressed to ensure build stability during the
> transition. The current suppression configuration includes:
> *In warnings.gradle:*
> tasks.withType(JavaCompile) \{ options.compilerArgs << '-Xlint:-unchecked' <<
> "-Werror" << '-Xlint:-deprecation' << '-Xlint:-removal' options.deprecation =
> false }
> *In geode-java.gradle:*
> options.compilerArgs.addAll([ '-Xlint:-removal', '-Xlint:-deprecation' ])
> h3. Problem Statement
> The current suppression of all deprecation warnings creates technical debt
> and prevents the codebase from:
> * Leveraging modern Java 17+ APIs and features
> * Identifying potentially broken code due to API removals
> * Maintaining code quality standards
> * Preparing for future Java version upgrades
> h3. *Note:* The migration from *Java 17* to *Java 21* will occur after the
> *Jakarta EE 10* migration work is merged. The scope of this project is
> limited to ensuring the use of APIs that remain valid and are {*}not
> deprecated in Java 21{*}. A separate initiative will address any *deprecation
> and removal warnings* introduced in Java 21.
> h3. Proposed Solution
> h4. Phase 1: Assessment and Categorization ( <1 week )
> * *Baseline Analysis*
> ** Remove warning suppressions temporarily on a test branch
> ** Generate comprehensive report of all deprecation and removal warnings
> ** Categorize warnings by:
> *** {*}Critical{*}: API removal warnings (will break in future Java versions)
> *** {*}High Priority{*}: Security-related deprecated APIs
> *** {*}Medium Priority{*}: Performance-impacting deprecated APIs
> *** {*}Low Priority{*}: General deprecated APIs with modern alternatives
> * *Module-by-Module Impact Assessment*
> ** Identify modules with highest warning concentration
> ** Document external dependency deprecations vs. internal code issues
> ** Create priority matrix for remediation effort
> h4. Phase 2: Incremental Warning Re-enablement ( <1 week)
> * *Start with Removal Warnings* (Week 1-2) Re-enable only removal warnings
> first (highest priority): options.compilerArgs << '-Xlint:removal'
> ** Address API removal issues that will break in future Java versions
> ** Replace removed APIs with modern alternatives
> ** Focus on critical functionality first
> * *Enable Deprecation Warnings by Module* (Week 3-6) Enable deprecation
> warnings module by module: if (project.name in ['geode-core',
> 'geode-common']) \{ options.deprecation = true options.compilerArgs <<
> '-Xlint:deprecation' }
> ** Start with core modules with fewer dependencies
> ** Gradually expand to more complex modules
> h4. Phase 3: API Modernization (1-2 weeks)
> * *Security API Updates*
> ** Replace deprecated security manager APIs
> ** Update SSL/TLS configuration APIs
> ** Modernize authentication mechanisms
> * *Collections and Concurrency*
> ** Replace deprecated collection methods
> ** Update concurrent API usage
> ** Leverage Java 17 concurrency improvements
> * *I/O and Networking*
> ** Replace deprecated networking APIs
> ** Update file I/O operations
> ** Leverage NIO.2 improvements
> * *Reflection and Introspection*
> ** Update reflection API usage for module system compatibility
> ** Replace deprecated introspection methods
> ** Add proper module exports where needed
> h4. Phase 4: Full Warning Compliance (2 weeks)
> * *Remove All Suppressions* Final configuration with all warnings enabled:
> tasks.withType(JavaCompile) \{ options.compilerArgs << '-Xlint:unchecked' <<
> "-Werror" << '-Xlint:deprecation' << '-Xlint:removal' options.deprecation =
> true }
> * *Establish Warning Gates*
> ** Configure CI/CD to fail on new deprecation warnings
> ** Add checkstyle rules to prevent deprecated API introduction
> ** Document approved exceptions with justification
> h3. Acceptance Criteria
> * All '-Xlint:-removal' suppressions removed and underlying issues resolved
> * All '-Xlint:-deprecation' suppressions removed and underlying issues
> resolved
> * 'options.deprecation = false' changed to 'options.deprecation = true'
> * Zero deprecation warnings in clean build
> * Zero removal warnings in clean build
> * CI/CD pipeline fails on new deprecation/removal warnings
> * Documentation updated with modern API usage patterns
> * Performance benchmarks show no regression from API changes
> h3. Implementation Strategy
> # *Create Feature Branch*
> # {*}Incremental PRs{*}: Submit changes module by module for easier review
> # {*}Parallel Development{*}: Allow normal development to continue while
> cleanup progresses
> # {*}Testing Strategy{*}: Ensure all existing tests pass after each
> modernization change
> # {*}Rollback Plan{*}: Maintain ability to temporarily suppress warnings if
> blocking issues discovered
> h3. Estimated Effort
> * {*}Total Effort{*}: 2-3 weeks
> * {*}Team Size{*}: 2-3 developers
> * {*}Risk Level{*}: Medium (phased approach minimizes disruption)
> h3. Benefits
> * {*}Code Quality{*}: Modern, maintainable codebase using current Java 17
> APIs
> * {*}Future Compatibility{*}: Preparation for Java 18+ upgrades
> * {*}Performance{*}: Potential improvements from modern API usage
> * {*}Security{*}: Updated security APIs and practices
> * {*}Developer Experience{*}: Cleaner build output and better IDE warnings
> h3. Dependencies
> * Requires completion of GEODE-10465 (Java 17 migration)
> * May require coordination with external dependency updates
> * Should align with any planned Gradle or build system upgrades
> h3. Success Metrics
> * Zero suppressed deprecation warnings
> * Build time maintained or improved
> * Test suite execution time maintained or improved
> * No functional regressions in existing features
> * Documentation updated with modern patterns
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)