From d08209f9b32fa0c1fd82cdbe6f9b17bfa52e8e34 Mon Sep 17 00:00:00 2001 From: ksrini Date: Fri, 14 Feb 2014 17:28:07 -0800 Subject: [PATCH] 8029145: javadoc fails with java.lang.IllegalStateException: endPosTable already set Reviewed-by: jjg --- .../com/sun/tools/javadoc/JavadocTool.java | 12 +++++++---- .../javadoc/parser/7091528/T7091528.java | 21 ++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/share/classes/com/sun/tools/javadoc/JavadocTool.java b/src/share/classes/com/sun/tools/javadoc/JavadocTool.java index f30251ab..b2e247a2 100644 --- a/src/share/classes/com/sun/tools/javadoc/JavadocTool.java +++ b/src/share/classes/com/sun/tools/javadoc/JavadocTool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -30,6 +30,7 @@ import java.io.IOException; import java.util.Collection; import java.util.EnumSet; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.tools.JavaFileManager.Location; @@ -238,10 +239,13 @@ public class JavadocTool extends com.sun.tools.javac.main.JavaCompiler { files = lb.toList(); } + Set ufiles = new HashSet<>(); for (JavaFileObject fo : files) { - // messager.notice("main.Loading_source_file", fn); - trees.append(parse(fo)); - hasFiles = true; + if (ufiles.add(fo)) { // ignore duplicates + // messager.notice("main.Loading_source_file", fn); + trees.append(parse(fo)); + hasFiles = true; + } } if (!hasFiles) { diff --git a/test/tools/javadoc/parser/7091528/T7091528.java b/test/tools/javadoc/parser/7091528/T7091528.java index 4e06a3be..b491073d 100644 --- a/test/tools/javadoc/parser/7091528/T7091528.java +++ b/test/tools/javadoc/parser/7091528/T7091528.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -23,8 +23,8 @@ /** * @test - * @bug 7091528 - * @summary javadoc attempts to parse .class files + * @bug 7091528 8029145 + * @summary ensures javadoc parses unique source files and ignores all class files * @compile p/C1.java p/q/C2.java * @run main T7091528 */ @@ -37,17 +37,22 @@ public class T7091528 { public static void main(String... args) { new T7091528().run(); } - void run() { File testSrc = new File(System.getProperty("test.src")); File testClasses = new File(System.getProperty("test.classes")); - String[] args = { - "-d", ".", + // 7091528, tests if class files are being ignored + runTest("-d", ".", "-sourcepath", testClasses + File.pathSeparator + testSrc, "-subpackages", - "p" - }; + "p"); + // 8029145, tests if unique source files are parsed + runTest("-d", ".", + "-sourcepath", testSrc.getAbsolutePath(), + "-subpackages", + "p:p.q"); + } + void runTest(String... args) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); String doclet = com.sun.tools.doclets.standard.Standard.class.getName(); -- GitLab