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 public static String commaSeparatedTerseNames(List<LanguageVersion> languageVersions) {
209
210 if (languageVersions == null || languageVersions.isEmpty()) {
211 return "";
212 }
213
214 StringBuilder builder = new StringBuilder();
215 builder.append(languageVersions.get(0).getTerseName());
216 for (int i=1; i<languageVersions.size(); i++) {
217 builder.append(", ").append(languageVersions.get(i).getTerseName());
218 }
219 return builder.toString();
220 }
221
222
223
224
225
226
227 public static LanguageVersion getDefaultVersion() {
228 return LanguageVersion.JAVA_15;
229 }
230 }