update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / psi / impl / source / codeStyle / javadoc / JDMethodComment.java
blob0db0eda70ac45138c227ba0b6681cb32b014bedb
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.psi.impl.source.codeStyle.javadoc;
18 import org.jetbrains.annotations.NonNls;
20 import java.util.ArrayList;
22 /**
23 * Method comment
25 * @author Dmitry Skavish
27 public class JDMethodComment extends JDComment {
28 public JDMethodComment(CommentFormatter formatter) {
29 super(formatter);
32 private String returnTag;
33 private ArrayList<NameDesc> parmsList;
34 private ArrayList<NameDesc> throwsList;
36 private static final @NonNls String PARAM_TAG = "@param ";
37 private static final @NonNls String THROWS_TAG = "@throws ";
38 private static final @NonNls String EXCEPTION_TAG = "@exception ";
40 /**
41 * Generates parameters or exceptions
44 private void generateList(String prefix, StringBuffer sb, ArrayList<NameDesc> list, String tag,
45 boolean align_comments,
46 int min_name_length,
47 int max_name_length,
48 boolean generate_empty_tags
49 ) {
50 int max = 0;
51 if (align_comments) {
52 for (Object aList : list) {
53 NameDesc nd = (NameDesc)aList;
54 int l = nd.name.length();
55 if (isNull(nd.desc) && !generate_empty_tags) continue;
56 if (l > max && l <= max_name_length) max = l;
60 max = Math.max(max, min_name_length);
62 // create filler
63 StringBuffer fill = new StringBuffer(prefix.length() + tag.length() + max + 1);
64 fill.append(prefix);
65 int k = max + 1 + tag.length();
66 for (int i = 0; i < k; i++) fill.append(' ');
68 for (Object aList1 : list) {
69 NameDesc nd = (NameDesc)aList1;
70 if (isNull(nd.desc) && !generate_empty_tags) continue;
71 if (align_comments) {
72 sb.append(prefix);
73 sb.append(tag);
74 sb.append(nd.name);
76 if (nd.name.length() > max_name_length) {
77 sb.append('\n');
78 sb.append(myFormatter.getParser().splitIntoCLines(nd.desc, fill, true));
80 else {
81 int len = max - nd.name.length() + 1;
82 for (int j = 0; j < len; j++) {
83 sb.append(' ');
85 sb.append(myFormatter.getParser().splitIntoCLines(nd.desc, fill, false));
88 else {
89 sb.append(myFormatter.getParser().splitIntoCLines(tag + nd.name + " " + nd.desc, prefix, true));
94 protected void generateSpecial(String prefix, @NonNls StringBuffer sb) {
96 if (parmsList != null) {
97 int before = sb.length();
98 generateList(prefix, sb, parmsList, PARAM_TAG,
99 myFormatter.getSettings().JD_ALIGN_PARAM_COMMENTS,
100 myFormatter.getSettings().JD_MIN_PARM_NAME_LENGTH,
101 myFormatter.getSettings().JD_MAX_PARM_NAME_LENGTH,
102 myFormatter.getSettings().JD_KEEP_EMPTY_PARAMETER
105 int size = sb.length() - before;
106 if (size > 0 && myFormatter.getSettings().JD_ADD_BLANK_AFTER_PARM_COMMENTS) {
107 sb.append(prefix);
108 sb.append('\n');
112 if (returnTag != null) {
113 if (returnTag.trim().length() != 0 || myFormatter.getSettings().JD_KEEP_EMPTY_RETURN) {
114 sb.append(prefix);
115 sb.append("@return ");
116 sb.append(myFormatter.getParser().splitIntoCLines(returnTag, prefix + " ", false));
117 if (myFormatter.getSettings().JD_ADD_BLANK_AFTER_RETURN) {
118 sb.append(prefix);
119 sb.append('\n');
124 if (throwsList != null) {
125 String tag = myFormatter.getSettings().JD_USE_THROWS_NOT_EXCEPTION ? THROWS_TAG : EXCEPTION_TAG;
126 generateList(prefix, sb, throwsList, tag,
127 myFormatter.getSettings().JD_ALIGN_EXCEPTION_COMMENTS,
128 myFormatter.getSettings().JD_MIN_EXCEPTION_NAME_LENGTH,
129 myFormatter.getSettings().JD_MAX_EXCEPTION_NAME_LENGTH,
130 myFormatter.getSettings().JD_KEEP_EMPTY_EXCEPTION
135 public String getReturnTag() {
136 return returnTag;
139 public void setReturnTag(String returnTag) {
140 this.returnTag = returnTag;
143 public NameDesc getParameter(String name) {
144 return getNameDesc(name, parmsList);
147 public void removeParameter(NameDesc nd) {
148 if (parmsList == null) return;
149 parmsList.remove(nd);
152 public void removeThrow(NameDesc nd) {
153 if (throwsList == null) return;
154 throwsList.remove(nd);
157 private static NameDesc getNameDesc(String name, ArrayList<NameDesc> list) {
158 if (list == null) return null;
159 for (Object aList : list) {
160 NameDesc parameter = (NameDesc)aList;
161 if (parameter.name.equals(name)) return parameter;
163 return null;
166 public ArrayList<NameDesc> getParmsList() {
167 return parmsList;
170 public void addParameter(String name, String description) {
171 if (parmsList == null) {
172 parmsList = new ArrayList<NameDesc>();
174 parmsList.add(new NameDesc(name, description));
177 public ArrayList<NameDesc> getThrowsList() {
178 return throwsList;
181 public void addThrow(String className, String description) {
182 if (throwsList == null) {
183 throwsList = new ArrayList<NameDesc>();
185 throwsList.add(new NameDesc(className, description));
188 public NameDesc getThrow(String name) {
189 return getNameDesc(name, throwsList);
192 public void setParmsList(ArrayList<NameDesc> parmsList) {
193 this.parmsList = parmsList;
196 public void setThrowsList(ArrayList<NameDesc> throwsList) {
197 this.throwsList = throwsList;