001/* 002 * JDrupes MDoclet 003 * Copyright 2013 Raffael Herzog 004 * Copyright (C) 2017 Michael N. Lipp 005 * 006 * This program is free software; you can redistribute it and/or modify it 007 * under the terms of the GNU General Public License as published by 008 * the Free Software Foundation; either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, but 012 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 013 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 014 * for more details. 015 * 016 * You should have received a copy of the GNU General Public License along 017 * with this program; if not, see <http://www.gnu.org/licenses/>. 018 */ 019package org.jdrupes.mdoclet; 020 021import java.util.Arrays; 022 023import com.sun.javadoc.ClassDoc; 024import com.sun.javadoc.PackageDoc; 025import com.sun.javadoc.RootDoc; 026import com.sun.javadoc.SeeTag; 027import com.sun.javadoc.SourcePosition; 028import com.sun.javadoc.Tag; 029 030 031/** 032 * A wrapper for the {@link RootDoc}. It forwards all calls to the original root document 033 * exception {@link #options()}, which may contain a modified array of doclet options. 034 */ 035public class RootDocWrapper implements RootDoc { 036 037 private final RootDoc delegate; 038 private String[][] options; 039 040 public RootDocWrapper(RootDoc delegate, String[][] options) { 041 this.delegate = delegate; 042 this.options = options; 043 } 044 045 /** 046 * Looks for the given option and returns it, if it exists. 047 * 048 * @return the option or `null` 049 */ 050 public String[] findOption(String option) { 051 for (String[] o: options) { 052 if (o[0].equals(option)) { 053 return o; 054 } 055 } 056 return null; 057 } 058 059 /** 060 * Append an option to the doclet options. 061 * 062 * @param option The option to append. 063 */ 064 public void appendOption(String... option) { 065 options = Arrays.copyOf(options, options.length + 1); 066 options[options.length - 1] = option; 067 } 068 069 /** 070 * Overriden to return a modified array of doclet options. 071 * 072 * @return The modified doclet options. 073 */ 074 @Override 075 public String[][] options() { 076 return options; 077 } 078 079 @Override 080 public PackageDoc[] specifiedPackages() { 081 return delegate.specifiedPackages(); 082 } 083 084 @Override 085 public ClassDoc[] specifiedClasses() { 086 return delegate.specifiedClasses(); 087 } 088 089 @Override 090 public ClassDoc[] classes() { 091 return delegate.classes(); 092 } 093 094 @Override 095 public PackageDoc packageNamed(String name) { 096 return delegate.packageNamed(name); 097 } 098 099 @Override 100 public ClassDoc classNamed(String qualifiedName) { 101 return delegate.classNamed(qualifiedName); 102 } 103 104 @Override 105 public String commentText() { 106 return delegate.commentText(); 107 } 108 109 @Override 110 public Tag[] tags() { 111 return delegate.tags(); 112 } 113 114 @Override 115 public Tag[] tags(String tagname) { 116 return delegate.tags(tagname); 117 } 118 119 @Override 120 public SeeTag[] seeTags() { 121 return delegate.seeTags(); 122 } 123 124 @Override 125 public Tag[] inlineTags() { 126 return delegate.inlineTags(); 127 } 128 129 @Override 130 public Tag[] firstSentenceTags() { 131 return delegate.firstSentenceTags(); 132 } 133 134 @Override 135 public String getRawCommentText() { 136 return delegate.getRawCommentText(); 137 } 138 139 @Override 140 public void setRawCommentText(String rawDocumentation) { 141 delegate.setRawCommentText(rawDocumentation); 142 } 143 144 @Override 145 public String name() { 146 return delegate.name(); 147 } 148 149 @Override 150 public int compareTo(Object obj) { 151 return delegate.compareTo(obj); 152 } 153 154 @Override 155 public boolean isField() { 156 return delegate.isField(); 157 } 158 159 @Override 160 public boolean isEnumConstant() { 161 return delegate.isEnumConstant(); 162 } 163 164 @Override 165 public boolean isConstructor() { 166 return delegate.isConstructor(); 167 } 168 169 @Override 170 public boolean isMethod() { 171 return delegate.isMethod(); 172 } 173 174 @Override 175 public boolean isAnnotationTypeElement() { 176 return delegate.isAnnotationTypeElement(); 177 } 178 179 @Override 180 public boolean isInterface() { 181 return delegate.isInterface(); 182 } 183 184 @Override 185 public boolean isException() { 186 return delegate.isException(); 187 } 188 189 @Override 190 public boolean isError() { 191 return delegate.isError(); 192 } 193 194 @Override 195 public boolean isEnum() { 196 return delegate.isEnum(); 197 } 198 199 @Override 200 public boolean isAnnotationType() { 201 return delegate.isAnnotationType(); 202 } 203 204 @Override 205 public boolean isOrdinaryClass() { 206 return delegate.isOrdinaryClass(); 207 } 208 209 @Override 210 public boolean isClass() { 211 return delegate.isClass(); 212 } 213 214 @Override 215 public boolean isIncluded() { 216 return delegate.isIncluded(); 217 } 218 219 @Override 220 public SourcePosition position() { 221 return delegate.position(); 222 } 223 224 @Override 225 public void printError(String msg) { 226 delegate.printError(msg); 227 } 228 229 @Override 230 public void printError(SourcePosition pos, String msg) { 231 delegate.printError(pos, msg); 232 } 233 234 @Override 235 public void printWarning(String msg) { 236 delegate.printWarning(msg); 237 } 238 239 @Override 240 public void printWarning(SourcePosition pos, String msg) { 241 delegate.printWarning(pos, msg); 242 } 243 244 @Override 245 public void printNotice(String msg) { 246 delegate.printNotice(msg); 247 } 248 249 @Override 250 public void printNotice(SourcePosition pos, String msg) { 251 delegate.printNotice(pos, msg); 252 } 253}