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
;
25 * @author Dmitry Skavish
27 public class JDMethodComment
extends JDComment
{
28 public JDMethodComment(CommentFormatter 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 ";
41 * Generates parameters or exceptions
44 private void generateList(String prefix
, StringBuffer sb
, ArrayList
<NameDesc
> list
, String tag
,
45 boolean align_comments
,
48 boolean generate_empty_tags
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
);
63 StringBuffer fill
= new StringBuffer(prefix
.length() + tag
.length() + max
+ 1);
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;
76 if (nd
.name
.length() > max_name_length
) {
78 sb
.append(myFormatter
.getParser().splitIntoCLines(nd
.desc
, fill
, true));
81 int len
= max
- nd
.name
.length() + 1;
82 for (int j
= 0; j
< len
; j
++) {
85 sb
.append(myFormatter
.getParser().splitIntoCLines(nd
.desc
, fill
, false));
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
) {
112 if (returnTag
!= null) {
113 if (returnTag
.trim().length() != 0 || myFormatter
.getSettings().JD_KEEP_EMPTY_RETURN
) {
115 sb
.append("@return ");
116 sb
.append(myFormatter
.getParser().splitIntoCLines(returnTag
, prefix
+ " ", false));
117 if (myFormatter
.getSettings().JD_ADD_BLANK_AFTER_RETURN
) {
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() {
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
;
166 public ArrayList
<NameDesc
> getParmsList() {
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() {
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
;