1
2
3
4 package net.sourceforge.pmd.lang;
5
6 import java.io.File;
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10
11
12
13
14
15
16 public class LanguageVersionDiscoverer {
17 private Map<Language, LanguageVersion> languageToLanguageVersion = new HashMap<Language, LanguageVersion>();
18
19
20
21
22
23
24 public LanguageVersion setDefaultLanguageVersion(LanguageVersion languageVersion) {
25 LanguageVersion currentLanguageVersion = languageToLanguageVersion.put(languageVersion.getLanguage(),
26 languageVersion);
27 if (currentLanguageVersion == null) {
28 currentLanguageVersion = languageVersion.getLanguage().getDefaultVersion();
29 }
30 return currentLanguageVersion;
31 }
32
33
34
35
36
37
38 public LanguageVersion getDefaultLanguageVersion(Language language) {
39 LanguageVersion languageVersion = languageToLanguageVersion.get(language);
40 if (languageVersion == null) {
41 languageVersion = language.getDefaultVersion();
42 }
43 return languageVersion;
44 }
45
46
47
48
49
50
51
52
53 public LanguageVersion getDefaultLanguageVersionForFile(File sourceFile) {
54 return getDefaultLanguageVersionForFile(sourceFile.getName());
55 }
56
57
58
59
60
61
62
63
64
65 public LanguageVersion getDefaultLanguageVersionForFile(String fileName) {
66 List<Language> languages = getLanguagesForFile(fileName);
67 LanguageVersion languageVersion = null;
68 if (!languages.isEmpty()) {
69 languageVersion = getDefaultLanguageVersion(languages.get(0));
70 }
71 return languageVersion;
72 }
73
74
75
76
77
78
79
80 public List<Language> getLanguagesForFile(File sourceFile) {
81 return getLanguagesForFile(sourceFile.getName());
82 }
83
84
85
86
87
88
89
90 public List<Language> getLanguagesForFile(String fileName) {
91 String extension = getExtension(fileName);
92 return LanguageRegistry.findByExtension(extension);
93 }
94
95
96 private String getExtension(String fileName) {
97 String extension = null;
98 int extensionIndex = 1 + fileName.lastIndexOf('.');
99 if (extensionIndex > 0) {
100 extension = fileName.substring(extensionIndex);
101 }
102 return extension;
103 }
104 }