blob: 132344b3e5509c657dee8dc11b55fb8a15eb0a60 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.javascript.scriptdoc;
import java.io.Reader;
import org.eclipse.dltk.core.IBuffer;
import org.eclipse.dltk.core.IMember;
import org.eclipse.dltk.core.IMethod;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IOpenable;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ISourceRange;
import org.eclipse.dltk.core.ModelException;
class BufferJavaDocCommentReader extends JavaDocCommentReader {
private IBuffer fBuffer;
public BufferJavaDocCommentReader(IBuffer buf, int start, int end) {
super(start, end);
fBuffer = buf;
}
@Override
protected char getChar(int index) {
return fBuffer.getChar(index);
}
/**
* @see java.io.Reader#close()
*/
public void close() {
fBuffer = null;
}
}
/**
* Helper needed to get the content of a Javadoc comment.
*
* <p>
* This class is not intended to be subclassed or instantiated by clients.
* </p>
*
* @since 3.1
* @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients.
*/
public class ScriptdocContentAccess {
// private static final String JAVADOC_END = "*/";
private ScriptdocContentAccess() {
// do not instantiate
}
public static ISourceRange getJavadocRange(IMember member)
throws ModelException {
return JSDocContentAccess.getDocRange(member);
}
public static JavaDocCommentReader getReader(IOpenable openable,
ISourceRange docRange) throws ModelException {
final IBuffer buf = openable.getBuffer();
if (buf != null) {
return new BufferJavaDocCommentReader(buf, docRange.getOffset(),
docRange.getOffset() + docRange.getLength());
}
if (openable instanceof ISourceModule) {
final ISourceModule module = (ISourceModule) openable;
return new StringJavaDocCommentReader(module.getSource().substring(
docRange.getOffset(),
docRange.getOffset() + docRange.getLength()));
}
return null;
}
/**
* Gets a reader for an IMember's Javadoc comment content from the source
* attachment. The content does contain only the text from the comment
* without the Javadoc leading star characters. Returns <code>null</code> if
* the member does not contain a Javadoc comment or if no source is
* available.
*
* @param member
* The member to get the Javadoc of.
* @param allowInherited
* For methods with no (Javadoc) comment, the comment of the
* overridden class is returned if <code>allowInherited</code> is
* <code>true</code>.
* @return Returns a reader for the Javadoc comment content or
* <code>null</code> if the member does not contain a Javadoc
* comment or if no source is available
* @throws JavaModelException
* is thrown when the elements javadoc can not be accessed
*/
public static Reader getContentReader(IMember member, boolean allowInherited)
throws ModelException {
IOpenable openable = member.getOpenable();
if (openable != null) {
try {
ISourceRange javadocRange = getJavadocRange(member);
if (javadocRange != null) {
JavaDocCommentReader reader = getReader(openable,
javadocRange);
if (reader == null) {
return null;
}
if (!reader.containsOnlyInheritDoc()) {
reader.reset();
return reader;
}
}
if (allowInherited
&& (member.getElementType() == IModelElement.METHOD)) {
return findDocInHierarchy((IMethod) member);
}
} catch (ModelException e) {
return null;
}
}
return null;
}
/**
* Gets a reader for an IMember's Javadoc comment content from the source
* attachment. and renders the tags in HTML. Returns <code>null</code> if
* the member does not contain a Javadoc comment or if no source is
* available.
*
* @param member
* the member to get the Javadoc of.
* @param allowInherited
* for methods with no (Javadoc) comment, the comment of the
* overridden class is returned if <code>allowInherited</code> is
* <code>true</code>
* @param useAttachedJavadoc
* if <code>true</code> Javadoc will be extracted from attached
* Javadoc if there's no source
* @return a reader for the Javadoc comment content in HTML or
* <code>null</code> if the member does not contain a Javadoc
* comment or if no source is available
* @throws JavaModelException
* is thrown when the elements Javadoc can not be accessed
* @since 3.2
*/
public static Reader getHTMLContentReader(IMember member,
boolean allowInherited, boolean useAttachedJavadoc)
throws ModelException {
Reader contentReader = getContentReader(member, allowInherited);
if (contentReader != null)
return new JavaDoc2HTMLTextReader(contentReader);
IOpenable openable = member.getOpenable();
if (useAttachedJavadoc && openable != null
&& openable.getBuffer() == null) { // only
// if
// no
// source
// available
// String s= member.getAttachedJavadoc(null);
// if (s != null)
// return new StringReader(s);
}
return null;
}
/**
* Gets a reader for an IMember's Javadoc comment content from the source
* attachment. and renders the tags in HTML. Returns <code>null</code> if
* the member does not contain a Javadoc comment or if no source is
* available.
*
* @param member
* The member to get the Javadoc of.
* @param allowInherited
* For methods with no (Javadoc) comment, the comment of the
* overridden class is returned if <code>allowInherited</code> is
* <code>true</code>.
* @return Returns a reader for the Javadoc comment content in HTML or
* <code>null</code> if the member does not contain a Javadoc
* comment or if no source is available
* @throws JavaModelException
* is thrown when the elements javadoc can not be accessed
* @deprecated As of 3.2, replaced by
* {@link #getHTMLContentReader(IMember, boolean, boolean)}
*/
public static Reader getHTMLContentReader(IMember member,
boolean allowInherited) throws ModelException {
return getHTMLContentReader(member, allowInherited, false);
}
private static Reader findDocInHierarchy(IMethod method)
throws ModelException {
return null;
}
}