8344252: SM cleanup in java.util classes

Reviewed-by: naoto, smarks
This commit is contained in:
Roger Riggs 2024-11-15 20:29:14 +00:00
parent 59ffac84d3
commit c5b6ed8ca0
13 changed files with 160 additions and 330 deletions

View File

@ -985,11 +985,8 @@ public final class Arrays {
* circular dependencies. To be removed in a future release.
*/
static final class LegacyMergeSort {
@SuppressWarnings("removal")
private static final boolean userRequested =
java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"java.util.Arrays.useLegacyMergeSort")).booleanValue();
Boolean.getBoolean("java.util.Arrays.useLegacyMergeSort");
}
/**

View File

@ -43,12 +43,6 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.Serializable;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PermissionCollection;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.ProtectionDomain;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.time.Instant;
@ -3564,25 +3558,9 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
}
}
@SuppressWarnings("removal")
private static class CalendarAccessControlContext {
private static final AccessControlContext INSTANCE;
static {
RuntimePermission perm = new RuntimePermission("accessClassInPackage.sun.util.calendar");
PermissionCollection perms = perm.newPermissionCollection();
perms.add(perm);
INSTANCE = new AccessControlContext(new ProtectionDomain[] {
new ProtectionDomain(null, perms)
});
}
private CalendarAccessControlContext() {
}
}
/**
* Reconstitutes this object from a stream (i.e., deserialize it).
*/
@SuppressWarnings("removal")
@java.io.Serial
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
@ -3617,16 +3595,8 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
// If there's a ZoneInfo object, use it for zone.
ZoneInfo zi = null;
try {
zi = AccessController.doPrivileged(
new PrivilegedExceptionAction<>() {
@Override
public ZoneInfo run() throws Exception {
return (ZoneInfo) input.readObject();
}
},
CalendarAccessControlContext.INSTANCE);
} catch (PrivilegedActionException pae) {
Exception e = pae.getException();
zi = (ZoneInfo) input.readObject();
} catch (Exception e) {
if (!(e instanceof OptionalDataException)) {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;

View File

@ -32,8 +32,6 @@ import java.io.FileReader;
import java.io.InputStream;
import java.io.IOException;
import java.io.Serializable;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.concurrent.ConcurrentHashMap;
@ -213,63 +211,57 @@ public final class Currency implements Serializable {
initStatic();
}
@SuppressWarnings("removal")
private static void initStatic() {
AccessController.doPrivileged(new PrivilegedAction<>() {
@Override
public Void run() {
try {
try (InputStream in = getClass().getResourceAsStream("/java/util/currency.data")) {
if (in == null) {
throw new InternalError("Currency data not found");
}
DataInputStream dis = new DataInputStream(new BufferedInputStream(in));
if (dis.readInt() != MAGIC_NUMBER) {
throw new InternalError("Currency data is possibly corrupted");
}
formatVersion = dis.readInt();
if (formatVersion != VALID_FORMAT_VERSION) {
throw new InternalError("Currency data format is incorrect");
}
dataVersion = dis.readInt();
mainTable = readIntArray(dis, A_TO_Z * A_TO_Z);
int scCount = dis.readInt();
specialCasesList = readSpecialCases(dis, scCount);
int ocCount = dis.readInt();
otherCurrenciesList = readOtherCurrencies(dis, ocCount);
}
} catch (IOException e) {
throw new InternalError(e);
}
// look for the properties file for overrides
String propsFile = System.getProperty("java.util.currency.data");
if (propsFile == null) {
propsFile = StaticProperty.javaHome() + File.separator + "lib" +
File.separator + "currency.properties";
try {
try (InputStream in = Currency.class.getResourceAsStream("/java/util/currency.data")) {
if (in == null) {
throw new InternalError("Currency data not found");
}
try {
File propFile = new File(propsFile);
if (propFile.exists()) {
Properties props = new Properties();
try (FileReader fr = new FileReader(propFile)) {
props.load(fr);
}
Pattern propertiesPattern =
Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*" +
"(\\d+)\\s*,?\\s*(\\d{4}-\\d{2}-\\d{2}T\\d{2}:" +
"\\d{2}:\\d{2})?");
List<CurrencyProperty> currencyEntries
= getValidCurrencyData(props, propertiesPattern);
currencyEntries.forEach(Currency::replaceCurrencyData);
}
} catch (IOException e) {
CurrencyProperty.info("currency.properties is ignored"
+ " because of an IOException", e);
DataInputStream dis = new DataInputStream(new BufferedInputStream(in));
if (dis.readInt() != MAGIC_NUMBER) {
throw new InternalError("Currency data is possibly corrupted");
}
return null;
formatVersion = dis.readInt();
if (formatVersion != VALID_FORMAT_VERSION) {
throw new InternalError("Currency data format is incorrect");
}
dataVersion = dis.readInt();
mainTable = readIntArray(dis, A_TO_Z * A_TO_Z);
int scCount = dis.readInt();
specialCasesList = readSpecialCases(dis, scCount);
int ocCount = dis.readInt();
otherCurrenciesList = readOtherCurrencies(dis, ocCount);
}
});
} catch (IOException e) {
throw new InternalError(e);
}
// look for the properties file for overrides
String propsFile = System.getProperty("java.util.currency.data");
if (propsFile == null) {
propsFile = StaticProperty.javaHome() + File.separator + "lib" +
File.separator + "currency.properties";
}
try {
File propFile = new File(propsFile);
if (propFile.exists()) {
Properties props = new Properties();
try (FileReader fr = new FileReader(propFile)) {
props.load(fr);
}
Pattern propertiesPattern =
Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*" +
"(\\d+)\\s*,?\\s*(\\d{4}-\\d{2}-\\d{2}T\\d{2}:" +
"\\d{2}:\\d{2})?");
List<CurrencyProperty> currencyEntries
= getValidCurrencyData(props, propertiesPattern);
currencyEntries.forEach(Currency::replaceCurrencyData);
}
} catch (IOException e) {
CurrencyProperty.info("currency.properties is ignored"
+ " because of an IOException", e);
}
}
/**

View File

@ -1216,10 +1216,6 @@ public final class Locale implements Cloneable, Serializable {
if (newLocale == null)
throw new NullPointerException("Can't set default locale to NULL");
@SuppressWarnings("removal")
SecurityManager sm = System.getSecurityManager();
if (sm != null) sm.checkPermission(new PropertyPermission
("user.language", "write"));
switch (category) {
case DISPLAY:
defaultDisplayLocale = newLocale;

View File

@ -949,9 +949,6 @@ public class Properties extends Hashtable<Object,Object> {
}
private static void writeDateComment(BufferedWriter bw) throws IOException {
// value of java.properties.date system property isn't sensitive
// and so doesn't need any security manager checks to make the value accessible
// to the callers
String sysPropVal = StaticProperty.javaPropertiesDate();
if (sysPropVal != null && !sysPropVal.isEmpty()) {
writeComments(bw, sysPropVal);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1996, 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2024, 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
@ -46,7 +46,6 @@ import java.io.IOException;
import java.nio.charset.MalformedInputException;
import java.nio.charset.UnmappableCharacterException;
import sun.nio.cs.ISO_8859_1;
import sun.security.action.GetPropertyAction;
import sun.util.PropertyResourceBundleCharset;
import sun.util.ResourceBundleEnumeration;
@ -132,9 +131,9 @@ public class PropertyResourceBundle extends ResourceBundle {
// Check whether the strict encoding is specified.
// The possible encoding is either "ISO-8859-1" or "UTF-8".
private static final String encoding = GetPropertyAction
.privilegedGetProperty("java.util.PropertyResourceBundle.encoding", "")
.toUpperCase(Locale.ROOT);
private static final String encoding =
System.getProperty("java.util.PropertyResourceBundle.encoding", "")
.toUpperCase(Locale.ROOT);
/**
* Creates a property resource bundle from an {@link java.io.InputStream

View File

@ -42,7 +42,6 @@ package java.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
@ -53,10 +52,6 @@ import java.lang.reflect.Modifier;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.jar.JarEntry;
@ -70,12 +65,9 @@ import jdk.internal.access.SharedSecrets;
import jdk.internal.reflect.CallerSensitive;
import jdk.internal.reflect.Reflection;
import jdk.internal.util.ReferencedKeyMap;
import sun.security.action.GetPropertyAction;
import sun.util.locale.BaseLocale;
import sun.util.resources.Bundles;
import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
/**
*
@ -581,10 +573,8 @@ public abstract class ResourceBundle {
return locale;
}
@SuppressWarnings("removal")
private static ClassLoader getLoader(Module module) {
PrivilegedAction<ClassLoader> pa = module::getClassLoader;
return AccessController.doPrivileged(pa);
return module.getClassLoader();
}
/**
@ -1506,15 +1496,12 @@ public abstract class ResourceBundle {
}
private static class ResourceBundleControlProviderHolder {
private static final PrivilegedAction<List<ResourceBundleControlProvider>> pa =
() -> ServiceLoader.load(ResourceBundleControlProvider.class,
ClassLoader.getSystemClassLoader()).stream()
.map(ServiceLoader.Provider::get)
.toList();
@SuppressWarnings("removal")
private static final List<ResourceBundleControlProvider> CONTROL_PROVIDERS =
AccessController.doPrivileged(pa);
ServiceLoader.load(ResourceBundleControlProvider.class,
ClassLoader.getSystemClassLoader()).stream()
.map(ServiceLoader.Provider::get)
.toList();
private static Control getControl(String baseName) {
return CONTROL_PROVIDERS.isEmpty() ?
@ -1594,13 +1581,6 @@ public abstract class ResourceBundle {
Control control) {
Objects.requireNonNull(module);
Module callerModule = getCallerModule(caller);
if (callerModule != module) {
@SuppressWarnings("removal")
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(GET_CLASSLOADER_PERMISSION);
}
}
return getBundleImpl(callerModule, module, baseName, locale, control);
}
@ -1885,7 +1865,6 @@ public abstract class ResourceBundle {
* Returns the service type of the given baseName that is visible
* to the given class loader
*/
@SuppressWarnings("removal")
private static Class<ResourceBundleProvider>
getResourceBundleProviderType(String baseName, ClassLoader loader)
{
@ -1900,27 +1879,20 @@ public abstract class ResourceBundle {
// Use the class loader of the getBundle caller so that the caller's
// visibility of the provider type is checked.
return AccessController.doPrivileged(
new PrivilegedAction<>() {
@Override
public Class<ResourceBundleProvider> run() {
try {
Class<?> c = Class.forName(providerName, false, loader);
if (ResourceBundleProvider.class.isAssignableFrom(c)) {
@SuppressWarnings("unchecked")
Class<ResourceBundleProvider> s = (Class<ResourceBundleProvider>) c;
return s;
}
} catch (ClassNotFoundException e) {}
return null;
}
});
try {
Class<?> c = Class.forName(providerName, false, loader);
if (ResourceBundleProvider.class.isAssignableFrom(c)) {
@SuppressWarnings("unchecked")
Class<ResourceBundleProvider> s = (Class<ResourceBundleProvider>) c;
return s;
}
} catch (ClassNotFoundException _) {}
return null;
}
/**
* Loads ResourceBundle from service providers.
*/
@SuppressWarnings("removal")
private static ResourceBundle loadBundleFromProviders(String baseName,
Locale locale,
ServiceLoader<ResourceBundleProvider> providers,
@ -1928,34 +1900,28 @@ public abstract class ResourceBundle {
{
if (providers == null) return null;
return AccessController.doPrivileged(
new PrivilegedAction<>() {
public ResourceBundle run() {
for (Iterator<ResourceBundleProvider> itr = providers.iterator(); itr.hasNext(); ) {
try {
ResourceBundleProvider provider = itr.next();
if (cacheKey != null && cacheKey.callerHasProvider == null
&& cacheKey.getModule() == provider.getClass().getModule()) {
cacheKey.callerHasProvider = Boolean.TRUE;
}
ResourceBundle bundle = provider.getBundle(baseName, locale);
trace("provider %s %s locale: %s bundle: %s%n", provider, baseName, locale, bundle);
if (bundle != null) {
return bundle;
}
} catch (ServiceConfigurationError | SecurityException e) {
if (cacheKey != null) {
cacheKey.setCause(e);
}
}
}
if (cacheKey != null && cacheKey.callerHasProvider == null) {
cacheKey.callerHasProvider = Boolean.FALSE;
}
return null;
}
});
for (Iterator<ResourceBundleProvider> itr = providers.iterator(); itr.hasNext(); ) {
try {
ResourceBundleProvider provider = itr.next();
if (cacheKey != null && cacheKey.callerHasProvider == null
&& cacheKey.getModule() == provider.getClass().getModule()) {
cacheKey.callerHasProvider = Boolean.TRUE;
}
ResourceBundle bundle = provider.getBundle(baseName, locale);
trace("provider %s %s locale: %s bundle: %s%n", provider, baseName, locale, bundle);
if (bundle != null) {
return bundle;
}
} catch (ServiceConfigurationError e) {
if (cacheKey != null) {
cacheKey.setCause(e);
}
}
}
if (cacheKey != null && cacheKey.callerHasProvider == null) {
cacheKey.callerHasProvider = Boolean.FALSE;
}
return null;
}
/*
@ -3153,7 +3119,6 @@ public abstract class ResourceBundle {
return bundle;
}
@SuppressWarnings("removal")
private ResourceBundle newBundle0(String bundleName, String format,
ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
@ -3177,28 +3142,20 @@ public abstract class ResourceBundle {
bundleClass.getName() + " in " + m.toString());
}
try {
Constructor<ResourceBundle> ctor = AccessController.doPrivileged(
new PrivilegedExceptionAction<>() {
@Override
public Constructor<ResourceBundle> run() throws NoSuchMethodException {
return bundleClass.getDeclaredConstructor();
}
});
Constructor<ResourceBundle> ctor = bundleClass.getDeclaredConstructor();
if (!Modifier.isPublic(ctor.getModifiers())) {
throw new IllegalAccessException("no-arg constructor in " +
bundleClass.getName() + " is not publicly accessible.");
}
// java.base may not be able to read the bundleClass's module.
PrivilegedAction<Void> pa1 = () -> { ctor.setAccessible(true); return null; };
AccessController.doPrivileged(pa1);
ctor.setAccessible(true);
bundle = ctor.newInstance((Object[]) null);
} catch (InvocationTargetException e) {
uncheckedThrow(e);
} catch (PrivilegedActionException e) {
assert e.getCause() instanceof NoSuchMethodException;
} catch (NoSuchMethodException e) {
throw new InstantiationException("public no-arg constructor " +
"does not exist in " + bundleClass.getName());
"does not exist in " + bundleClass.getName());
}
} else {
throw new ClassCastException(c.getName()
@ -3212,27 +3169,16 @@ public abstract class ResourceBundle {
return bundle;
}
final boolean reloadFlag = reload;
InputStream stream = null;
try {
stream = AccessController.doPrivileged(
new PrivilegedExceptionAction<>() {
public InputStream run() throws IOException {
URL url = loader.getResource(resourceName);
if (url == null) return null;
URL url = loader.getResource(resourceName);
if (url == null) return null;
URLConnection connection = url.openConnection();
if (reloadFlag) {
// Disable caches to get fresh data for
// reloading.
connection.setUseCaches(false);
}
return connection.getInputStream();
}
});
} catch (PrivilegedActionException e) {
throw (IOException) e.getCause();
URLConnection connection = url.openConnection();
if (reload) {
// Disable caches to get fresh data for
// reloading.
connection.setUseCaches(false);
}
InputStream stream = connection.getInputStream();
if (stream != null) {
try {
bundle = new PropertyResourceBundle(stream);
@ -3563,7 +3509,6 @@ public abstract class ResourceBundle {
/**
* Returns a new ResourceBundle instance of the given bundleClass
*/
@SuppressWarnings("removal")
static ResourceBundle newResourceBundle(Class<? extends ResourceBundle> bundleClass) {
try {
@SuppressWarnings("unchecked")
@ -3573,8 +3518,7 @@ public abstract class ResourceBundle {
return null;
}
// java.base may not be able to read the bundleClass's module.
PrivilegedAction<Void> pa = () -> { ctor.setAccessible(true); return null;};
AccessController.doPrivileged(pa);
ctor.setAccessible(true);
try {
return ctor.newInstance((Object[]) null);
} catch (InvocationTargetException e) {
@ -3602,9 +3546,7 @@ public abstract class ResourceBundle {
{
String bundleName = Control.INSTANCE.toBundleName(baseName, locale);
try {
PrivilegedAction<Class<?>> pa = () -> Class.forName(module, bundleName);
@SuppressWarnings("removal")
Class<?> c = AccessController.doPrivileged(pa, null, GET_CLASSLOADER_PERMISSION);
Class<?> c = Class.forName(module, bundleName);
trace("local in %s %s caller %s: %s%n", module, bundleName, callerModule, c);
if (c == null) {
@ -3662,56 +3604,46 @@ public abstract class ResourceBundle {
{
String bundleName = Control.INSTANCE.toBundleName(baseName, locale);
PrivilegedAction<InputStream> pa = () -> {
try {
String resourceName = Control.INSTANCE
.toResourceName0(bundleName, "properties");
if (resourceName == null) {
return null;
}
trace("local in %s %s caller %s%n", module, resourceName, callerModule);
String resourceName = Control.INSTANCE
.toResourceName0(bundleName, "properties");
if (resourceName == null) {
return null;
}
trace("local in %s %s caller %s%n", module, resourceName, callerModule);
// if the package is in the given module but not opened
// locate it from the given module first.
String pn = toPackageName(bundleName);
trace(" %s/%s is accessible to %s : %s%n",
module.getName(), pn, callerModule,
isAccessible(callerModule, module, pn));
if (isAccessible(callerModule, module, pn)) {
InputStream in = module.getResourceAsStream(resourceName);
if (in != null) {
return in;
}
}
ClassLoader loader = module.getClassLoader();
trace("loader for %s %s caller %s%n", module, resourceName, callerModule);
try {
if (loader != null) {
return loader.getResourceAsStream(resourceName);
} else {
URL url = BootLoader.findResource(resourceName);
if (url != null) {
return url.openStream();
}
}
} catch (Exception e) {}
return null;
} catch (IOException e) {
throw new UncheckedIOException(e);
// if the package is in the given module but not opened
// locate it from the given module first.
String pn = toPackageName(bundleName);
trace(" %s/%s is accessible to %s : %s%n",
module.getName(), pn, callerModule,
isAccessible(callerModule, module, pn));
if (isAccessible(callerModule, module, pn)) {
InputStream in = module.getResourceAsStream(resourceName);
if (in != null) {
return new PropertyResourceBundle(in);
}
};
}
ClassLoader loader = module.getClassLoader();
trace("loader for %s %s caller %s%n", module, resourceName, callerModule);
try (@SuppressWarnings("removal") InputStream stream = AccessController.doPrivileged(pa)) {
try {
InputStream stream = null;
if (loader != null) {
stream = loader.getResourceAsStream(resourceName);
} else {
URL url = BootLoader.findResource(resourceName);
if (url != null) {
stream = url.openStream();
}
}
if (stream != null) {
return new PropertyResourceBundle(stream);
} else {
return null;
}
} catch (UncheckedIOException e) {
throw e.getCause();
} catch (Exception e) {
return null;
}
}
@ -3722,8 +3654,8 @@ public abstract class ResourceBundle {
}
private static final boolean TRACE_ON = Boolean.parseBoolean(
GetPropertyAction.privilegedGetProperty("resource.bundle.debug", "false"));
private static final boolean TRACE_ON = Boolean.getBoolean(
System.getProperty("resource.bundle.debug", "false"));
private static void trace(String format, Object... params) {
if (TRACE_ON)

View File

@ -43,7 +43,6 @@ import java.time.ZoneId;
import java.time.ZoneOffset;
import jdk.internal.util.StaticProperty;
import sun.security.action.GetPropertyAction;
import sun.util.calendar.ZoneInfo;
import sun.util.calendar.ZoneInfoFile;
import sun.util.locale.provider.TimeZoneNameUtility;
@ -683,7 +682,7 @@ public abstract class TimeZone implements Serializable, Cloneable {
private static synchronized TimeZone setDefaultZone() {
TimeZone tz;
// get the time zone ID from the system properties
Properties props = GetPropertyAction.privilegedGetProperties();
Properties props = System.getProperties();
String zoneID = props.getProperty("user.timezone");
// if the time zone ID is not set (yet), perform the
@ -729,12 +728,6 @@ public abstract class TimeZone implements Serializable, Cloneable {
*/
public static void setDefault(TimeZone zone)
{
@SuppressWarnings("removal")
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new PropertyPermission
("user.timezone", "write"));
}
// by saving a defensive clone and returning a clone in getDefault() too,
// the defaultTimeZone instance is isolated from user code which makes it
// effectively immutable. This is important to avoid races when the

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2024, 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
@ -26,9 +26,6 @@ package java.util;
import sun.util.logging.PlatformLogger;
import java.security.AccessController;
import java.security.PrivilegedAction;
/**
* Utility class for detecting inadvertent uses of boxing in
* {@code java.util} classes. The detection is turned on or off based on
@ -49,9 +46,7 @@ final class Tripwire {
private static final String TRIPWIRE_PROPERTY = "org.openjdk.java.util.stream.tripwire";
/** Should debugging checks be enabled? */
@SuppressWarnings("removal")
static final boolean ENABLED = AccessController.doPrivileged(
(PrivilegedAction<Boolean>) () -> Boolean.getBoolean(TRIPWIRE_PROPERTY));
static final boolean ENABLED = Boolean.getBoolean(TRIPWIRE_PROPERTY);
private Tripwire() { }

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2024, 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
@ -32,12 +32,9 @@ import sun.util.resources.Bundles;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
/**
* {@code AbstractResourceBundleProvider} is an abstract class that provides
@ -78,11 +75,10 @@ import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
* return null;
* }
* }}</pre></blockquote>
*
* <p>
* Refer to {@link ResourceBundleProvider} for details.
*
* @see <a href="../ResourceBundle.html#resource-bundle-modules">
* Resource Bundles and Named Modules</a>
* @see ResourceBundle##resource-bundle-modules Resource Bundles and Named Modules
* @since 9
*/
public abstract class AbstractResourceBundleProvider implements ResourceBundleProvider {
@ -222,11 +218,8 @@ public abstract class AbstractResourceBundleProvider implements ResourceBundlePr
* Returns the ResourceBundle of .class format if found in the module
* of this provider.
*/
private static ResourceBundle loadResourceBundle(Module module, String bundleName)
{
PrivilegedAction<Class<?>> pa = () -> Class.forName(module, bundleName);
@SuppressWarnings("removal")
Class<?> c = AccessController.doPrivileged(pa, null, GET_CLASSLOADER_PERMISSION);
private static ResourceBundle loadResourceBundle(Module module, String bundleName) {
Class<?> c = Class.forName(module, bundleName);
if (c != null && ResourceBundle.class.isAssignableFrom(c)) {
@SuppressWarnings("unchecked")
Class<ResourceBundle> bundleClass = (Class<ResourceBundle>) c;
@ -241,28 +234,17 @@ public abstract class AbstractResourceBundleProvider implements ResourceBundlePr
*/
private static ResourceBundle loadPropertyResourceBundle(Module module,
String bundleName)
throws IOException
{
throws IOException {
String resourceName = toResourceName(bundleName, "properties");
if (resourceName == null) {
return null;
}
PrivilegedAction<InputStream> pa = () -> {
try {
return module.getResourceAsStream(resourceName);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
};
try (@SuppressWarnings("removal") InputStream stream = AccessController.doPrivileged(pa)) {
if (stream != null) {
return new PropertyResourceBundle(stream);
} else {
return null;
}
} catch (UncheckedIOException e) {
throw e.getCause();
InputStream stream = module.getResourceAsStream(resourceName);
if (stream != null) {
return new PropertyResourceBundle(stream);
} else {
return null;
}
}

View File

@ -222,22 +222,10 @@ import java.util.Locale;
*/
public abstract class LocaleServiceProvider {
private static Void checkPermission() {
@SuppressWarnings("removal")
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("localeServiceProvider"));
}
return null;
}
private LocaleServiceProvider(Void ignore) { }
/**
* Initializes a new locale service provider.
*/
protected LocaleServiceProvider() {
this(checkPermission());
}
protected LocaleServiceProvider() {}
/**
* {@return an array of all locales for which this locale service provider

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2024, 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
@ -27,8 +27,6 @@ package java.util.spi;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Objects;
import java.util.Optional;
import java.util.ServiceLoader;
@ -178,18 +176,14 @@ public interface ToolProvider {
*
* @throws NullPointerException if {@code name} is {@code null}
*/
@SuppressWarnings("removal")
static Optional<ToolProvider> findFirst(String name) {
Objects.requireNonNull(name);
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
return AccessController.doPrivileged(
(PrivilegedAction<Optional<ToolProvider>>) () -> {
ServiceLoader<ToolProvider> sl =
ServiceLoader.load(ToolProvider.class, systemClassLoader);
return StreamSupport.stream(sl.spliterator(), false)
.filter(p -> p.name().equals(name))
.findFirst();
});
ServiceLoader<ToolProvider> sl =
ServiceLoader.load(ToolProvider.class, systemClassLoader);
return StreamSupport.stream(sl.spliterator(), false)
.filter(p -> p.name().equals(name))
.findFirst();
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2024, 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
@ -24,9 +24,6 @@
*/
package java.util.stream;
import java.security.AccessController;
import java.security.PrivilegedAction;
import sun.util.logging.PlatformLogger;
/**
@ -49,9 +46,7 @@ final class Tripwire {
private static final String TRIPWIRE_PROPERTY = "org.openjdk.java.util.stream.tripwire";
/** Should debugging checks be enabled? */
@SuppressWarnings("removal")
static final boolean ENABLED = AccessController.doPrivileged(
(PrivilegedAction<Boolean>) () -> Boolean.getBoolean(TRIPWIRE_PROPERTY));
static final boolean ENABLED = Boolean.getBoolean(TRIPWIRE_PROPERTY);
private Tripwire() { }