8029145: javadoc fails with java.lang.IllegalStateException: endPosTable already set
Reviewed-by: jjg
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java Thu Feb 13 14:58:10 2014 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java Fri Feb 14 17:28:07 2014 -0800
@@ -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.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 @@
files = lb.toList();
}
+ Set<JavaFileObject> 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) {
--- a/langtools/test/tools/javadoc/parser/7091528/T7091528.java Thu Feb 13 14:58:10 2014 +0100
+++ b/langtools/test/tools/javadoc/parser/7091528/T7091528.java Fri Feb 14 17:28:07 2014 -0800
@@ -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 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();