diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AbstractLanguage.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AbstractLanguage.java index 7f4196b2b4..0bddb4d8d0 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AbstractLanguage.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AbstractLanguage.java @@ -9,10 +9,12 @@ import java.util.Properties; import net.sourceforge.pmd.util.filter.Filters; public abstract class AbstractLanguage implements Language { + private final String name; private final Tokenizer tokenizer; private final FilenameFilter fileFilter; - public AbstractLanguage(Tokenizer tokenizer, String... extensions) { + public AbstractLanguage(String name, Tokenizer tokenizer, String... extensions) { + this.name = name; this.tokenizer = tokenizer; fileFilter = Filters.toFilenameFilter(Filters.getFileExtensionOrDirectoryFilter(extensions)); } @@ -28,4 +30,8 @@ public abstract class AbstractLanguage implements Language { public void setProperties(Properties properties) { // needs to be implemented by subclasses. } + + public String getName() { + return name; + } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AnyLanguage.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AnyLanguage.java index d0e3135f7f..2b73080b44 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AnyLanguage.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/AnyLanguage.java @@ -5,6 +5,6 @@ package net.sourceforge.pmd.cpd; public class AnyLanguage extends AbstractLanguage { public AnyLanguage(String... extension) { - super(new AnyTokenizer(), extension); + super("any", new AnyTokenizer(), extension); } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java index 027a3aa48f..339d500177 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java @@ -86,7 +86,7 @@ public class CPDConfiguration extends AbstractConfiguration { if (languageString == null || "".equals(languageString)) { languageString = DEFAULT_LANGUAGE; } - return new LanguageFactory().createLanguage(languageString); + return LanguageFactory.createLanguage(languageString); } } @@ -150,7 +150,7 @@ public class CPDConfiguration extends AbstractConfiguration { } public static Language getLanguageFromString(String languageString) { - return new LanguageFactory().createLanguage(languageString); + return LanguageFactory.createLanguage(languageString); } public static void setSystemProperties(CPDConfiguration configuration) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java index d3e6022177..3d843c7e6d 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java @@ -96,7 +96,7 @@ public class CPDTask extends Task { if (ignoreAnnotations) { p.setProperty(Tokenizer.IGNORE_ANNOTATIONS, "true"); } - return new LanguageFactory().createLanguage(language, p); + return LanguageFactory.createLanguage(language, p); } private void report(CPD cpd) throws ReportException { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java index 74baeb4c51..9fad19ba35 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java @@ -81,7 +81,7 @@ public class GUI implements CPDListener { }; private static abstract class LanguageConfig { - public abstract Language languageFor(LanguageFactory lf, Properties p); + public abstract Language languageFor(Properties p); public boolean canIgnoreIdentifiers() { return false; } public boolean canIgnoreLiterals() { return false; } public boolean canIgnoreAnnotations() { return false; } @@ -90,31 +90,31 @@ public class GUI implements CPDListener { private static final Object[][] LANGUAGE_SETS = new Object[][] { {"Java", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("java"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("java", p); } public boolean canIgnoreIdentifiers() { return true; } public boolean canIgnoreLiterals() { return true; } public boolean canIgnoreAnnotations() { return true; } public String[] extensions() { return new String[] {".java", ".class" }; }; } }, {"JSP", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("jsp"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("jsp", p); } public String[] extensions() { return new String[] {".jsp" }; }; } }, {"C++", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("cpp"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("cpp", p); } public String[] extensions() { return new String[] {".cpp", ".c" }; }; } }, {"Ruby", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("ruby"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("ruby", p); } public String[] extensions() { return new String[] {".rb" }; }; } }, {"Fortran", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("fortran"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("fortran", p); } public String[] extensions() { return new String[] {".for", ".f", ".f66", ".f77", ".f90" }; }; } }, {"PHP", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("php"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("php", p); } public String[] extensions() { return new String[] {".php" }; }; } }, {"C#", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("cs"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("cs", p); } public String[] extensions() { return new String[] {".cs" }; }; } }, {"PLSQL", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("plsql"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("plsql", p); } public String[] extensions() { return new String[] {".sql" ,".trg" ,".prc",".fnc" @@ -125,10 +125,10 @@ public class GUI implements CPDListener { ,".tps",".tpb" }; }; } }, {"Ecmascript", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage("js"); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage("js", p); } public String[] extensions() { return new String[] {".js" }; }; } }, {"by extension...", new LanguageConfig() { - public Language languageFor(LanguageFactory lf, Properties p) { return lf.createLanguage(LanguageFactory.BY_EXTENSION, p); } + public Language languageFor(Properties p) { return LanguageFactory.createLanguage(LanguageFactory.BY_EXTENSION, p); } public String[] extensions() { return new String[] {"" }; }; } }, }; @@ -589,7 +589,7 @@ public class GUI implements CPDListener { p.setProperty(LanguageFactory.EXTENSION, extensionField.getText()); LanguageConfig conf = languageConfigFor((String)languageBox.getSelectedItem()); - Language language = conf.languageFor(new LanguageFactory(), p); + Language language = conf.languageFor(p); config.setLanguage(language); CPDConfiguration.setSystemProperties(config); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Language.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Language.java index 137e0d9f8f..fc449592b6 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Language.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Language.java @@ -7,6 +7,7 @@ import java.io.FilenameFilter; import java.util.Properties; public interface Language { + String getName(); Tokenizer getTokenizer(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java index 3e2dfdfc8d..8cf89f4c5d 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java @@ -3,56 +3,52 @@ */ package net.sourceforge.pmd.cpd; +import java.io.File; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; +import java.util.ServiceLoader; public class LanguageFactory { - /* - * TODO derive and provide this at runtime instead, used by outside IDEs - * FIXME Can't we do something cleaner and - * more dynamic ? Maybe externalise to a properties files that will - * be generated when building pmd ? This will not have to add manually - * new language here ? - */ - public static String[] supportedLanguages = - new String[]{"java", "jsp", "cpp", "c", "php", "ruby", "fortran", "ecmascript", "cs", "plsql" }; + public static final String EXTENSION = "extension"; + public static final String BY_EXTENSION = "by_extension"; - private static final String SUFFIX = "Language"; - public static final String EXTENSION = "extension"; - public static final String BY_EXTENSION = "by_extension"; - private static final String PACKAGE = "net.sourceforge.pmd.cpd."; + private static LanguageFactory instance = new LanguageFactory(); - public Language createLanguage(String language) { + public static String[] supportedLanguages; + static { + supportedLanguages = instance.languages.keySet().toArray(new String[instance.languages.size()]); + } + + private Map languages = new HashMap(); + + private LanguageFactory() { + ServiceLoader languageLoader = ServiceLoader.load(Language.class); + for (Language language : languageLoader) { + languages.put(language.getName().toLowerCase(), language); + } + } + + public static Language createLanguage(String language) { return createLanguage(language, new Properties()); } - public Language createLanguage(String language, Properties properties) + public static Language createLanguage(String language, Properties properties) { - language = this.languageAliases(language); - // First, we look for a parser following this syntax 'RubyLanguage' - Language implementation; - try { - implementation = this.dynamicLanguageImplementationLoad(this.languageConventionSyntax(language)); - if ( implementation == null ) - { - // if it failed, we look for a parser following this syntax 'CPPLanguage' - implementation = this.dynamicLanguageImplementationLoad(language.toUpperCase()); - //TODO: Should we try to break the coupling with PACKAGE by try to load the class - // based on her sole name ? - if ( implementation == null ) - { - // No proper implementation - // FIXME: We should log a warning, shouldn't we ? - return new AnyLanguage(language); - } - } - return implementation; - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); + Language implementation; + if (BY_EXTENSION.equals(language)) { + implementation = instance.getLanguageByExtension(properties.getProperty(EXTENSION)); + } else { + implementation = instance.languages.get(instance.languageAliases(language).toLowerCase()); } - return null; + if (implementation == null) { + // No proper implementation + // FIXME: We should log a warning, shouldn't we ? + implementation = new AnyLanguage(language); + } + implementation.setProperties(properties); + return implementation; } private String languageAliases(String language) @@ -63,32 +59,18 @@ public class LanguageFactory { } return language; } + + private Language getLanguageByExtension(String extension) { + Language result = null; + File dir = new File("."); + String filename = "file." + extension; - private Language dynamicLanguageImplementationLoad(String language) throws InstantiationException, IllegalAccessException - { - try { - return (Language) this.getClass().getClassLoader().loadClass( - PACKAGE + language + SUFFIX).newInstance(); - } catch (ClassNotFoundException e) { - // No class found, returning default implementation - // FIXME: There should be somekind of log of this - return null; - } catch (NoClassDefFoundError e) { - // Windows is case insensitive, so it may find the file, even though - // the name has a different case. Since Java is case sensitive, it - // will not accept the classname inside the file that was found and - // will throw a NoClassDefFoundError - return null; - } - } - - /* - * This method does simply this: - * ruby -> Ruby - * fortran -> Fortran - * ... - */ - private String languageConventionSyntax(String language) { - return Character.toUpperCase(language.charAt(0)) + language.substring(1, language.length()).toLowerCase(); - } + for (Language language : languages.values()) { + if (language.getFileFilter().accept(dir, filename)) { + result = language; + break; + } + } + return result; + } } diff --git a/pmd-core/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-core/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/cpd/CpddummyLanguage.java b/pmd-core/src/test/java/net/sourceforge/pmd/cpd/CpddummyLanguage.java index f0a28a7667..8c42a4bab2 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/cpd/CpddummyLanguage.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/cpd/CpddummyLanguage.java @@ -7,9 +7,9 @@ package net.sourceforge.pmd.cpd; * Sample language for testing LanguageFactory. * */ -public class CpddummyLanguage extends AnyLanguage { +public class CpddummyLanguage extends AbstractLanguage { public CpddummyLanguage() { - super("dummy"); + super("Cpddummy", new AnyTokenizer(), "dummy"); } } diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/cpd/LanguageFactoryTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/cpd/LanguageFactoryTest.java index eaf41a6599..f902392a5e 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/cpd/LanguageFactoryTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/cpd/LanguageFactoryTest.java @@ -10,8 +10,7 @@ public class LanguageFactoryTest { @Test public void testSimple() { - LanguageFactory f = new LanguageFactory(); - assertTrue(f.createLanguage("Cpddummy") instanceof CpddummyLanguage); - assertTrue(f.createLanguage("not_existing_language") instanceof AnyLanguage); + assertTrue(LanguageFactory.createLanguage("Cpddummy") instanceof CpddummyLanguage); + assertTrue(LanguageFactory.createLanguage("not_existing_language") instanceof AnyLanguage); } } diff --git a/pmd-core/src/test/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-core/src/test/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..f76b047c77 --- /dev/null +++ b/pmd-core/src/test/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.CpddummyLanguage diff --git a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java index 5fd5243d07..bed4336d55 100644 --- a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java +++ b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java @@ -5,6 +5,6 @@ package net.sourceforge.pmd.cpd; public class CPPLanguage extends AbstractLanguage { public CPPLanguage() { - super(new CPPTokenizer(), ".h", ".hpp", ".hxx",".c", ".cpp", ".cxx", ".cc", ".C"); + super("cpp", new CPPTokenizer(), ".h", ".hpp", ".hxx",".c", ".cpp", ".cxx", ".cc", ".C"); } } diff --git a/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..2170e55e7f --- /dev/null +++ b/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.CPPLanguage diff --git a/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsLanguage.java b/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsLanguage.java index eebca47820..60554b6089 100644 --- a/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsLanguage.java +++ b/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsLanguage.java @@ -5,6 +5,6 @@ package net.sourceforge.pmd.cpd; public class CsLanguage extends AbstractLanguage { public CsLanguage() { - super(new CsTokenizer(), ".cs"); + super("cs", new CsTokenizer(), ".cs"); } } diff --git a/pmd-cs/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-cs/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..76459b4741 --- /dev/null +++ b/pmd-cs/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.CsLanguage diff --git a/pmd-fortran/src/main/java/net/sourceforge/pmd/cpd/FortranLanguage.java b/pmd-fortran/src/main/java/net/sourceforge/pmd/cpd/FortranLanguage.java index d81a0ac8be..b142cfde0b 100644 --- a/pmd-fortran/src/main/java/net/sourceforge/pmd/cpd/FortranLanguage.java +++ b/pmd-fortran/src/main/java/net/sourceforge/pmd/cpd/FortranLanguage.java @@ -9,6 +9,6 @@ package net.sourceforge.pmd.cpd; */ public class FortranLanguage extends AbstractLanguage { public FortranLanguage() { - super(new FortranTokenizer(), ".for", ".f", ".f66", ".f77", ".f90"); + super("fortran", new FortranTokenizer(), ".for", ".f", ".f66", ".f77", ".f90"); } } diff --git a/pmd-fortran/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-fortran/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..f78952ce23 --- /dev/null +++ b/pmd-fortran/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.FortranLanguage diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaLanguage.java b/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaLanguage.java index b5eb80e2da..06780b3f86 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaLanguage.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaLanguage.java @@ -11,7 +11,7 @@ public class JavaLanguage extends AbstractLanguage { } public JavaLanguage(Properties properties) { - super(new JavaTokenizer(), ".java"); + super("java", new JavaTokenizer(), ".java"); setProperties(properties); } diff --git a/pmd-java/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-java/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..d5a4b32578 --- /dev/null +++ b/pmd-java/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.JavaLanguage diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/cpd/EcmascriptLanguage.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/cpd/EcmascriptLanguage.java index 479e789b95..3890606e4a 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/cpd/EcmascriptLanguage.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/cpd/EcmascriptLanguage.java @@ -9,6 +9,6 @@ package net.sourceforge.pmd.cpd; */ public class EcmascriptLanguage extends AbstractLanguage { public EcmascriptLanguage() { - super(new EcmascriptTokenizer(), ".js"); + super("ecmascript", new EcmascriptTokenizer(), ".js"); } } diff --git a/pmd-javascript/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-javascript/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..7019119daf --- /dev/null +++ b/pmd-javascript/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.EcmascriptLanguage diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPLanguage.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPLanguage.java index 8291cf7e70..872fa7d633 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPLanguage.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPLanguage.java @@ -5,6 +5,6 @@ package net.sourceforge.pmd.cpd; public class JSPLanguage extends AbstractLanguage { public JSPLanguage() { - super(new JSPTokenizer(), ".jsp", ".jspx"); + super("jsp", new JSPTokenizer(), ".jsp", ".jspx"); } } diff --git a/pmd-jsp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-jsp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..a644d2d185 --- /dev/null +++ b/pmd-jsp/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.JSPLanguage diff --git a/pmd-php/src/main/java/net/sourceforge/pmd/cpd/PHPLanguage.java b/pmd-php/src/main/java/net/sourceforge/pmd/cpd/PHPLanguage.java index 110c25ddc2..6e625aab94 100644 --- a/pmd-php/src/main/java/net/sourceforge/pmd/cpd/PHPLanguage.java +++ b/pmd-php/src/main/java/net/sourceforge/pmd/cpd/PHPLanguage.java @@ -5,6 +5,6 @@ package net.sourceforge.pmd.cpd; public class PHPLanguage extends AbstractLanguage { public PHPLanguage() { - super(new PHPTokenizer(), ".php", ".class"); + super("php", new PHPTokenizer(), ".php", ".class"); } } diff --git a/pmd-php/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-php/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..665241293c --- /dev/null +++ b/pmd-php/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.PHPLanguage diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/cpd/PLSQLLanguage.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/cpd/PLSQLLanguage.java index 3bf355168e..df1b5af84b 100755 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/cpd/PLSQLLanguage.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/cpd/PLSQLLanguage.java @@ -11,7 +11,7 @@ import java.util.Properties; */ public class PLSQLLanguage extends AbstractLanguage { public PLSQLLanguage() { - super(new PLSQLTokenizer() + super("plsql", new PLSQLTokenizer() ,".sql" ,".trg" //Triggers ,".prc",".fnc" // Standalone Procedures and Functions diff --git a/pmd-plsql/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-plsql/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..cb05edd026 --- /dev/null +++ b/pmd-plsql/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.PLSQLLanguage diff --git a/pmd-ruby/src/main/java/net/sourceforge/pmd/cpd/RubyLanguage.java b/pmd-ruby/src/main/java/net/sourceforge/pmd/cpd/RubyLanguage.java index 72a1fbbdbd..106993a673 100644 --- a/pmd-ruby/src/main/java/net/sourceforge/pmd/cpd/RubyLanguage.java +++ b/pmd-ruby/src/main/java/net/sourceforge/pmd/cpd/RubyLanguage.java @@ -9,6 +9,6 @@ package net.sourceforge.pmd.cpd; */ public class RubyLanguage extends AbstractLanguage { public RubyLanguage() { - super(new RubyTokenizer(), ".rb", ".cgi", ".class"); + super("ruby", new RubyTokenizer(), ".rb", ".cgi", ".class"); } } diff --git a/pmd-ruby/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-ruby/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..223d4d5f92 --- /dev/null +++ b/pmd-ruby/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.RubyLanguage