package org.jmlspecs.openjml.jmldoc;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.comp.JmlMemberEnter;
import com.sun.tools.javac.comp.MemberEnter;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.Position;
import com.sun.tools.javadoc.AnnotationTypeDocImpl;
import com.sun.tools.javadoc.ClassDocImpl;
import com.sun.tools.javadoc.DocEnv;
public class DocEnvJml extends DocEnv {
protected DocEnvJml(Context context) {
super(context);
}
public static void preRegister(final Context context) {
context.put(docEnvKey, new Context.Factory<DocEnv>() {
public DocEnv make(Context context) {
return new DocEnvJml(context);
}
});
}
// MAINTENANCE ISSUE: Copied from super class
public ClassDocImpl getClassDoc(ClassSymbol clazz) {
ClassDocImpl result = classMap.get(clazz);
if (result != null) return result;
if (isAnnotationType(clazz)) {
result = super.getClassDoc(clazz);
} else {
result = new ClassDocJml(this, clazz);
}
classMap.put(clazz, result);
return result;
}
// MAINTENANCE ISSUE: Copied from super class
protected void makeClassDoc(ClassSymbol clazz, String docComment, JCClassDecl tree, Position.LineMap lineMap) {
ClassDocImpl result = classMap.get(clazz);
if (result != null) {
if (docComment != null) result.setRawCommentText(docComment);
if (tree != null) result.setTree(tree);
return;
}
if (isAnnotationType(tree)) { // flags of clazz may not yet be set
result = new AnnotationTypeDocImpl(this, clazz, docComment, tree, lineMap);
} else {
result = new ClassDocJml(this, clazz, docComment, tree, lineMap);
}
classMap.put(clazz, result);
}
}