/* * Copyright (c) 2025, 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 8177100 * @summary Test to check for duplicate methods across different inheritance patterns * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build toolbox.ToolBox javadoc.tester.* * @run main TestDuplicateMethods */ import java.io.IOException; import java.nio.file.Path; import javadoc.tester.JavadocTester; import toolbox.ToolBox; public class TestDuplicateMethods extends JavadocTester { public static void main(String... args) throws Exception { var tester = new TestDuplicateMethods(); tester.runTests(); } ToolBox tb = new ToolBox(); Path src = Path.of("src"); TestDuplicateMethods() throws IOException { // Diamond class inheritance tb.writeJavaFiles(src, """ package p; interface A { /** * JavaDoc for method in interface A. */ abstract void testA( ); }""", """ package p; interface B extends A { /** * JavaDoc for method in interface B. */ abstract void testB( ); }""", """ package p; abstract class C implements A { /** * Inherited JavaDoc for method in class C. */ public final void testA( ) { // Do nothing. } }""",""" package p; public final class D extends C implements B { /** * Inherited JavaDoc. */ public final void testB() { // Do nothing. } } """); // Mirrors the implementation of StringBuilder tb.writeJavaFiles(src, """ package sb; public interface I { /** * JavaDoc for method in public interface I. */ void testI(); } """, """ package sb; abstract class P implements I { /** * Inherited JavaDoc for method in class P. */ public final void testI() { // Do nothing. } } """, """ package sb; public class U extends P implements I { // No overrides } """ ); // Mirrors the implementation of HashMap tb.writeJavaFiles(src, """ package hm; public interface J { /** * JavaDoc for method in public interface J. */ void testJ(); } """, """ package hm; public abstract class PubJ implements J { /** * Inherited JavaDoc for method in public abstract class PubJ. */ public final void testJ() { // Do nothing. } } """, """ package hm; public class V extends PubJ implements J { // No override } """ ); } @Test public void testDiamondInheritance(Path base) { javadoc("-d", base.resolve("out").toString(), "-sourcepath", src.toString(), "p"); checkExit(Exit.OK); checkOutput("p/D.html", true, """