diff -r e73a9c4ada83 -r d198987d85e1 jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardPermission.java --- a/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardPermission.java Thu Aug 11 23:41:48 2016 +0300 +++ b/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardPermission.java Fri Aug 12 00:10:07 2016 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2016, 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 @@ -118,7 +118,7 @@ /** * @serial */ - private volatile String actions; + private final String actions; /** * Constructs a new CardPermission with the specified actions. @@ -143,10 +143,14 @@ throw new NullPointerException(); } mask = getMask(actions); + this.actions = getActions(mask); } private static int getMask(String actions) { - if ((actions == null) || (actions.length() == 0)) { + if (actions == null) { + return 0; + } + if (actions.length() == 0) { throw new IllegalArgumentException("actions must not be empty"); } @@ -177,6 +181,9 @@ } private static String getActions(int mask) { + if (mask == 0) { + return null; + } if (mask == A_ALL) { return S_ALL; } @@ -200,9 +207,6 @@ * @return the canonical string representation of the actions. */ public String getActions() { - if (actions == null) { - actions = getActions(mask); - } return actions; } @@ -278,10 +282,6 @@ private void writeObject(ObjectOutputStream s) throws IOException { // Write out the actions. The superclass takes care of the name. - // Call getActions to make sure actions field is initialized - if (actions == null) { - getActions(); - } s.defaultWriteObject(); } @@ -291,5 +291,4 @@ s.defaultReadObject(); mask = getMask(actions); } - }