< prev index next >

test/tools/javac/modules/RequiresStaticTest.java

Print this page




 129             "C1.java:5:38: compiler.err.not.def.access.package.cant.access: p7.C7, p7",
 130             "C1.java:5:52: compiler.err.not.def.access.package.cant.access: p8.C8, p8",
 131             "C1.java:8:1: compiler.err.cant.resolve.location: kindname.class, C5, , , "
 132                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 133             "C1.java:8:8: compiler.err.cant.resolve.location: kindname.class, C6, , , "
 134                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 135             "C1.java:8:15: compiler.err.cant.resolve.location: kindname.class, C7, , , "
 136                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 137             "C1.java:8:22: compiler.err.cant.resolve.location: kindname.class, C8, , , "
 138                 + "(compiler.misc.location: kindname.class, p1.C1, null)"
 139         };
 140 
 141         for (String e: expect) {
 142             if (!log.contains(e))
 143                 throw new Exception("expected output not found: " + e);
 144         }
 145     }
 146 
 147     /*
 148      * Set up the following module graph
 149      *     m1 -> m2 => m3 -=-> m4 --> m5
 150      *            \           /
 151      *              \       /
 152      *                v   v
 153      *                  m6 => m7 --> m8
 154      * where -> is requires, => is requires transitive, --> is requires static, -=-> is requires transitive static
 155      */
 156     Path getComplexSrc(Path base, String m1_extraImports, String m1_extraUses) throws Exception {
 157         Path src = base.resolve("src");
 158 
 159         Path src_m1 = src.resolve("m1");
 160         tb.writeJavaFiles(src_m1,
 161                 "module m1 { requires m2; }",
 162                 "package p1;\n"
 163                 + "import p2.C2;\n"
 164                 + "import p3.C3;\n"
 165                 + "import p4.C4;\n"
 166                 + m1_extraImports
 167                 + "class C1 {\n"
 168                 + "  C2 c2; C3 c3; C4 c4;\n"
 169                 + m1_extraUses
 170                 + "}\n");
 171 
 172         Path src_m2 = src.resolve("m2");
 173         tb.writeJavaFiles(src_m2,
 174                 "module m2 {\n"
 175                 + "  requires transitive m3;\n"
 176                 + "  requires static m6;\n"
 177                 + "  exports p2;\n"
 178                 + "}",
 179                 "package p2;\n"
 180                 + "public class C2 {p7.C7 c7; p6.C6 c6; p4.C4 c4;}\n");
 181 
 182         Path src_m3 = src.resolve("m3");
 183         tb.writeJavaFiles(src_m3,
 184                 "module m3 { requires transitive static m4; exports p3; }",
 185                 "package p3;\n"
 186                 + "public class C3 { }\n");
 187 
 188         Path src_m4 = src.resolve("m4");
 189         tb.writeJavaFiles(src_m4,
 190                 "module m4 { requires m5; requires static m6; exports p4; }",
 191                 "package p4;\n"
 192                 + "public class C4 { p6.C6 c6; p7.C7 c7;}\n");
 193 
 194         Path src_m5 = src.resolve("m5");
 195         tb.writeJavaFiles(src_m5,
 196                 "module m5 { exports p5; }",
 197                 "package p5;\n"
 198                 + "public class C5 { }\n");
 199 
 200         Path src_m6 = src.resolve("m6");
 201         tb.writeJavaFiles(src_m6,
 202                 "module m6 { requires transitive m7; exports p6; }",
 203                 "package p6;\n"
 204                 + "public class C6 { p7.C7 c7; }\n");
 205 
 206         Path src_m7 = src.resolve("m7");
 207         tb.writeJavaFiles(src_m7,
 208                 "module m7 { requires static m8; exports p7; }",
 209                 "package p7;\n"
 210                 + "public class C7 { p8.C8 c8; }\n");
 211 
 212         Path src_m8 = src.resolve("m8");
 213         tb.writeJavaFiles(src_m8,
 214                 "module m8 { exports p8; }",
 215                 "package p8;\n"
 216                         + "public class C8 { }\n");
 217 
 218         return src;
 219     }
 220 
 221     @Test
 222     public void testRequiresStatic(Path base) throws Exception {
 223         Path src = base.resolve("src");
 224         Path m1 = src.resolve("m1");
 225         tb.writeJavaFiles(m1,
 226                 "module m1 { exports m1; }",
 227                 "package m1;" +
 228                 "public class Api { }\n");
 229 
 230         Path classes = base.resolve("classes");
 231         Path m1Classes = classes.resolve("m1");
 232         Files.createDirectories(m1Classes);
 233 
 234         new JavacTask(tb, Task.Mode.CMDLINE)
 235                 .files(findJavaFiles(m1))
 236                 .outdir(m1Classes)
 237                 .run()
 238                 .writeAll();
 239 
 240         Path m3 = src.resolve("m3");
 241         tb.writeJavaFiles(m3,
 242                 "module m3 { requires static m1; }",
 243                 "package m3;\n" +
 244                 "public class Test {\n" +
 245                 "    public static void main(String... args) {\n" +
 246                 "        try {\n" +
 247                 "           Class.forName(\"m1.Api\");\n" +
 248                 "        } catch (ClassNotFoundException e) {\n" +
 249                 "            System.err.println(\"ok\");\n" +
 250                 "        }\n" +
 251                 "    }\n" +
 252                 "}",
 253                 "package m3;\n" +
 254                 "public class ApiUse{\n" +
 255                 "    m1.Api api;\n" +
 256                 "}");
 257 
 258         Path m3Classes = classes.resolve("m3");
 259         Files.createDirectories(m3Classes);
 260 
 261         new JavacTask(tb, Task.Mode.CMDLINE)
 262                 .options("--module-path", m1Classes.toString())
 263                 .files(findJavaFiles(m3))
 264                 .outdir(m3Classes)
 265                 .run()
 266                 .writeAll();
 267 
 268         String log = new JavaTask(tb)
 269                 .vmOptions("--module-path", m3Classes.toString(), "--add-modules", "m3")
 270                 .className("m3.Test")
 271                 .run()
 272                 .writeAll()
 273                 .getOutput(OutputKind.STDERR);
 274 
 275         String expected = "ok" + System.getProperty("line.separator");
 276 
 277         if (!expected.equals(log)) {
 278             throw new AssertionError("Unexpected output: " + log);
 279         }
 280     }
 281 
 282     @Test
 283     public void testRequiresTransitiveStatic(Path base) throws Exception {
 284         Path src = base.resolve("src");
 285         Path m1 = src.resolve("m1");
 286         tb.writeJavaFiles(m1,
 287                 "module m1 { exports m1; }",
 288                 "package m1;" +
 289                 "public class Api { }\n");
 290 
 291         Path classes = base.resolve("classes");
 292         Path m1Classes = classes.resolve("m1");
 293         Files.createDirectories(m1Classes);
 294 
 295         new JavacTask(tb, Task.Mode.CMDLINE)
 296                 .files(findJavaFiles(m1))
 297                 .outdir(m1Classes)
 298                 .run()
 299                 .writeAll();
 300 
 301         Path m2 = src.resolve("m2");
 302         tb.writeJavaFiles(m2,
 303                 "module m2 { requires transitive static m1; }");
 304 
 305         Path m2Classes = classes.resolve("m2");
 306         Files.createDirectories(m2Classes);
 307 
 308         new JavacTask(tb, Task.Mode.CMDLINE)
 309                 .options("--module-path", m1Classes.toString())
 310                 .files(findJavaFiles(m2))
 311                 .outdir(m2Classes)
 312                 .run()
 313                 .writeAll();
 314 
 315         Path m3 = src.resolve("m3");
 316         tb.writeJavaFiles(m3,
 317                 "module m3 { requires m2; }",
 318                 "package m3;\n" +
 319                 "public class Test {\n" +
 320                 "    public static void main(String... args) {\n" +
 321                 "        try {\n" +
 322                 "           Class.forName(\"m1.Api\");\n" +
 323                 "        } catch (ClassNotFoundException e) {\n" +
 324                 "            System.err.println(\"ok\");\n" +
 325                 "        }\n" +
 326                 "    }\n" +
 327                 "}",
 328                 "package m3;\n" +
 329                 "public class ApiUse{\n" +
 330                 "    m1.Api api;\n" +
 331                 "}");
 332 
 333         Path m3Classes = classes.resolve("m3");
 334         Files.createDirectories(m3Classes);
 335 
 336         new JavacTask(tb, Task.Mode.CMDLINE)
 337                 .options("--module-path", m1Classes.toString() + File.pathSeparator + m2Classes.toString())
 338                 .files(findJavaFiles(m3))
 339                 .outdir(m3Classes)
 340                 .run()
 341                 .writeAll();
 342 
 343         String log = new JavaTask(tb)
 344                 .vmOptions("--module-path", m2Classes.toString() + File.pathSeparator + m3Classes.toString(),
 345                            "--add-modules", "m3")
 346                 .className("m3.Test")
 347                 .run()
 348                 .writeAll()
 349                 .getOutput(OutputKind.STDERR);
 350 
 351         String expected = "ok" + System.getProperty("line.separator");
 352 
 353         if (!expected.equals(log)) {
 354             throw new AssertionError("Unexpected output: " + log);
 355         }
 356     }
 357 
 358     @Test
 359     public void testRequiresStaticTransitive(Path base) throws Exception {
 360         Path src = base.resolve("src");
 361         Path m1 = src.resolve("m1");
 362         tb.writeJavaFiles(m1,
 363                 "module m1 { exports m1; }",
 364                 "package m1;" +
 365                 "public class Api { }\n");
 366 
 367         Path classes = base.resolve("classes");
 368         Path m1Classes = classes.resolve("m1");
 369         Files.createDirectories(m1Classes);
 370 
 371         new JavacTask(tb, Task.Mode.CMDLINE)
 372                 .files(findJavaFiles(m1))
 373                 .outdir(m1Classes)
 374                 .run()
 375                 .writeAll();
 376 
 377         Path m2 = src.resolve("m2");
 378         tb.writeJavaFiles(m2,
 379                 "module m2 { requires transitive static m1; }");
 380 
 381         Path m2Classes = classes.resolve("m2");
 382         Files.createDirectories(m2Classes);
 383 
 384         new JavacTask(tb, Task.Mode.CMDLINE)
 385                 .options("--module-path", m1Classes.toString())
 386                 .files(findJavaFiles(m2))
 387                 .outdir(m2Classes)
 388                 .run()
 389                 .writeAll();
 390     }
 391 }


 129             "C1.java:5:38: compiler.err.not.def.access.package.cant.access: p7.C7, p7",
 130             "C1.java:5:52: compiler.err.not.def.access.package.cant.access: p8.C8, p8",
 131             "C1.java:8:1: compiler.err.cant.resolve.location: kindname.class, C5, , , "
 132                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 133             "C1.java:8:8: compiler.err.cant.resolve.location: kindname.class, C6, , , "
 134                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 135             "C1.java:8:15: compiler.err.cant.resolve.location: kindname.class, C7, , , "
 136                 + "(compiler.misc.location: kindname.class, p1.C1, null)",
 137             "C1.java:8:22: compiler.err.cant.resolve.location: kindname.class, C8, , , "
 138                 + "(compiler.misc.location: kindname.class, p1.C1, null)"
 139         };
 140 
 141         for (String e: expect) {
 142             if (!log.contains(e))
 143                 throw new Exception("expected output not found: " + e);
 144         }
 145     }
 146 
 147     /*
 148      * Set up the following module graph
 149      *     m1x -> m2x => m3x -=-> m4x --> m5
 150      *            \           /
 151      *              \       /
 152      *                v   v
 153      *                  m6x => m7x --> m8
 154      * where -> is requires, => is requires transitive, --> is requires static, -=-> is requires transitive static
 155      */
 156     Path getComplexSrc(Path base, String m1_extraImports, String m1_extraUses) throws Exception {
 157         Path src = base.resolve("src");
 158 
 159         Path src_m1 = src.resolve("m1x");
 160         tb.writeJavaFiles(src_m1,
 161                 "module m1x { requires m2x; }",
 162                 "package p1;\n"
 163                 + "import p2.C2;\n"
 164                 + "import p3.C3;\n"
 165                 + "import p4.C4;\n"
 166                 + m1_extraImports
 167                 + "class C1 {\n"
 168                 + "  C2 c2; C3 c3; C4 c4;\n"
 169                 + m1_extraUses
 170                 + "}\n");
 171 
 172         Path src_m2 = src.resolve("m2x");
 173         tb.writeJavaFiles(src_m2,
 174                 "module m2x {\n"
 175                 + "  requires transitive m3x;\n"
 176                 + "  requires static m6x;\n"
 177                 + "  exports p2;\n"
 178                 + "}",
 179                 "package p2;\n"
 180                 + "public class C2 {p7.C7 c7; p6.C6 c6; p4.C4 c4;}\n");
 181 
 182         Path src_m3 = src.resolve("m3x");
 183         tb.writeJavaFiles(src_m3,
 184                 "module m3x { requires transitive static m4x; exports p3; }",
 185                 "package p3;\n"
 186                 + "public class C3 { }\n");
 187 
 188         Path src_m4 = src.resolve("m4x");
 189         tb.writeJavaFiles(src_m4,
 190                 "module m4x { requires m5x; requires static m6x; exports p4; }",
 191                 "package p4;\n"
 192                 + "public class C4 { p6.C6 c6; p7.C7 c7;}\n");
 193 
 194         Path src_m5 = src.resolve("m5x");
 195         tb.writeJavaFiles(src_m5,
 196                 "module m5x { exports p5; }",
 197                 "package p5;\n"
 198                 + "public class C5 { }\n");
 199 
 200         Path src_m6 = src.resolve("m6x");
 201         tb.writeJavaFiles(src_m6,
 202                 "module m6x { requires transitive m7x; exports p6; }",
 203                 "package p6;\n"
 204                 + "public class C6 { p7.C7 c7; }\n");
 205 
 206         Path src_m7 = src.resolve("m7x");
 207         tb.writeJavaFiles(src_m7,
 208                 "module m7x { requires static m8x; exports p7; }",
 209                 "package p7;\n"
 210                 + "public class C7 { p8.C8 c8; }\n");
 211 
 212         Path src_m8 = src.resolve("m8x");
 213         tb.writeJavaFiles(src_m8,
 214                 "module m8x { exports p8; }",
 215                 "package p8;\n"
 216                         + "public class C8 { }\n");
 217 
 218         return src;
 219     }
 220 
 221     @Test
 222     public void testRequiresStatic(Path base) throws Exception {
 223         Path src = base.resolve("src");
 224         Path m1 = src.resolve("m1x");
 225         tb.writeJavaFiles(m1,
 226                 "module m1x { exports m1x; }",
 227                 "package m1x;" +
 228                 "public class Api { }\n");
 229 
 230         Path classes = base.resolve("classes");
 231         Path m1Classes = classes.resolve("m1x");
 232         Files.createDirectories(m1Classes);
 233 
 234         new JavacTask(tb, Task.Mode.CMDLINE)
 235                 .files(findJavaFiles(m1))
 236                 .outdir(m1Classes)
 237                 .run()
 238                 .writeAll();
 239 
 240         Path m3 = src.resolve("m3x");
 241         tb.writeJavaFiles(m3,
 242                 "module m3x { requires static m1x; }",
 243                 "package m3x;\n" +
 244                 "public class Test {\n" +
 245                 "    public static void main(String... args) {\n" +
 246                 "        try {\n" +
 247                 "           Class.forName(\"m1x.Api\");\n" +
 248                 "        } catch (ClassNotFoundException e) {\n" +
 249                 "            System.err.println(\"ok\");\n" +
 250                 "        }\n" +
 251                 "    }\n" +
 252                 "}",
 253                 "package m3x;\n" +
 254                 "public class ApiUse{\n" +
 255                 "    m1x.Api api;\n" +
 256                 "}");
 257 
 258         Path m3Classes = classes.resolve("m3x");
 259         Files.createDirectories(m3Classes);
 260 
 261         new JavacTask(tb, Task.Mode.CMDLINE)
 262                 .options("--module-path", m1Classes.toString())
 263                 .files(findJavaFiles(m3))
 264                 .outdir(m3Classes)
 265                 .run()
 266                 .writeAll();
 267 
 268         String log = new JavaTask(tb)
 269                 .vmOptions("--module-path", m3Classes.toString(), "--add-modules", "m3x")
 270                 .className("m3x.Test")
 271                 .run()
 272                 .writeAll()
 273                 .getOutput(OutputKind.STDERR);
 274 
 275         String expected = "ok" + System.getProperty("line.separator");
 276 
 277         if (!expected.equals(log)) {
 278             throw new AssertionError("Unexpected output: " + log);
 279         }
 280     }
 281 
 282     @Test
 283     public void testRequiresTransitiveStatic(Path base) throws Exception {
 284         Path src = base.resolve("src");
 285         Path m1 = src.resolve("m1x");
 286         tb.writeJavaFiles(m1,
 287                 "module m1x { exports m1x; }",
 288                 "package m1x;" +
 289                 "public class Api { }\n");
 290 
 291         Path classes = base.resolve("classes");
 292         Path m1Classes = classes.resolve("m1x");
 293         Files.createDirectories(m1Classes);
 294 
 295         new JavacTask(tb, Task.Mode.CMDLINE)
 296                 .files(findJavaFiles(m1))
 297                 .outdir(m1Classes)
 298                 .run()
 299                 .writeAll();
 300 
 301         Path m2 = src.resolve("m2x");
 302         tb.writeJavaFiles(m2,
 303                 "module m2x { requires transitive static m1x; }");
 304 
 305         Path m2Classes = classes.resolve("m2x");
 306         Files.createDirectories(m2Classes);
 307 
 308         new JavacTask(tb, Task.Mode.CMDLINE)
 309                 .options("--module-path", m1Classes.toString())
 310                 .files(findJavaFiles(m2))
 311                 .outdir(m2Classes)
 312                 .run()
 313                 .writeAll();
 314 
 315         Path m3 = src.resolve("m3x");
 316         tb.writeJavaFiles(m3,
 317                 "module m3x { requires m2x; }",
 318                 "package m3x;\n" +
 319                 "public class Test {\n" +
 320                 "    public static void main(String... args) {\n" +
 321                 "        try {\n" +
 322                 "           Class.forName(\"m1x.Api\");\n" +
 323                 "        } catch (ClassNotFoundException e) {\n" +
 324                 "            System.err.println(\"ok\");\n" +
 325                 "        }\n" +
 326                 "    }\n" +
 327                 "}",
 328                 "package m3x;\n" +
 329                 "public class ApiUse{\n" +
 330                 "    m1x.Api api;\n" +
 331                 "}");
 332 
 333         Path m3Classes = classes.resolve("m3x");
 334         Files.createDirectories(m3Classes);
 335 
 336         new JavacTask(tb, Task.Mode.CMDLINE)
 337                 .options("--module-path", m1Classes.toString() + File.pathSeparator + m2Classes.toString())
 338                 .files(findJavaFiles(m3))
 339                 .outdir(m3Classes)
 340                 .run()
 341                 .writeAll();
 342 
 343         String log = new JavaTask(tb)
 344                 .vmOptions("--module-path", m2Classes.toString() + File.pathSeparator + m3Classes.toString(),
 345                            "--add-modules", "m3x")
 346                 .className("m3x.Test")
 347                 .run()
 348                 .writeAll()
 349                 .getOutput(OutputKind.STDERR);
 350 
 351         String expected = "ok" + System.getProperty("line.separator");
 352 
 353         if (!expected.equals(log)) {
 354             throw new AssertionError("Unexpected output: " + log);
 355         }
 356     }
 357 
 358     @Test
 359     public void testRequiresStaticTransitive(Path base) throws Exception {
 360         Path src = base.resolve("src");
 361         Path m1 = src.resolve("m1x");
 362         tb.writeJavaFiles(m1,
 363                 "module m1x { exports m1x; }",
 364                 "package m1x;" +
 365                 "public class Api { }\n");
 366 
 367         Path classes = base.resolve("classes");
 368         Path m1Classes = classes.resolve("m1x");
 369         Files.createDirectories(m1Classes);
 370 
 371         new JavacTask(tb, Task.Mode.CMDLINE)
 372                 .files(findJavaFiles(m1))
 373                 .outdir(m1Classes)
 374                 .run()
 375                 .writeAll();
 376 
 377         Path m2 = src.resolve("m2x");
 378         tb.writeJavaFiles(m2,
 379                 "module m2x { requires transitive static m1x; }");
 380 
 381         Path m2Classes = classes.resolve("m2x");
 382         Files.createDirectories(m2Classes);
 383 
 384         new JavacTask(tb, Task.Mode.CMDLINE)
 385                 .options("--module-path", m1Classes.toString())
 386                 .files(findJavaFiles(m2))
 387                 .outdir(m2Classes)
 388                 .run()
 389                 .writeAll();
 390     }
 391 }
< prev index next >