> On Jun 11, 2016, at 9:03 PM, Mandy Chung <mandy.ch...@oracle.com> wrote:
> 
> 
>> On Jun 10, 2016, at 12:20 PM, Jim Laskey (Oracle) <james.las...@oracle.com> 
>> wrote:
>> 
>> http://cr.openjdk.java.net/~jlaskey/8159206/webrev/index.html 
>> <http://cr.openjdk.java.net/~jlaskey/8159206/webrev/index.html>https://bugs.openjdk.java.net/browse/JDK-8159206
>>  <https://bugs.openjdk.java.net/browse/JDK-8159206>
>> 
> 
> 
> ResourceFilter.java - since you are in this file, we could take the 
> opportunity to improve the code.
> 
> 54     public ResourceFilter(String[] patterns, boolean exclude) throws 
> IOException {
> 
> ResourceFilter is constructed by several plugins with this pattern:
>   predicate = new ResourceFilter(Utils.listParser.apply(exclude), true);
> 
> or IncludeLocalesPlugin creates the filter with exclude=false:
>   predicate = new ResourceFilter(Utils.listParser.apply(value), false);
> 
> I suggest to change ResourceFilter to define static factory methods such as:
>   static ResourceFilter excludeFilter(List<String> patterns)
>   static ResourceFilter includeFilter(List<String> patterns)
> 
> Alss Util::listParser returns a List<String> instead of String[] and return 
> an empty list when argument == null.
> 
> This pattern is used in multiple places.
> private static final FileSystem JRT_FILE_SYSTEM = Utils.jrtFileSystem();
> PathMatcher matcher = Utils.getPathMatcher(JRT_FILE_SYSTEM, line);
> 
> You can use Utils::getPathMatcher(String pattern) and cache JRT_FILE_SYSTEM 
> in Utils class.


Done.  Webrev updated.


> 
>  62                     if (file.exists()) {
> 
> Should it fail if the file does not exist?

Resistance from Claes and build team on this.  Silent fail keeps jlink scripts 
simple.  I added a warning message if the file is missing.


> 
> test/tools/jlink/plugins/CompressorPluginTest.java
> 106                 "*Exception.class,^*IOException.class");
> 
> The original test has includes and excludes.  Perhaps you can use regex 
> syntax here.  New test cases with regex: and glob: would be good to add (the 
> existing tests cover the default without specifying the syntax).

Left test alone.  Added variations of patterns to the ResourceFilterTest 
(proper place.)

> 
> I also reviewed this patch together with JDK-8158402 which causes this 
> regression:
>  http://cr.openjdk.java.net/~jlaskey/8158402/webrev
> 
> My suggestion on the help message 
> 
> $ jmod —-help
> 
>  --exclude <pattern>                Exclude files, given as a PATTERN    
>  --hash-modules <pattern> 
> 
> The default for exclude pattern is glob-syntax pattern whereas hash-modules 
> is a regex pattern of module names.  It may be okay to overload —-exclude 
> option to accept “regex:<pattern>” and the description needs to be made 
> clear.  Alternative is to have a different option to take regex. 
> 
> Maybe 
> —-exclude [syntax:]<pattern> 
> --hash-modules <pattern>
> 
> and specify the valid syntax.
> 
> $ jlink —-list-plugins
> 
> Plugin Name: exclude-files
> Option: --exclude-files=<files to exclude | files of excluded files>
> Description: Specify files to exclude. e.g.: *.diz, /java.base/native/client/*
> 
> Plugin Name: exclude-resources
> Option: --exclude-resources=<resources to exclude | file of excluded 
> resources>
> Description: Specify resources to exclude. e.g.: *.jcov, */META-INF/*
> 
> Plugin Name: order-resources
> Option: --order-resources=<paths in priority order | file with resource paths>
> Description: Order resources. e.g.: */module-info.class,/java.base/java/lang/*
> 
> The option and examples need update to use syntax:pattern and states what are 
> valid syntax and the default.
> 
> $ jimage —-help
> 
>  --filter                          Filter entries for list or extract
>                                    Ex. /java.base/*, */module-info.class
> 
> should be 
>   —-filter [syntax:]pattern>
> 
> I assume you meant to give example “/java.base/**” to list all entries in 
> java.base.  Maybe show a regex example.

Since [syntax:]<pattern> is used in many many places, I added a general 
description of patterns to jmod/jimage/jlink and kept the individual options 
description simple.


> 
> Notice that jlink uses “=“ as the option separator whereas jmod and jimage 
> use space - just to mention it and CLI option consistency is on the list to 
> be examined.

It seems both “=" and space work (on the Mac at least.)  Claes mentioned that 
=/space was problematic on Windows.

> 
> Mandy
> 

Reply via email to