Skip to content

Commit 0f400b3

Browse files
committed
Fixes
1 parent af16f50 commit 0f400b3

3 files changed

Lines changed: 22 additions & 14 deletions

File tree

make/jdk/src/classes/build/tools/taglet/SealedGraph.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ private String simpleName(String name) {
298298

299299
private static List<TypeElement> permittedSubclasses(TypeElement node, Set<String> exports) {
300300
List<TypeElement> dfsStack = new ArrayList<TypeElement>().reversed(); // Faster operations to head
301-
List<TypeElement> result = new ArrayList<>();
301+
SequencedCollection<TypeElement> result = new LinkedHashSet<>(); // Deduplicate diamond interface inheritance
302302
// The starting node may be in the public API - still expand it
303303
prependSubclasses(node, dfsStack);
304304

test/langtools/jdk/javadoc/taglet/sealedGraph/TestSealedTaglet.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* @modules jdk.compiler/com.sun.tools.javac.api
3030
* jdk.compiler/com.sun.tools.javac.main
3131
* jdk.javadoc/jdk.javadoc.internal.tool
32-
* @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
32+
* @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder JdkTaglets
3333
* @run main ${test.main.class}
3434
*/
3535

@@ -67,16 +67,23 @@ public void testInvisibleInMiddle(Path base) throws Exception {
6767
}
6868
""");
6969
new ClassBuilder(tb, "pkg.A")
70-
.setModifiers("public", "abstract", "sealed", "class")
70+
.setModifiers("public", "abstract", "sealed", "interface")
7171
.setComments("@sealedGraph")
7272
.addPermits("pkg.B")
7373
.write(srcDir);
7474
new ClassBuilder(tb, "pkg.B")
75-
.setModifiers("abstract", "sealed", "class")
76-
.addPermits("pkg.C")
75+
.setModifiers("abstract", "sealed", "interface")
76+
.addImplements("pkg.A")
77+
.addPermits("pkg.C", "pkg.D")
7778
.write(srcDir);
7879
new ClassBuilder(tb, "pkg.C")
80+
.setModifiers("abstract", "sealed", "interface")
81+
.addImplements("pkg.A", "pkg.B")
82+
.addPermits("pkg.D")
83+
.write(srcDir);
84+
new ClassBuilder(tb, "pkg.D")
7985
.setModifiers("public", "final", "class")
86+
.addImplements("pkg.B", "pkg.C")
8087
.write(srcDir);
8188

8289
System.setProperty("sealedDotOutputDir", outDir.toString());
@@ -88,7 +95,7 @@ public void testInvisibleInMiddle(Path base) throws Exception {
8895
"pkg");
8996

9097
checkExit(Exit.OK);
91-
// C is displayed as a direct subtype of A, bypassing B
92-
checkOutput("test_pkg.A.dot", true, "\"pkg.C\" -> \"pkg.A\";");
98+
// D is displayed as a direct subtype of A, bypassing B, C, one link only
99+
checkUnique("test_pkg.A.dot", "\"pkg.D\" -> \"pkg.A\";");
93100
}
94101
}

test/langtools/tools/lib/builder/ClassBuilder.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,25 +238,26 @@ public String toString() {
238238
ow.println("// NO_API_COMMENT");
239239
break;
240240
}
241+
assert !modifiers.modifiers.isEmpty();
241242
ow.print(modifiers.toString());
242243
ow.print(clsname);
243244
if (typeParameter != null) {
244-
ow.print(typeParameter + " ");
245-
} else {
246-
ow.print(" ");
245+
ow.print(typeParameter);
247246
}
248247
if (extendsType != null && !extendsType.isEmpty()) {
249-
ow.print("extends " + extendsType + " ");
248+
var last = modifiers.modifiers.getLast();
249+
assert !last.equals("interface") && !last.equals("@interface");
250+
ow.print(" extends " + extendsType);
250251
}
251252
if (!implementsTypes.isEmpty()) {
252-
ow.print("implements ");
253+
ow.print(modifiers.modifiers.getLast().equals("interface") ? " extends " : " implements ");
253254
ow.print(String.join(", ", implementsTypes));
254255
}
255256
if (!permitsTypes.isEmpty()) {
256-
ow.print("permits ");
257+
ow.print(" permits ");
257258
ow.print(String.join(", ", permitsTypes));
258259
}
259-
ow.print("{");
260+
ow.print(" {");
260261
if (!nested.isEmpty()) {
261262
ow.println("");
262263
nested.forEach(m -> ow.println(m.toString()));

0 commit comments

Comments
 (0)