Re-examine ClassLoader.getPackage(s) methods

Mandy Chung mandy.chung at oracle.com
Mon Sep 28 19:36:47 UTC 2015



On 09/27/2015 01:29 AM, Alan Bateman wrote:
>
>
> On 26/09/2015 19:28, Mandy Chung wrote:
>>> On Sep 26, 2015, at 7:33 AM, Alan Bateman <Alan.Bateman at oracle.com> 
>>> wrote:
>>> This looks good. I think I would lean more to deprecating getPackage 
>>> as just too fragile and leads to difficult to diagnose bugs.
>> Are you also suggesting to deprecate ClassLoader::getPackages as well?
> The ordering of the elements in the array returned by CL::getPackages 
> is not specified so I think that is okay. However 
> CL#getPackage(String) is a significant hazard as the @apiNote explains 
> so I think it could be a candidate to deprecate.

Thanks for clarifying this as I think no need to deprecate CL::getPackags.

Custom class loader implementation may likely call CL::getPackage before 
calling definePackage to avoid IAE.  There isn't any issue filed 
reporting the returned Package contains unexpected properties.   On the 
other hand, now each class loader defines Package objects locally 
without walking the class loader hierarchy, I agree that deprecating 
CL::getPackage is the right thing.

I now make @apiNote in CL::getPackage to @deprecated.

      * @deprecated
      * If multiple class loaders delegate to each other and define classes
      * with the same package name, and one such loader relies on the 
lookup
      * behavior of {@code getPackage} to return a {@code Package} from
      * a parent loader, then the properties exposed by the {@code Package}
      * may not be as expected in the rest of the program.
      * For example, the {@code Package} will only expose annotations 
from the
      * {@code package-info.class} file defined by the parent loader, 
even if
      * annotations exist in a {@code package-info.class} file defined by
      * a child loader.  Instead, use the {@link 
ClassLoader#getDefinedPackage}
      * method which only returns a {@code Package} for the specified 
class loader.
      *

Mandy


More information about the jigsaw-dev mailing list