01 package net.sourceforge.pmd.lang;
02
03 import java.io.File;
04 import java.io.FilenameFilter;
05 import java.util.Collections;
06 import java.util.List;
07
08 /**
09 * This is an implementation of the {@link FilenameFilter} interface which
10 * compares a file against a collection of Languages to see if the any are
11 * applicable.
12 *
13 * @author Pieter_Van_Raemdonck - Application Engineers NV/SA - www.ae.be
14 */
15 public class LanguageFilenameFilter implements FilenameFilter {
16
17 private final List<Language> languages;
18
19 /**
20 * Create a LanguageFilenameFilter for a single Language.
21 * @param language The Language.
22 */
23 public LanguageFilenameFilter(Language language) {
24 this(Collections.singletonList(language));
25 }
26
27 /**
28 * Create a LanguageFilenameFilter for a List of Languages.
29 * @param languages The List of Languages.
30 */
31 public LanguageFilenameFilter(List<Language> languages) {
32 this.languages = languages;
33 }
34
35 /**
36 * Check if a file should be checked by PMD.
37 * {@inheritDoc}
38 */
39 public boolean accept(File dir, String name) {
40 // Any source file should have a '.' in its name...
41 int lastDotIndex = name.lastIndexOf('.');
42 if (lastDotIndex < 0) {
43 return false;
44 }
45
46 String extension = name.substring(1 + lastDotIndex).toUpperCase();
47 for (Language language : languages) {
48 for (String ext : language.getExtensions()) {
49 if (extension.equalsIgnoreCase(ext)) {
50 return true;
51 }
52 }
53 }
54 return false;
55 }
56
57 public String toString() {
58 StringBuilder buffer = new StringBuilder("(Extension is one of: ");
59 for (Language language : languages) {
60 List<String> extensions = language.getExtensions();
61 for (int i = 0; i < extensions.size(); i++) {
62 if (i > 0) {
63 buffer.append(", ");
64 }
65 buffer.append(extensions.get(i));
66 }
67 }
68 buffer.append(")");
69 return buffer.toString();
70 }
71 }
|