Skip to content

Add @Stable to LocaleProviderAdapter #26354

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 10 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -39,6 +39,7 @@
import java.util.spi.CalendarDataProvider;
import java.util.spi.CalendarNameProvider;
import java.util.spi.TimeZoneNameProvider;
import jdk.internal.vm.annotation.Stable;
import sun.util.locale.provider.JRELocaleProviderAdapter;
import sun.util.locale.provider.LocaleDataMetaInfo;
import sun.util.locale.provider.LocaleProviderAdapter;
Expand All @@ -60,6 +61,7 @@ public class CLDRLocaleProviderAdapter extends JRELocaleProviderAdapter {
// cache to hold locale to locale mapping for language aliases.
private static final Map<Locale, Locale> langAliasesCache;
// cache the available locales
@Stable
private static volatile Locale[] AVAILABLE_LOCALES;

static {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -32,6 +32,8 @@
import java.util.Set;
import java.util.stream.Stream;

import jdk.internal.vm.annotation.Stable;

/*
* FallbackProviderAdapter implementation. Fallback provider serves the
* following purposes:
Expand All @@ -46,6 +48,7 @@ public class FallbackLocaleProviderAdapter extends JRELocaleProviderAdapter {
private static final Locale[] AVAILABLE_LOCS = {Locale.US, Locale.ENGLISH, Locale.ROOT};
private static final Set<String> AVAILABLE_LANGTAGS = Set.of("en-US", "en", "und");

@Stable
private volatile BreakIteratorProvider breakIteratorProvider;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -46,6 +46,7 @@
import java.util.spi.LocaleNameProvider;
import java.util.spi.LocaleServiceProvider;
import java.util.spi.TimeZoneNameProvider;
import jdk.internal.vm.annotation.Stable;
import sun.text.spi.JavaTimeDateTimePatternProvider;
import sun.util.resources.LocaleData;
import sun.util.spi.CalendarProvider;
Expand All @@ -65,6 +66,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
= new ConcurrentHashMap<>();

// LocaleData specific to this LocaleProviderAdapter.
@Stable
private volatile LocaleData localeData;

/**
Expand All @@ -81,52 +83,49 @@ public LocaleProviderAdapter.Type getAdapterType() {
@Override
@SuppressWarnings("unchecked")
public <P extends LocaleServiceProvider> P getLocaleServiceProvider(Class<P> c) {
switch (c.getSimpleName()) {
case "BreakIteratorProvider":
return (P) getBreakIteratorProvider();
case "CollatorProvider":
return (P) getCollatorProvider();
case "DateFormatProvider":
return (P) getDateFormatProvider();
case "DateFormatSymbolsProvider":
return (P) getDateFormatSymbolsProvider();
case "DecimalFormatSymbolsProvider":
return (P) getDecimalFormatSymbolsProvider();
case "NumberFormatProvider":
return (P) getNumberFormatProvider();
case "CurrencyNameProvider":
return (P) getCurrencyNameProvider();
case "LocaleNameProvider":
return (P) getLocaleNameProvider();
case "TimeZoneNameProvider":
return (P) getTimeZoneNameProvider();
case "CalendarDataProvider":
return (P) getCalendarDataProvider();
case "CalendarNameProvider":
return (P) getCalendarNameProvider();
case "CalendarProvider":
return (P) getCalendarProvider();
case "JavaTimeDateTimePatternProvider":
return (P) getJavaTimeDateTimePatternProvider();
default:
throw new InternalError("should not come down here");
}
if (c == BreakIteratorProvider.class) return (P) getBreakIteratorProvider();
if (c == CollatorProvider.class) return (P) getCollatorProvider();
if (c == DateFormatProvider.class) return (P) getDateFormatProvider();
if (c == DateFormatSymbolsProvider.class) return (P) getDateFormatSymbolsProvider();
if (c == DecimalFormatSymbolsProvider.class) return (P) getDecimalFormatSymbolsProvider();
if (c == NumberFormatProvider.class) return (P) getNumberFormatProvider();
if (c == CurrencyNameProvider.class) return (P) getCurrencyNameProvider();
if (c == LocaleNameProvider.class) return (P) getLocaleNameProvider();
if (c == TimeZoneNameProvider.class) return (P) getTimeZoneNameProvider();
if (c == CalendarDataProvider.class) return (P) getCalendarDataProvider();
if (c == CalendarNameProvider.class) return (P) getCalendarNameProvider();
if (c == CalendarProvider.class) return (P) getCalendarProvider();
if (c == JavaTimeDateTimePatternProvider.class) return (P) getJavaTimeDateTimePatternProvider();
throw new InternalError("should not come down here");
}

@Stable
private volatile BreakIteratorProvider breakIteratorProvider;
@Stable
private volatile CollatorProvider collatorProvider;
@Stable
private volatile DateFormatProvider dateFormatProvider;
@Stable
private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider;
@Stable
private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider;
@Stable
private volatile NumberFormatProvider numberFormatProvider;

@Stable
private volatile CurrencyNameProvider currencyNameProvider;
@Stable
private volatile LocaleNameProvider localeNameProvider;
@Stable
protected volatile TimeZoneNameProvider timeZoneNameProvider;
@Stable
protected volatile CalendarDataProvider calendarDataProvider;
@Stable
protected volatile CalendarNameProvider calendarNameProvider;

@Stable
private volatile CalendarProvider calendarProvider;
@Stable
private volatile JavaTimeDateTimePatternProvider javaTimeDateTimePatternProvider;

/*
Expand Down
Loading