/* * Copyright (c) 2016, 2021, 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.
*/
publicstaticvoid main(String... args) throws Exception { new Modules().runTests();
}
@Test publicvoid testBasicMoption(Path base) throws Exception {
Files.createDirectory(base);
Path src = base.resolve("src");
ModuleBuilder mb = new ModuleBuilder(tb, "m1");
mb.comment("The first module.")
.exports("pub")
.classes("package pub; /** Class A */ public class A {}")
.classes("package pro; /** Class B */ public class B {}")
.write(src);
execTask("--module-source-path", src.toString(), "--module", "m1");
checkModulesSpecified("m1");
checkPackagesIncluded("pub");
checkTypesIncluded("pub.A");
}
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("The first module.")
.exports("m1pub")
.requires("m2")
.classes("package m1pub; /** Class A */ public class A {}")
.classes("package m1pro; /** Class B */ public class B {}")
.write(src);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("m2pub")
.classes("package m2pub; /** Class A */ public class A {}")
.classes("package m2pro; /** Class B */ public class B {}")
.write(src);
execTask("--module-source-path", src.toString(), "--module", "m1,m2");
checkModulesSpecified("m1", "m2");
checkPackagesIncluded("m1pub", "m2pub");
checkTypesIncluded("m1pub.A", "m2pub.A");
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("The first module.")
.exports("m1pub")
.requires("m2")
.classes("package m1pub; /** Class A */ public class A {}")
.classes("package m1pro; /** Class B */ public class B {}")
.write(src);
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("The first module.")
.exports("m1pub")
.requires("m2")
.classes("package m1pub; /** Class A */ public class A {}")
.classes("package m1pro; /** Class B */ public class B {}")
.write(src);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("m2pub")
.classes("package m2pub; /** Class A */ public class A {}")
.classes("package m2pro; /** Class B */ public class B {}")
.write(src);
execTask("--module-source-path", src.toString(), "--module", "m1", "--module", "m2");
checkModulesSpecified("m1", "m2");
checkPackagesIncluded("m1pub", "m2pub");
checkTypesIncluded("m1pub.A", "m2pub.A");
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.exports("pkg1")
.classes("package pkg1; /** Class A */ public class A { }")
.build(modulePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.requires("m1")
.classes("package pkg2; /** Class B */ public class B { /** Field f */ public pkg1.A f; }")
.write(src);
execTask("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--module", "m2");
checkModulesSpecified("m2");
checkPackagesIncluded("pkg2");
checkMembersSelected("pkg2.B.f");
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.exports("pkg1")
.classes("package pkg1; /** Class A */ public class A { }")
.build(modulePath);
ModuleBuilder mbUpgrade = new ModuleBuilder(tb, "m1");
mbUpgrade.comment("Module on upgrade module path.")
.exports("pkg1")
.classes("package pkg1; /** Class C */ public class C { }")
.build(upgradePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.requires("m1")
.classes("package pkg2; /** Class B */ public class B { /** Field f */ public pkg1.C f; }")
.write(src);
execTask("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--upgrade-module-path", upgradePath.toString(), "--module", "m2");
checkModulesSpecified("m2");
checkPackagesIncluded("pkg2");
checkMembersSelected("pkg2.B.f");
// dependency from module path
ModuleBuilder mb3 = new ModuleBuilder(tb, "m3");
mb3.comment("The third module.")
.exports("pkg3")
.requires("m1")
.classes("package pkg3; /** Class Z */ public class Z { /** Field f */ public pkg1.A f; }")
.write(src);
execNegativeTask("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--upgrade-module-path", upgradePath.toString(), "--module", "m3");
assertMessagePresent("Z.java:1: error: cannot find symbol");
}
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.exports("pkg1")
.classes("package pkg1; /** Class A */ public class A { }")
.build(modulePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.classes("package pkg2; /** @see pkg1.A */ public class B { }")
.write(src);
Path out = base.resolve("out-1");
Files.createDirectories(out);
String log = new JavadocTask(tb)
.outdir(out)
.options("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--module", "m2")
.run(Expect.FAIL)
.writeAll()
.getOutput(OutputKind.DIRECT); if (!log.contains("B.java:1: error: reference not found")) { thrownew Exception("Error not found");
}
out = base.resolve("out-2");
Files.createDirectories(out); new JavadocTask(tb)
.outdir(out)
.options("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--add-modules", "m1", "--module", "m2")
.run()
.writeAll();
}
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.build(modulePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.requires("m1")
.classes("package pkg2; /** Class B */ public class B { }")
.write(src);
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.classes("package pkg1; /** Class A */ public class A { }")
.build(modulePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.requires("m1")
.classes("package pkg2; /** Class B */ public class B { /** Field f */ public pkg1.A f; }")
.write(src);
execTask("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--add-exports", "m1/pkg1=m2", "--module", "m2");
checkModulesSpecified("m2");
checkPackagesIncluded("pkg2");
checkMembersSelected("pkg2.B.f");
}
ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");
mb1.comment("Module on module path.")
.exports("pkg1")
.classes("package pkg1; /** Class A */ public class A {}")
.build(modulePath);
ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");
mb2.comment("The second module.")
.exports("pkg2")
.classes("package pkg2; /** Class B */ public class B { /** Field f */ public pkg1.A f;}")
.write(src);
execTask("--module-source-path", src.toString(), "--module-path", modulePath.toString(), "--add-modules", "m1", "--add-reads", "m2=m1", "--module", "m2");
checkModulesSpecified("m2");
checkPackagesIncluded("pkg2");
checkMembersSelected("pkg2.B.f");
}
tb.writeJavaFiles(classpath, "package pkg1; /** Class C */ public class C { }"); new JavacTask(tb)
.files(classpath.resolve("pkg1/C.java"))
.run();
ModuleBuilder mb = new ModuleBuilder(tb, "m1");
mb.comment("The first module.")
.exports("pub")
.classes("package pub; /** Class M */ public class M { }")
.build(modulePath);
tb.writeJavaFiles(src, "package pkg; /** Class L */ public class L { public pkg1.C f1; public pub.M f2; }");
new ModuleBuilder(tb, "M")
.comment("The M module.")
.requiresTransitive("N", src)
.requires("L", src)
.exports("p")
.classes("package p; public class Main { openO.O o; openN.N n; openL.L l; }")
.write(src);
new ModuleBuilder(tb, "M")
.comment("The M module.")
.requiresTransitive("N", src)
.requires("L", src)
.exports("p")
.classes("package p; public class Main { openO.O o; openN.N n; openL.L l; }")
.write(src);
// build the patching module
tb.writeJavaFiles(patchSrc, """ package pkg1; /** Class A */ public class A extends java.util.ArrayList { }""");
tb.writeJavaFiles(patchSrc, """ package pkg1; /** Class B */ public class B { }""");
new ModuleBuilder(tb, "J")
.comment("The J module.")
.exports("openJ")
.classes("package openJ; /** Class J open. */ public class J { }")
.classes("package closedJ; /** Class J closed. */ public class J { }")
.write(src);
new ModuleBuilder(tb, "L")
.comment("The L module.")
.exports("openL")
.requiresTransitive("P")
.classes("package openL; /** Class L open */ public class L { }")
.classes("package closedL; /** Class L closed */ public class L { }")
.write(src);
new ModuleBuilder(tb, "N")
.comment("The N module.")
.exports("openN")
.requiresTransitive("O")
.classes("package openN; /** Class N open */ public class N { }")
.classes("package closedN; /** Class N closed */ public class N { }")
.write(src);
new ModuleBuilder(tb, "O")
.comment("The O module.")
.exports("openO")
.requires("J")
.classes("package openO; /** Class O open. */ public class O { openJ.J j; }")
.classes("package closedO; /** Class O closed. */ public class O { }")
.write(src);
new ModuleBuilder(tb, "P")
.comment("The P module.")
.exports("openP")
.requires("J")
.classes("package openP; /** Class O open. */ public class O { openJ.J j; }")
.classes("package closedP; /** Class O closed. */ public class O { }")
.write(src);
new ModuleBuilder(tb, "Q")
.comment("The Q module.")
.exports("openQ")
.requires("J")
.classes("package openQ; /** Class Q open. */ public class Q { openJ.J j; }")
.classes("package closedQ; /** Class Q closed. */ public class Q { }")
.write(src);
}
@Test publicvoid testSingleModuleOptionWithSourcePathAndAnnotatedModule(Path base) throwsException {
Path src = base.resolve("src");
Path mod = Paths.get(src.toString(), "m1");
tb.writeJavaFiles(mod, "@Deprecated module m1 { exports p; }", "package p; public class C { }", "package p; public class P { }");
execTask("--source-path", mod.toString(), "--module", "m1");
checkModulesSpecified("m1");
checkPackagesIncluded("p");
checkTypesIncluded("p.C");
checkTypesIncluded("p.P");
}
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 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 und die Messung sind noch experimentell.