1
2
3
4 package net.sourceforge.pmd.lang;
5
6 import java.util.ArrayList;
7 import java.util.Collections;
8 import java.util.List;
9
10 import net.sourceforge.pmd.lang.cpp.CppHandler;
11 import net.sourceforge.pmd.lang.ecmascript.Ecmascript3Handler;
12 import net.sourceforge.pmd.lang.java.Java13Handler;
13 import net.sourceforge.pmd.lang.java.Java14Handler;
14 import net.sourceforge.pmd.lang.java.Java15Handler;
15 import net.sourceforge.pmd.lang.java.Java16Handler;
16 import net.sourceforge.pmd.lang.java.Java17Handler;
17 import net.sourceforge.pmd.lang.jsp.JspHandler;
18 import net.sourceforge.pmd.lang.xml.XmlHandler;
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public enum LanguageVersion {
41
42
43
44 CPP(Language.CPP, "", new CppHandler(), true),
45 FORTRAN(Language.FORTRAN, "", null, true),
46 ECMASCRIPT(Language.ECMASCRIPT, "3", new Ecmascript3Handler(), true),
47 JAVA_13(Language.JAVA, "1.3", new Java13Handler(), false),
48 JAVA_14(Language.JAVA, "1.4", new Java14Handler(), false),
49 JAVA_15(Language.JAVA, "1.5", new Java15Handler(), false),
50 JAVA_16(Language.JAVA, "1.6", new Java16Handler(), false),
51 JAVA_17(Language.JAVA, "1.7", new Java17Handler(), true),
52 JSP(Language.JSP, "", new JspHandler(), true),
53 PHP(Language.PHP, "", null, true),
54 RUBY(Language.RUBY, "", null, true),
55 XSL(Language.XSL, "", new XmlHandler(), true),
56 XML(Language.XML, "", new XmlHandler(), true);
57
58 private final Language language;
59 private final String version;
60 private final LanguageVersionHandler languageVersionHandler;
61 private final boolean defaultVersion;
62
63
64
65
66
67
68
69
70
71
72
73
74
75 private LanguageVersion(Language language, String version, LanguageVersionHandler languageVersionHandler,
76 boolean defaultVersion) {
77 if (language == null) {
78 throw new IllegalArgumentException("Language must not be null.");
79 }
80 if (version == null) {
81 throw new IllegalArgumentException("Version must not be null.");
82 }
83 this.language = language;
84 this.version = version;
85 this.languageVersionHandler = languageVersionHandler;
86 this.defaultVersion = defaultVersion;
87
88
89 if (defaultVersion) {
90 for (LanguageVersion languageVersion : language.getVersions()) {
91 if (languageVersion.isDefaultVersion()) {
92 throw new IllegalArgumentException(languageVersion.getLanguage() + " already has default "
93 + languageVersion + ", not " + version);
94 }
95 }
96 }
97 language.getVersions().add(this);
98
99 Collections.sort(language.getVersions());
100 }
101
102
103
104
105
106 public Language getLanguage() {
107 return language;
108 }
109
110
111
112
113
114 public String getVersion() {
115 return version;
116 }
117
118
119
120
121
122
123 public String getName() {
124 return version.length() > 0 ? language.getName() + ' ' + version : language.getName();
125 }
126
127
128
129
130
131
132 public String getShortName() {
133 return version.length() > 0 ? language.getShortName() + ' ' + version : language.getShortName();
134 }
135
136
137
138
139
140
141 public String getTerseName() {
142 return version.length() > 0 ? language.getTerseName() + ' ' + version : language.getTerseName();
143 }
144
145
146
147
148
149 public LanguageVersionHandler getLanguageVersionHandler() {
150 return languageVersionHandler;
151 }
152
153
154
155
156
157
158 public boolean isDefaultVersion() {
159 return defaultVersion;
160 }
161
162
163
164
165 @Override
166 public String toString() {
167 return "LanguageVersion[" + language.getName() + " " + version + ']';
168 }
169
170
171
172
173
174
175
176
177 public static LanguageVersion findByTerseName(String terseName) {
178 for (LanguageVersion languageVersion : LanguageVersion.values()) {
179 if (terseName.equals(languageVersion.getTerseName())) {
180 return languageVersion;
181 }
182 }
183 return null;
184 }
185
186
187
188
189
190
191
192
193 public static List<LanguageVersion> findVersionsForLanguageTerseName(String languageTerseName) {
194 List<LanguageVersion> versionsAvailable = new ArrayList<LanguageVersion>(0);
195 for (LanguageVersion languageVersion : LanguageVersion.values()) {
196 if (languageVersion.getLanguage().getTerseName().equals(languageTerseName)) {
197 versionsAvailable.add(languageVersion);
198 }
199 }
200 return versionsAvailable;
201 }
202
203
204
205
206
207
208
209
210 public static LanguageVersion findVersionsForLanguageTerseName(String languageTerseName, String languageVersion) {
211 List<LanguageVersion> versionsAvailable = findVersionsForLanguageTerseName(languageTerseName);
212 for ( LanguageVersion version : versionsAvailable ) {
213 if ( version.getVersion().equalsIgnoreCase(languageVersion) )
214 return version;
215 }
216 return null;
217 }
218
219
220
221
222
223
224
225 public static String commaSeparatedTerseNames(List<LanguageVersion> languageVersions) {
226
227 if (languageVersions == null || languageVersions.isEmpty()) {
228 return "";
229 }
230
231 StringBuilder builder = new StringBuilder();
232 builder.append(languageVersions.get(0).getTerseName());
233 for (int i=1; i<languageVersions.size(); i++) {
234 builder.append(", ").append(languageVersions.get(i).getTerseName());
235 }
236 return builder.toString();
237 }
238
239
240
241
242
243
244 public static LanguageVersion getDefaultVersion() {
245 return LanguageVersion.JAVA_15;
246 }
247 }