blob: a9234632eb46db69962d1eaa891ef548b014209a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.corext.refactoring.util;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import org.eclipse.text.edits.TextEditGroup;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.Javadoc;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.TagElement;
import org.eclipse.jdt.core.dom.TextElement;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
import org.eclipse.jdt.internal.ui.text.correction.JavadocTagsSubProcessor;
import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
public class JavadocUtil {
private JavadocUtil() {
// static-only
}
//TODO: is a copy of ChangeSignatureRefactoring.DeclarationUpdate#createParamTag(..)
public static TagElement createParamTag(String parameterName, AST ast, IJavaProject javaProject) {
TagElement paramNode= ast.newTagElement();
paramNode.setTagName(TagElement.TAG_PARAM);
SimpleName simpleName= ast.newSimpleName(parameterName);
paramNode.fragments().add(simpleName);
TextElement textElement= ast.newTextElement();
String text= StubUtility.getTodoTaskTag(javaProject);
if (text != null)
textElement.setText(text); //TODO: use template with {@todo} ...
paramNode.fragments().add(textElement);
return paramNode;
}
/**
* Decide whether to add a "param" javadoc tag or not.
* @param methodDeclaration the method declaration
* @return method has javadoc && (method had no parameter before || there is already an @param tag)
*/
public static boolean shouldAddParamJavadoc(MethodDeclaration methodDeclaration) {
Javadoc javadoc= methodDeclaration.getJavadoc();
if (javadoc == null)
return false;
if (methodDeclaration.parameters().size() == 0)
return true;
List tags= javadoc.tags();
for (Iterator iter= tags.iterator(); iter.hasNext();) {
TagElement element= (TagElement) iter.next();
if (TagElement.TAG_PARAM.equals(element.getTagName()))
return true;
}
return false;
}
/**
* Adds a "param" javadoc tag for a new last parameter if necessary.
* @param parameterName
* @param methodDeclaration
* @param astRewrite
* @param javaProject
* @param groupDescription
*/
public static void addParamJavadoc(String parameterName, MethodDeclaration methodDeclaration,
ASTRewrite astRewrite, IJavaProject javaProject, TextEditGroup groupDescription) {
if (! shouldAddParamJavadoc(methodDeclaration))
return;
ListRewrite tagsRewrite= astRewrite.getListRewrite(methodDeclaration.getJavadoc(), Javadoc.TAGS_PROPERTY);
HashSet leadingNames= new HashSet();
for (Iterator iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
SingleVariableDeclaration curr= (SingleVariableDeclaration) iter.next();
leadingNames.add(curr.getName().getIdentifier());
}
TagElement parameterTag= createParamTag(parameterName, astRewrite.getAST(), javaProject);
JavadocTagsSubProcessor.insertTag(tagsRewrite, parameterTag, leadingNames, groupDescription);
}
}