mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
6794582: javadoc should read files using a FileManager
Reviewed-by: darcy, bpatel
This commit is contained in:
parent
19b769a375
commit
981f025a85
13 changed files with 301 additions and 225 deletions
|
@ -25,42 +25,48 @@
|
|||
|
||||
package com.sun.tools.javadoc;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.net.URI;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import javax.tools.FileObject;
|
||||
import javax.tools.JavaFileManager.Location;
|
||||
import javax.tools.StandardJavaFileManager;
|
||||
import javax.tools.StandardLocation;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import static com.sun.javadoc.LanguageVersion.*;
|
||||
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Kinds;
|
||||
import com.sun.tools.javac.code.TypeTags;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
import com.sun.tools.javac.code.Scope;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
import com.sun.tools.javac.code.TypeTags;
|
||||
|
||||
import com.sun.tools.javac.comp.AttrContext;
|
||||
import com.sun.tools.javac.comp.Env;
|
||||
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
|
||||
import com.sun.tools.javac.tree.JCTree.JCImport;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
import com.sun.tools.javac.tree.TreeInfo;
|
||||
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
import com.sun.tools.javac.util.Names;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
import static com.sun.tools.javac.code.Flags.*;
|
||||
import static com.sun.tools.javac.code.Kinds.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
/**
|
||||
* Represents a java class and provides access to information
|
||||
* about the class, the class' comment and tags, and the
|
||||
|
@ -271,16 +277,41 @@ public class ClassDocImpl extends ProgramElementDocImpl implements ClassDoc {
|
|||
*/
|
||||
public PackageDoc containingPackage() {
|
||||
PackageDocImpl p = env.getPackageDoc(tsym.packge());
|
||||
SourcePosition po = position();
|
||||
if (po != null && p.setDocPath == false && p.zipDocPath == null) {
|
||||
//Set the package path if possible
|
||||
File packageDir = po.file().getParentFile();
|
||||
if (packageDir != null
|
||||
&& (new File(packageDir, "package.html")).exists()) {
|
||||
p.setDocPath(packageDir.getPath());
|
||||
} else {
|
||||
p.setDocPath(null);
|
||||
if (p.setDocPath == false) {
|
||||
FileObject docPath;
|
||||
try {
|
||||
Location location = env.fileManager.hasLocation(StandardLocation.SOURCE_PATH)
|
||||
? StandardLocation.SOURCE_PATH : StandardLocation.CLASS_PATH;
|
||||
|
||||
docPath = env.fileManager.getFileForInput(
|
||||
location, p.qualifiedName(), "package.html");
|
||||
} catch (IOException e) {
|
||||
docPath = null;
|
||||
}
|
||||
|
||||
if (docPath == null) {
|
||||
// fall back on older semantics of looking in same directory as
|
||||
// source file for this class
|
||||
SourcePosition po = position();
|
||||
if (env.fileManager instanceof StandardJavaFileManager &&
|
||||
po instanceof SourcePositionImpl) {
|
||||
URI uri = ((SourcePositionImpl) po).filename.toUri();
|
||||
if ("file".equals(uri.getScheme())) {
|
||||
File f = new File(uri.getPath());
|
||||
File dir = f.getParentFile();
|
||||
if (dir != null) {
|
||||
File pf = new File(dir, "package.html");
|
||||
if (pf.exists()) {
|
||||
StandardJavaFileManager sfm = (StandardJavaFileManager) env.fileManager;
|
||||
docPath = sfm.getJavaFileObjects(pf).iterator().next();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p.setDocPath(docPath);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
@ -1251,7 +1282,7 @@ public class ClassDocImpl extends ProgramElementDocImpl implements ClassDoc {
|
|||
*/
|
||||
public SourcePosition position() {
|
||||
if (tsym.sourcefile == null) return null;
|
||||
return SourcePositionImpl.make(tsym.sourcefile.toString(),
|
||||
return SourcePositionImpl.make(tsym.sourcefile,
|
||||
(tree==null) ? Position.NOPOS : tree.pos,
|
||||
lineMap);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue