/* * Copyright (c) 2017, 2019, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/** * @test * @bug 8176537 * @summary Check JDK modules have no qualified export to any upgradeable module * @modules java.base/jdk.internal.module * @run main JdkQualifiedExportTest
*/
staticvoid checkExports(ModuleDescriptor md) { // build a map of upgradeable module to Exports that are qualified to it // skip the qualified exports
Map<String, Set<Exports>> targetToExports = new HashMap<>();
md.exports().stream()
.filter(Exports::isQualified)
.forEach(e -> e.targets().stream()
.filter(mn -> accept(md, mn))
.forEach(t -> targetToExports.computeIfAbsent(t, _k -> new HashSet<>())
.add(e)));
if (targetToExports.size() > 0) {
String mn = md.name();
// no qualified exports to upgradeable modules are expected // except the known exception cases if (targetToExports.entrySet().stream()
.flatMap(e -> e.getValue().stream())
.anyMatch(e -> !KNOWN_EXCEPTIONS.contains(mn + "/" + e.source()))) { thrownew RuntimeException(mn + " can't export package to upgradeable modules");
}
}
}
staticvoid checkOpens(ModuleDescriptor md) { // build a map of upgradeable module to Exports that are qualified to it // skip the qualified exports
Map<String, Set<Opens>> targetToOpens = new HashMap<>();
md.opens().stream()
.filter(Opens::isQualified)
.forEach(e -> e.targets().stream()
.filter(mn -> accept(md, mn))
.forEach(t -> targetToOpens.computeIfAbsent(t, _k -> new HashSet<>())
.add(e)));
if (targetToOpens.size() > 0) {
String mn = md.name();
thrownew RuntimeException(mn + " can't open package to upgradeable modules");
}
}
/** * Returns true if target is an upgradeable module but not required * by the source module directly and indirectly.
*/ privatestaticboolean accept(ModuleDescriptor source, String target) { if (HashedModules.contains(target)) returnfalse;
if (!ModuleFinder.ofSystem().find(target).isPresent()) returnfalse;
/* * Returns true if the named module is tied with java.base, * i.e. non-upgradeable
*/ staticboolean contains(String mn) { return HASHED_MODULES.contains(mn);
}
}
}
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.