Skip to main content

Replace java.util.Hashtable with java.util.HashMap

org.openrewrite.staticanalysis.ReplaceHashtableWithHashMap

Hashtable synchronizes every operation, which adds overhead in the common single-threaded case. This recipe replaces a local Hashtable with a HashMap when data flow analysis can prove the Hashtable never escapes its method (it is not returned, assigned to a field, or passed as an argument), so no other thread can observe it and the synchronization is redundant. Fields, escaping variables, and Hashtable-specific method usages (contains, elements, keys) are left untouched. HashMap permits null keys and values, so it accepts every input Hashtable did.

Tags

Recipe source

GitHub: ReplaceHashtableWithHashMap.java, Issue Tracker, Maven Central

This recipe is available under the Moderne Source Available License.

Used by

This recipe is used as part of the following composite recipes:

Usage

This recipe has no required configuration options. It can be activated by adding a dependency on `org.openrewrite.recipe:rewrite-static-analysis` in your build file or by running a shell command (in which case no build changes are needed):

  1. Add the following to your build.gradle file:
    build.gradle
    plugins {
    id("org.openrewrite.rewrite") version("latest.release")
    }

    rewrite {
    activeRecipe("org.openrewrite.staticanalysis.ReplaceHashtableWithHashMap")
    setExportDatatables(true)
    }

    repositories {
    mavenCentral()
    }

    dependencies {
    rewrite("org.openrewrite.recipe:rewrite-static-analysis:2.40.0")
    }
  2. Run gradle rewriteRun to run the recipe.

See how this recipe works across multiple open-source repositories

Run this recipe on OSS repos at scale with the Moderne SaaS.

The community edition of the Moderne platform enables you to easily run recipes across thousands of open-source repositories.

Please contact Moderne for more information about safely running the recipes on your own codebase in a private SaaS.

Data Tables

Legacy synchronized types not migrated

org.openrewrite.staticanalysis.table.LegacySynchronizedTypesNotMigrated

Instances of a legacy synchronized type (Hashtable, Vector, Stack, StringBuffer) that were found but left unchanged because they could not be proven safe to modernize.

Column NameDescription
Source pathThe path to the source file containing the unmigrated reference.
ClassThe fully qualified name of the class containing the reference.
Unmigrated typeThe fully qualified name of the legacy synchronized type that was found but not migrated.
ReasonWhy the instance was left unchanged.