diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java index d7f9811faf..ce35a109ec 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java @@ -4,8 +4,11 @@ package net.sourceforge.pmd.lang.vm; +import net.sourceforge.pmd.cpd.Tokenizer; +import net.sourceforge.pmd.lang.LanguagePropertyBundle; import net.sourceforge.pmd.lang.LanguageRegistry; import net.sourceforge.pmd.lang.impl.SimpleLanguageModuleBase; +import net.sourceforge.pmd.lang.vm.cpd.VmTokenizer; /** * Created by christoferdutz on 20.09.14. @@ -28,4 +31,8 @@ public class VmLanguageModule extends SimpleLanguageModuleBase { return (VmLanguageModule) LanguageRegistry.PMD.getLanguageById(ID); } + @Override + public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) { + return new VmTokenizer(); + } } diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizer.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizer.java new file mode 100644 index 0000000000..d8d29ff173 --- /dev/null +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizer.java @@ -0,0 +1,21 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.vm.cpd; + +import java.io.IOException; + +import net.sourceforge.pmd.cpd.impl.JavaCCTokenizer; +import net.sourceforge.pmd.lang.TokenManager; +import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream; +import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken; +import net.sourceforge.pmd.lang.document.TextDocument; +import net.sourceforge.pmd.lang.vm.ast.VmTokenKinds; + +public class VmTokenizer extends JavaCCTokenizer { + @Override + protected TokenManager makeLexerImpl(TextDocument doc) throws IOException { + return VmTokenKinds.newTokenManager(CharStream.create(doc)); + } +} diff --git a/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizerTest.java b/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizerTest.java new file mode 100644 index 0000000000..98e018586c --- /dev/null +++ b/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/cpd/VmTokenizerTest.java @@ -0,0 +1,21 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.vm.cpd; + +import org.junit.jupiter.api.Test; + +import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest; +import net.sourceforge.pmd.lang.vm.VmLanguageModule; + +class VmTokenizerTest extends CpdTextComparisonTest { + VmTokenizerTest() { + super(VmLanguageModule.getInstance(), ".vm"); + } + + @Test + void sampleTest() { + doTest("sample_vm"); + } +} diff --git a/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.txt b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.txt new file mode 100644 index 0000000000..bc84902704 --- /dev/null +++ b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.txt @@ -0,0 +1,54 @@ + [Image] or [Truncated image[ Bcol Ecol +L1 + [#if] 1 4 + [(] 4 5 + [ ] 5 6 + [$XHTML] 6 12 + [ ] 12 13 + [)\n] 13 15 +L2 + [ #set(] 1 10 + [ ] 10 11 + [$br] 11 14 + [ ] 14 15 + [=] 15 16 + [ ] 16 17 + ["
"] 17 25 + [ ] 25 26 + [)\n] 26 28 +L3 + [ ] 1 5 + [#if] 5 8 + [ ] 8 9 + [(] 9 10 + [$someValue] 10 20 + [)\n] 20 22 +L4 + [ ] 1 9 + [#if] 9 12 + [ ] 12 13 + [(] 13 14 + [$otherValue] 14 25 + [)\n] 25 27 +L5 + [ do stuff\n ] 1 9 +L6 + [#end\n] 9 14 +L7 + [ ] 1 5 + [#end\n] 5 10 +L8 + [#else\n] 1 7 +L9 + [ #set(] 1 10 + [ ] 10 11 + [$br] 11 14 + [ ] 14 15 + [=] 15 16 + [ ] 16 17 + ["
"] 17 23 + [ ] 23 24 + [)\n] 24 26 +L10 + [#end\n] 1 6 +EOF diff --git a/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.vm b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.vm new file mode 100644 index 0000000000..33b1e63114 --- /dev/null +++ b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/cpd/testdata/sample_vm.vm @@ -0,0 +1,10 @@ +#if( $XHTML ) + #set( $br = "
" ) + #if ($someValue) + #if ($otherValue) + do stuff + #end + #end +#else + #set( $br = "
" ) +#end diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/pom/PomLanguageModule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/pom/PomLanguageModule.java index 9c97c5d01b..315a61efe3 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/pom/PomLanguageModule.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/pom/PomLanguageModule.java @@ -4,9 +4,12 @@ package net.sourceforge.pmd.lang.pom; +import net.sourceforge.pmd.cpd.Tokenizer; +import net.sourceforge.pmd.lang.LanguagePropertyBundle; import net.sourceforge.pmd.lang.LanguageRegistry; import net.sourceforge.pmd.lang.impl.SimpleLanguageModuleBase; import net.sourceforge.pmd.lang.xml.XmlHandler; +import net.sourceforge.pmd.lang.xml.cpd.XmlTokenizer; public class PomLanguageModule extends SimpleLanguageModuleBase { private static final String ID = "pom"; @@ -22,4 +25,8 @@ public class PomLanguageModule extends SimpleLanguageModuleBase { return (PomLanguageModule) LanguageRegistry.PMD.getLanguageById(ID); } + @Override + public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) { + return new XmlTokenizer(); + } } diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/wsdl/WsdlLanguageModule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/wsdl/WsdlLanguageModule.java index fdbf8fac0d..aa617d1dd4 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/wsdl/WsdlLanguageModule.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/wsdl/WsdlLanguageModule.java @@ -4,9 +4,12 @@ package net.sourceforge.pmd.lang.wsdl; +import net.sourceforge.pmd.cpd.Tokenizer; +import net.sourceforge.pmd.lang.LanguagePropertyBundle; import net.sourceforge.pmd.lang.LanguageRegistry; import net.sourceforge.pmd.lang.impl.SimpleLanguageModuleBase; import net.sourceforge.pmd.lang.xml.XmlHandler; +import net.sourceforge.pmd.lang.xml.cpd.XmlTokenizer; /** * Created by bernardo-macedo on 24.06.15. @@ -25,4 +28,9 @@ public class WsdlLanguageModule extends SimpleLanguageModuleBase { public static WsdlLanguageModule getInstance() { return (WsdlLanguageModule) LanguageRegistry.PMD.getLanguageById(ID); } + + @Override + public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) { + return new XmlTokenizer(); + } } diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xsl/XslLanguageModule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xsl/XslLanguageModule.java index f3dff3a737..13884bd243 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xsl/XslLanguageModule.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xsl/XslLanguageModule.java @@ -4,9 +4,12 @@ package net.sourceforge.pmd.lang.xsl; +import net.sourceforge.pmd.cpd.Tokenizer; +import net.sourceforge.pmd.lang.LanguagePropertyBundle; import net.sourceforge.pmd.lang.LanguageRegistry; import net.sourceforge.pmd.lang.impl.SimpleLanguageModuleBase; import net.sourceforge.pmd.lang.xml.XmlHandler; +import net.sourceforge.pmd.lang.xml.cpd.XmlTokenizer; /** * Created by christoferdutz on 20.09.14. @@ -26,4 +29,9 @@ public class XslLanguageModule extends SimpleLanguageModuleBase { public static XslLanguageModule getInstance() { return (XslLanguageModule) LanguageRegistry.PMD.getLanguageById(ID); } + + @Override + public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) { + return new XmlTokenizer(); + } }