[ 
https://issues.apache.org/jira/browse/GEODE-10479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jinwoo Hwang updated GEODE-10479:
---------------------------------
    Description: 
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 immediately 
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

 

 

  was:
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. 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

 

 


> 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
>
> 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 immediately 
> 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)

Reply via email to