jdk/src/jdk.jartool/share/classes/sun/tools/jar/Validator.java
author sherman
Sat, 11 Feb 2017 21:31:43 -0800
changeset 43731 bc7110b230c1
parent 43331 0bcbff9e43aa
child 45004 ea3137042a61
permissions -rw-r--r--
8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files Reviewed-by: psandoz, mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     1
/*
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     4
 *
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    10
 *
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    15
 * accompanied this code).
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    16
 *
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    20
 *
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    23
 * questions.
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    24
 */
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    25
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    26
package sun.tools.jar;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    27
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    28
import java.io.File;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    29
import java.io.IOException;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    30
import java.io.InputStream;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    31
import java.lang.module.InvalidModuleDescriptorException;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    32
import java.lang.module.ModuleDescriptor;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    33
import java.lang.module.ModuleDescriptor.Exports;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    34
import java.lang.module.InvalidModuleDescriptorException;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    35
import java.lang.module.ModuleDescriptor.Opens;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    36
import java.lang.module.ModuleDescriptor.Provides;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    37
import java.lang.module.ModuleDescriptor.Requires;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    38
import java.util.Collections;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    39
import java.util.Comparator;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    40
import java.util.HashMap;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    41
import java.util.HashSet;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    42
import java.util.List;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    43
import java.util.Map;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    44
import java.util.Set;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    45
import java.util.function.Consumer;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    46
import java.util.jar.JarEntry;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    47
import java.util.jar.JarFile;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    48
import java.util.zip.ZipEntry;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    49
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    50
import static java.util.jar.JarFile.MANIFEST_NAME;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    51
import static sun.tools.jar.Main.VERSIONS_DIR;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
    52
import static sun.tools.jar.Main.VERSIONS_DIR_LENGTH;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    53
import static sun.tools.jar.Main.MODULE_INFO;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    54
import static sun.tools.jar.Main.getMsg;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    55
import static sun.tools.jar.Main.formatMsg;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    56
import static sun.tools.jar.Main.formatMsg2;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    57
import static sun.tools.jar.Main.toBinaryName;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    58
import static sun.tools.jar.Main.isModuleInfoEntry;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    59
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    60
final class Validator {
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    61
    private final static boolean DEBUG = Boolean.getBoolean("jar.debug");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    62
    private final  Map<String,FingerPrint> fps = new HashMap<>();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    63
    private final Main main;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    64
    private final JarFile jf;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    65
    private int oldVersion = -1;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    66
    private String currentTopLevelName;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    67
    private boolean isValid = true;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
    68
    private Set<String> concealedPkgs = Collections.emptySet();
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    69
    private ModuleDescriptor md;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
    70
    private String mdName;
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    71
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    72
    private Validator(Main main, JarFile jf) {
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    73
        this.main = main;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
    74
        this.jf = jf;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
    75
        checkModuleDescriptor(MODULE_INFO);
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    76
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    77
43099
47f8baf1fcbd 8172767: a bulk of tests failed with FileSystemException on Windows
sherman
parents: 43095
diff changeset
    78
    static boolean validate(Main main, JarFile jf) throws IOException {
47f8baf1fcbd 8172767: a bulk of tests failed with FileSystemException on Windows
sherman
parents: 43095
diff changeset
    79
        return new Validator(main, jf).validate();
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    80
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    81
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    82
    private boolean validate() {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    83
        try {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    84
            jf.stream()
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    85
              .filter(e -> !e.isDirectory() &&
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    86
                      !e.getName().equals(MANIFEST_NAME))
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
    87
              .sorted(ENTRY_COMPARATOR)
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    88
              .forEachOrdered(e -> validate(e));
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    89
            return isValid;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    90
        } catch (InvalidJarException e) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    91
            error(formatMsg("error.validator.bad.entry.name", e.getMessage()));
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    92
        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    93
        return false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    94
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    95
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    96
    private static class InvalidJarException extends RuntimeException {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    97
        private static final long serialVersionUID = -3642329147299217726L;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    98
        InvalidJarException(String msg) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
    99
            super(msg);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   100
        }
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   101
    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   102
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   103
    // sort base entries before versioned entries, and sort entry classes with
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   104
    // nested classes so that the top level class appears before the associated
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   105
    // nested class
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   106
    static Comparator<String> ENTRYNAME_COMPARATOR = (s1, s2) ->  {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   107
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   108
        if (s1.equals(s2)) return 0;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   109
        boolean b1 = s1.startsWith(VERSIONS_DIR);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   110
        boolean b2 = s2.startsWith(VERSIONS_DIR);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   111
        if (b1 && !b2) return 1;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   112
        if (!b1 && b2) return -1;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   113
        int n = 0; // starting char for String compare
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   114
        if (b1 && b2) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   115
            // normally strings would be sorted so "10" goes before "9", but
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   116
            // version number strings need to be sorted numerically
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   117
            n = VERSIONS_DIR.length();   // skip the common prefix
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   118
            int i1 = s1.indexOf('/', n);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   119
            int i2 = s1.indexOf('/', n);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   120
            if (i1 == -1) throw new InvalidJarException(s1);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   121
            if (i2 == -1) throw new InvalidJarException(s2);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   122
            // shorter version numbers go first
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   123
            if (i1 != i2) return i1 - i2;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   124
            // otherwise, handle equal length numbers below
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   125
        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   126
        int l1 = s1.length();
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   127
        int l2 = s2.length();
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   128
        int lim = Math.min(l1, l2);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   129
        for (int k = n; k < lim; k++) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   130
            char c1 = s1.charAt(k);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   131
            char c2 = s2.charAt(k);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   132
            if (c1 != c2) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   133
                // change natural ordering so '.' comes before '$'
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   134
                // i.e. top level classes come before nested classes
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   135
                if (c1 == '$' && c2 == '.') return 1;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   136
                if (c1 == '.' && c2 == '$') return -1;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   137
                return c1 - c2;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   138
            }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   139
        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   140
        return l1 - l2;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   141
    };
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   142
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   143
    static Comparator<ZipEntry> ENTRY_COMPARATOR =
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   144
        Comparator.comparing(ZipEntry::getName, ENTRYNAME_COMPARATOR);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   145
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   146
    /*
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   147
     *  Validator has state and assumes entries provided to accept are ordered
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   148
     *  from base entries first and then through the versioned entries in
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   149
     *  ascending version order.  Also, to find isolated nested classes,
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   150
     *  classes must be ordered so that the top level class is before the associated
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   151
     *  nested class(es).
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   152
    */
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   153
    public void validate(JarEntry je) {
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   154
        String entryName = je.getName();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   155
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   156
        // directories are always accepted
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   157
        if (entryName.endsWith("/")) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   158
            debug("%s is a directory", entryName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   159
            return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   160
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   161
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   162
        // validate the versioned module-info
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   163
        if (isModuleInfoEntry(entryName)) {
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   164
            if (!entryName.equals(mdName))
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   165
                checkModuleDescriptor(entryName);
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   166
            return;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   167
        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   168
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   169
        // figure out the version and basename from the JarEntry
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   170
        int version;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   171
        String basename;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   172
        String versionStr = null;;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   173
        if (entryName.startsWith(VERSIONS_DIR)) {
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   174
            int n = entryName.indexOf("/", VERSIONS_DIR_LENGTH);
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   175
            if (n == -1) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   176
                error(formatMsg("error.validator.version.notnumber", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   177
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   178
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   179
            }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   180
            versionStr = entryName.substring(VERSIONS_DIR_LENGTH, n);
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   181
            try {
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   182
                version = Integer.parseInt(versionStr);
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   183
            } catch (NumberFormatException x) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   184
                error(formatMsg("error.validator.version.notnumber", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   185
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   186
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   187
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   188
            if (n == entryName.length()) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   189
                error(formatMsg("error.validator.entryname.tooshort", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   190
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   191
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   192
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   193
            basename = entryName.substring(n + 1);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   194
        } else {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   195
            version = 0;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   196
            basename = entryName;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   197
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   198
        debug("\n===================\nversion %d %s", version, entryName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   199
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   200
        if (oldVersion != version) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   201
            oldVersion = version;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   202
            currentTopLevelName = null;
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   203
            if (md == null && versionStr != null) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   204
                // don't have a base module-info.class yet, try to see if
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   205
                // a versioned one exists
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   206
                checkModuleDescriptor(VERSIONS_DIR + versionStr + "/" + MODULE_INFO);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   207
            }
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   208
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   209
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   210
        // analyze the entry, keeping key attributes
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   211
        FingerPrint fp;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   212
        try (InputStream is = jf.getInputStream(je)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   213
            fp = new FingerPrint(basename, is.readAllBytes());
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   214
        } catch (IOException x) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   215
            error(x.getMessage());
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   216
            isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   217
            return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   218
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   219
        String internalName = fp.name();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   220
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   221
        // process a base entry paying attention to nested classes
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   222
        if (version == 0) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   223
            debug("base entry found");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   224
            if (fp.isNestedClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   225
                debug("nested class found");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   226
                if (fp.topLevelName().equals(currentTopLevelName)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   227
                    fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   228
                    return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   229
                }
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   230
                error(formatMsg("error.validator.isolated.nested.class", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   231
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   232
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   233
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   234
            // top level class or resource entry
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   235
            if (fp.isClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   236
                currentTopLevelName = fp.topLevelName();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   237
                if (!checkInternalName(entryName, basename, internalName)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   238
                    isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   239
                    return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   240
                }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   241
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   242
            fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   243
            return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   244
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   245
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   246
        // process a versioned entry, look for previous entry with same name
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   247
        FingerPrint matchFp = fps.get(internalName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   248
        debug("looking for match");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   249
        if (matchFp == null) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   250
            debug("no match found");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   251
            if (fp.isClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   252
                if (fp.isNestedClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   253
                    if (!checkNestedClass(version, entryName, internalName, fp)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   254
                        isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   255
                    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   256
                    return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   257
                }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   258
                if (fp.isPublicClass()) {
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   259
                    if (!isConcealed(internalName)) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   260
                        error(Main.formatMsg("error.validator.new.public.class", entryName));
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   261
                        isValid = false;
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   262
                        return;
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   263
                    }
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   264
                    warn(formatMsg("warn.validator.concealed.public.class", entryName));
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   265
                    debug("%s is a public class entry in a concealed package", entryName);
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   266
                }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   267
                debug("%s is a non-public class entry", entryName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   268
                fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   269
                currentTopLevelName = fp.topLevelName();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   270
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   271
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   272
            debug("%s is a resource entry");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   273
            fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   274
            return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   275
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   276
        debug("match found");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   277
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   278
        // are the two classes/resources identical?
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   279
        if (fp.isIdentical(matchFp)) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   280
            warn(formatMsg("warn.validator.identical.entry", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   281
            return;  // it's okay, just takes up room
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   282
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   283
        debug("sha1 not equal -- different bytes");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   284
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   285
        // ok, not identical, check for compatible class version and api
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   286
        if (fp.isClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   287
            if (fp.isNestedClass()) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   288
                if (!checkNestedClass(version, entryName, internalName, fp)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   289
                    isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   290
                }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   291
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   292
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   293
            debug("%s is a class entry", entryName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   294
            if (!fp.isCompatibleVersion(matchFp)) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   295
                error(formatMsg("error.validator.incompatible.class.version", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   296
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   297
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   298
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   299
            if (!fp.isSameAPI(matchFp)) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   300
                error(formatMsg("error.validator.different.api", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   301
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   302
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   303
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   304
            if (!checkInternalName(entryName, basename, internalName)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   305
                isValid = false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   306
                return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   307
            }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   308
            debug("fingerprints same -- same api");
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   309
            fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   310
            currentTopLevelName = fp.topLevelName();
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   311
            return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   312
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   313
        debug("%s is a resource", entryName);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   314
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   315
        warn(formatMsg("warn.validator.resources.with.same.name", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   316
        fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   317
        return;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   318
    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   319
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   320
    /**
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   321
     * Checks whether or not the given versioned module descriptor's attributes
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   322
     * are valid when compared against the root/base module descriptor.
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   323
     *
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   324
     * A versioned module descriptor must be identical to the root/base module
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   325
     * descriptor, with two exceptions:
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   326
     *  - A versioned descriptor can have different non-public `requires`
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   327
     *    clauses of platform ( `java.*` and `jdk.*` ) modules, and
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   328
     *  - A versioned descriptor can have different `uses` clauses, even of
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   329
     *    service types defined outside of the platform modules.
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   330
     */
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   331
    private void checkModuleDescriptor(String miName) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   332
        ZipEntry je = jf.getEntry(miName);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   333
        if (je != null) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   334
            try (InputStream jis = jf.getInputStream(je)) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   335
                ModuleDescriptor md = ModuleDescriptor.read(jis);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   336
                // Initialize the base md if it's not yet. A "base" md can be either the
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   337
                // root module-info.class or the first versioned module-info.class
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   338
                ModuleDescriptor base = this.md;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   339
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   340
                if (base == null) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   341
                    concealedPkgs = new HashSet<>(md.packages());
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   342
                    md.exports().stream().map(Exports::source).forEach(concealedPkgs::remove);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   343
                    md.opens().stream().map(Opens::source).forEach(concealedPkgs::remove);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   344
                    // must have the implementation class of the services it 'provides'.
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   345
                    if (md.provides().stream().map(Provides::providers)
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   346
                          .flatMap(List::stream)
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   347
                          .filter(p -> jf.getEntry(toBinaryName(p)) == null)
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   348
                          .peek(p -> error(formatMsg("error.missing.provider", p)))
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   349
                          .count() != 0) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   350
                        isValid = false;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   351
                        return;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   352
                    }
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   353
                    this.md = md;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   354
                    this.mdName = miName;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   355
                    return;
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   356
                }
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   357
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   358
                if (!base.name().equals(md.name())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   359
                    error(getMsg("error.validator.info.name.notequal"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   360
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   361
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   362
                if (!base.requires().equals(md.requires())) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   363
                    Set<Requires> baseRequires = base.requires();
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   364
                    for (Requires r : md.requires()) {
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   365
                        if (baseRequires.contains(r))
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   366
                            continue;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   367
                        if (r.modifiers().contains(Requires.Modifier.TRANSITIVE)) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   368
                            error(getMsg("error.validator.info.requires.transitive"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   369
                            isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   370
                        } else if (!isPlatformModule(r.name())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   371
                            error(getMsg("error.validator.info.requires.added"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   372
                            isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   373
                        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   374
                    }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   375
                    for (Requires r : baseRequires) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   376
                        Set<Requires> mdRequires = md.requires();
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   377
                        if (mdRequires.contains(r))
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   378
                            continue;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   379
                        if (!isPlatformModule(r.name())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   380
                            error(getMsg("error.validator.info.requires.dropped"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   381
                            isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   382
                        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   383
                    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   384
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   385
                if (!base.exports().equals(md.exports())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   386
                    error(getMsg("error.validator.info.exports.notequal"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   387
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   388
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   389
                if (!base.opens().equals(md.opens())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   390
                    error(getMsg("error.validator.info.opens.notequal"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   391
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   392
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   393
                if (!base.provides().equals(md.provides())) {
43331
0bcbff9e43aa 8173396: Error message issue with jar tool API validator
sherman
parents: 43099
diff changeset
   394
                    error(getMsg("error.validator.info.provides.notequal"));
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   395
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   396
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   397
                if (!base.mainClass().equals(md.mainClass())) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   398
                    error(formatMsg("error.validator.info.manclass.notequal", je.getName()));
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   399
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   400
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   401
                if (!base.version().equals(md.version())) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   402
                    error(formatMsg("error.validator.info.version.notequal", je.getName()));
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   403
                    isValid = false;
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   404
                }
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   405
            } catch (Exception x) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   406
                error(x.getMessage() + " : " + miName);
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   407
                this.isValid = false;
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   408
            }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   409
        }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   410
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   411
43731
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   412
    private static boolean isPlatformModule(String name) {
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   413
        return name.startsWith("java.") || name.startsWith("jdk.");
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   414
    }
bc7110b230c1 8165640: Enhance jar tool to allow module-info in versioned directories but not in base in modular multi-release jar files
sherman
parents: 43331
diff changeset
   415
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   416
    private boolean checkInternalName(String entryName, String basename, String internalName) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   417
        String className = className(basename);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   418
        if (internalName.equals(className)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   419
            return true;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   420
        }
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   421
        error(formatMsg2("error.validator.names.mismatch",
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   422
                entryName, internalName.replace("/", ".")));
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   423
        return false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   424
    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   425
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   426
    private boolean checkNestedClass(int version, String entryName, String internalName, FingerPrint fp) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   427
        debug("%s is a nested class entry in top level class %s", entryName, fp.topLevelName());
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   428
        if (fp.topLevelName().equals(currentTopLevelName)) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   429
            debug("%s (top level class) was accepted", fp.topLevelName());
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   430
            fps.put(internalName, fp);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   431
            return true;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   432
        }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   433
        debug("top level class was not accepted");
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   434
        error(formatMsg("error.validator.isolated.nested.class", entryName));
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   435
        return false;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   436
    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   437
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   438
    private String className(String entryName) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   439
        return entryName.endsWith(".class") ? entryName.substring(0, entryName.length() - 6) : null;
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   440
    }
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   441
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   442
    private boolean isConcealed(String internalName) {
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   443
        if (concealedPkgs.isEmpty()) {
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   444
            return false;
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   445
        }
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   446
        int idx = internalName.lastIndexOf('/');
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   447
        String pkgName = idx != -1 ? internalName.substring(0, idx).replace('/', '.') : "";
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   448
        return concealedPkgs.contains(pkgName);
41754
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   449
    }
8b7c8d5e9a0d 8164805: Fail to create a MR modular JAR with a versioned entry of a concealed package
sdrach
parents: 40251
diff changeset
   450
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   451
    private void debug(String fmt, Object... args) {
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   452
        if (DEBUG) System.err.format(fmt, args);
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   453
    }
43095
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   454
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   455
    private void error(String msg) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   456
        main.error(msg);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   457
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   458
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   459
    private void warn(String msg) {
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   460
        main.warn(msg);
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   461
    }
336dfda4ae89 8172432: jar cleanup/update for module and mrm jar
sherman
parents: 41754
diff changeset
   462
40251
481b890e50a3 8158295: Add a multi-release jar validation mechanism to jar tool
sdrach
parents:
diff changeset
   463
}