74 case AccessFlags flags when location == TestLocation.CLASS -> cb
75 .withFlags(flags.flagsMask() | ACC_PRIVATE);
76 case FieldModel f when location == TestLocation.FIELD -> cb
77 .transformField(f, (fb, fe) -> {
78 if (fe instanceof AccessFlags flags) {
79 fb.withFlags(flags.flagsMask() | ACC_SYNCHRONIZED);
80 } else {
81 fb.with(fe);
82 }
83 });
84 case MethodModel m when location == TestLocation.METHOD -> cb
85 .transformMethod(m, (mb, me) -> {
86 if (me instanceof AccessFlags flags) {
87 mb.withFlags(flags.flagsMask() | ACC_INTERFACE);
88 } else {
89 mb.with(me);
90 }
91 });
92 case InnerClassesAttribute attr when location == TestLocation.INNER_CLASS -> cb
93 .with(InnerClassesAttribute.of(attr.classes().stream()
94 .map(ic -> InnerClassInfo.of(ic.innerClass(), ic.outerClass(), ic.innerName(), ic.flagsMask() | 0x0020))
95 .toList()));
96 default -> cb.with(ce);
97 }
98 });
99
100 Files.write(Path.of("transformed.class"), bytes);
101
102 var lines = new JavapTask(toolBox)
103 .classes("transformed.class")
104 .options("-c", "-p", "-v")
105 .run(location.fails ? Task.Expect.FAIL : Task.Expect.SUCCESS)
106 .writeAll()
107 .getOutputLines(Task.OutputKind.DIRECT);
108
109 // No termination when access flag error happens
110 assertTrue(lines.stream().anyMatch(l -> l.contains("java.lang.String field;")));
111 assertTrue(lines.stream().anyMatch(l -> l.contains("UndefinedAccessFlagTest$SampleInnerClass();")));
112 assertTrue(lines.stream().anyMatch(l -> l.contains("void method();")));
113 assertTrue(lines.stream().anyMatch(l -> l.contains("SampleInnerClass=class UndefinedAccessFlagTest$SampleInnerClass of class UndefinedAccessFlagTest")));
114
|
74 case AccessFlags flags when location == TestLocation.CLASS -> cb
75 .withFlags(flags.flagsMask() | ACC_PRIVATE);
76 case FieldModel f when location == TestLocation.FIELD -> cb
77 .transformField(f, (fb, fe) -> {
78 if (fe instanceof AccessFlags flags) {
79 fb.withFlags(flags.flagsMask() | ACC_SYNCHRONIZED);
80 } else {
81 fb.with(fe);
82 }
83 });
84 case MethodModel m when location == TestLocation.METHOD -> cb
85 .transformMethod(m, (mb, me) -> {
86 if (me instanceof AccessFlags flags) {
87 mb.withFlags(flags.flagsMask() | ACC_INTERFACE);
88 } else {
89 mb.with(me);
90 }
91 });
92 case InnerClassesAttribute attr when location == TestLocation.INNER_CLASS -> cb
93 .with(InnerClassesAttribute.of(attr.classes().stream()
94 .map(ic -> InnerClassInfo.of(ic.innerClass(), ic.outerClass(), ic.innerName(), ic.flagsMask() | 0x0050))
95 .toList()));
96 default -> cb.with(ce);
97 }
98 });
99
100 Files.write(Path.of("transformed.class"), bytes);
101
102 var lines = new JavapTask(toolBox)
103 .classes("transformed.class")
104 .options("-c", "-p", "-v")
105 .run(location.fails ? Task.Expect.FAIL : Task.Expect.SUCCESS)
106 .writeAll()
107 .getOutputLines(Task.OutputKind.DIRECT);
108
109 // No termination when access flag error happens
110 assertTrue(lines.stream().anyMatch(l -> l.contains("java.lang.String field;")));
111 assertTrue(lines.stream().anyMatch(l -> l.contains("UndefinedAccessFlagTest$SampleInnerClass();")));
112 assertTrue(lines.stream().anyMatch(l -> l.contains("void method();")));
113 assertTrue(lines.stream().anyMatch(l -> l.contains("SampleInnerClass=class UndefinedAccessFlagTest$SampleInnerClass of class UndefinedAccessFlagTest")));
114
|