Delete old CPD Language interface
reorganize cpd modules
This commit is contained in:
51
justfile
Normal file
51
justfile
Normal file
@ -0,0 +1,51 @@
|
||||
|
||||
|
||||
pmdJavaDeps := "pmd-core,pmd-lang-test,pmd-test,pmd-java"
|
||||
commonBuildOpts := "-Dkotlin.compiler.incremental"
|
||||
|
||||
genJavaAst:
|
||||
rm -f pmd-java/target/generated-sources/javacc/last-generated-timestamp
|
||||
mvnd generate-sources -pl pmd-java
|
||||
|
||||
reGenAllSources:
|
||||
rm -rf pmd-*/target/generated-sources
|
||||
rm pmd-*/target/last-generated-timestamp
|
||||
mvnd generate-sources
|
||||
|
||||
install MOD:
|
||||
mvnd install -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -pl "pmd-{{MOD}}"
|
||||
|
||||
alias i := install
|
||||
|
||||
cleanInstallEverything *FLAGS:
|
||||
mvnd clean install -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -fae {{FLAGS}}
|
||||
|
||||
testCore *FLAGS:
|
||||
mvnd test checkstyle:check pmd:check -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -pl pmd-core {{FLAGS}}
|
||||
|
||||
testJava *FLAGS:
|
||||
mvnd test checkstyle:check pmd:check -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -pl pmd-java {{FLAGS}}
|
||||
|
||||
installJavaAndDeps *FLAGS:
|
||||
mvnd install -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -pl {{pmdJavaDeps}} {{FLAGS}}
|
||||
|
||||
installJava *FLAGS:
|
||||
mvnd install -Dmaven.javadoc.skip -Dkotlin.compiler.incremental -pl pmd-java {{FLAGS}}
|
||||
|
||||
|
||||
lintChanged DIFF="master" *FLAGS="":
|
||||
#!/bin/env zsh
|
||||
changed=$(git diff --name-only {{DIFF}})
|
||||
changed=${(f)changed}
|
||||
projects=${changed%%/*} # remove all but first segment
|
||||
echo $projects
|
||||
# todo filter to pmd-*
|
||||
mvnd checkstyle:check pmd:check -pl $projects -fae
|
||||
|
||||
|
||||
lint projects="pmd-java":
|
||||
mvnd checkstyle:check pmd:check -pl {{projects}} -fae
|
||||
|
||||
lintAll:
|
||||
mvnd checkstyle:check pmd:check -fae
|
||||
|
@ -28,15 +28,15 @@ public class PmdLanguageVersionTypeSupport implements ITypeConverter<LanguageVer
|
||||
// Explicit language-version pairs, such as "java-18" or "apex-54".
|
||||
// We build these directly to retain aliases. "java-8" works, but the canonical name for the LanguageVersion is java-1.8
|
||||
return LanguageRegistry.PMD.getLanguages().stream()
|
||||
.flatMap(l -> l.getVersionNamesAndAliases().stream().map(v -> l.getTerseName() + "-" + v))
|
||||
.flatMap(l -> l.getVersionNamesAndAliases().stream().map(v -> l.getId() + "-" + v))
|
||||
.collect(Collectors.toCollection(TreeSet::new)).iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LanguageVersion convert(final String value) throws Exception {
|
||||
return LanguageRegistry.PMD.getLanguages().stream()
|
||||
.filter(l -> value.startsWith(l.getTerseName() + "-"))
|
||||
.map(l -> l.getVersion(value.substring(l.getTerseName().length() + 1)))
|
||||
.filter(l -> value.startsWith(l.getId() + "-"))
|
||||
.map(l -> l.getVersion(value.substring(l.getId().length() + 1)))
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new TypeConversionException("Unknown language version: " + value));
|
||||
|
@ -1,61 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import java.io.FilenameFilter;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.sourceforge.pmd.internal.util.PredicateUtil;
|
||||
|
||||
public abstract class AbstractLanguage implements Language {
|
||||
private final String name;
|
||||
private final String terseName;
|
||||
private final Tokenizer tokenizer;
|
||||
private final Predicate<String> fileFilter;
|
||||
private final List<String> extensions;
|
||||
|
||||
public AbstractLanguage(String name, String terseName, Tokenizer tokenizer, String... extensions) {
|
||||
this.name = name;
|
||||
this.terseName = terseName;
|
||||
this.tokenizer = tokenizer;
|
||||
this.fileFilter = PredicateUtil.toNormalizedFileFilter(PredicateUtil.getFileExtensionFilter(extensions).or(it -> Files.isDirectory(Paths.get(it))));
|
||||
this.extensions = Arrays.asList(extensions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilenameFilter getFileFilter() {
|
||||
return (dir, name) -> fileFilter.test(dir.toPath().resolve(name).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tokenizer getTokenizer() {
|
||||
return tokenizer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProperties(Properties properties) {
|
||||
// needs to be implemented by subclasses.
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTerseName() {
|
||||
return terseName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getExtensions() {
|
||||
return extensions;
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public interface Language {
|
||||
String getName();
|
||||
|
||||
String getTerseName();
|
||||
|
||||
Tokenizer getTokenizer();
|
||||
|
||||
FilenameFilter getFileFilter();
|
||||
|
||||
void setProperties(Properties properties);
|
||||
|
||||
List<String> getExtensions();
|
||||
}
|
@ -5,8 +5,8 @@
|
||||
package net.sourceforge.pmd.cpd.token;
|
||||
|
||||
import net.sourceforge.pmd.cpd.token.internal.BaseTokenFilter;
|
||||
import net.sourceforge.pmd.lang.TokenManager;
|
||||
import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrToken;
|
||||
import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrTokenManager;
|
||||
|
||||
/**
|
||||
* A generic filter for Antlr-based token managers that allows to use comments
|
||||
@ -18,7 +18,7 @@ public class AntlrTokenFilter extends BaseTokenFilter<AntlrToken> {
|
||||
* Creates a new AntlrTokenFilter
|
||||
* @param tokenManager The token manager from which to retrieve tokens to be filtered
|
||||
*/
|
||||
public AntlrTokenFilter(final AntlrTokenManager tokenManager) {
|
||||
public AntlrTokenFilter(final TokenManager<AntlrToken> tokenManager) {
|
||||
super(tokenManager);
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.pmd.cpd.AnyTokenizer;
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
|
||||
/**
|
||||
@ -199,7 +200,7 @@ public interface Language extends Comparable<Language> {
|
||||
* @throws UnsupportedOperationException if this language does not support CPD
|
||||
*/
|
||||
default Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) {
|
||||
throw new UnsupportedOperationException(this + " does not support running a CPD analysis.");
|
||||
return new AnyTokenizer();
|
||||
}
|
||||
|
||||
|
||||
|
@ -272,13 +272,13 @@ public abstract class LanguageModuleBase implements Language {
|
||||
* assigned to the language. Parameters should not start with a period
|
||||
* {@code .}.
|
||||
*
|
||||
* @param e1 First extensions
|
||||
* @param extensionWithoutPeriod First extensions
|
||||
* @param others Other extensions (optional)
|
||||
*
|
||||
* @throws NullPointerException If any extension is null
|
||||
*/
|
||||
public LanguageMetadata extensions(String e1, String... others) {
|
||||
this.extensions = new ArrayList<>(setOf(e1, others));
|
||||
public LanguageMetadata extensions(String extensionWithoutPeriod, String... others) {
|
||||
this.extensions = new ArrayList<>(setOf(extensionWithoutPeriod, others));
|
||||
AssertionUtil.requireContainsNoNullValue("extensions", this.extensions);
|
||||
return this;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
/**
|
||||
* Language implementation for Fortran
|
||||
*
|
||||
* @author Romain PELISSE belaran@gmail.com
|
||||
*/
|
||||
public class FortranLanguage extends AbstractLanguage {
|
||||
/**
|
||||
* Create a Fortran Language instance.
|
||||
*/
|
||||
public FortranLanguage() {
|
||||
super("Fortran", "fortran", new AnyTokenizer("!"), ".for", ".f", ".f66", ".f77", ".f90");
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.fortran;
|
||||
|
||||
import net.sourceforge.pmd.cpd.AnyTokenizer;
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
import net.sourceforge.pmd.lang.CpdOnlyLanguageModuleBase;
|
||||
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
|
||||
|
||||
/**
|
||||
* Language implementation for Fortran
|
||||
*
|
||||
* @author Romain PELISSE belaran@gmail.com
|
||||
*/
|
||||
public class FortranLanguageModule extends CpdOnlyLanguageModuleBase {
|
||||
/**
|
||||
* Create a Fortran Language instance.
|
||||
*/
|
||||
public FortranLanguageModule() {
|
||||
super(LanguageMetadata.withId("fortran").name("Fortran").extensions("for", "f", "f66", "f77", "f90"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) {
|
||||
return new AnyTokenizer("!");
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
net.sourceforge.pmd.cpd.FortranLanguage
|
@ -0,0 +1 @@
|
||||
net.sourceforge.pmd.lang.fortran.FortranLanguageModule
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.fortran.cpd;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -15,12 +15,7 @@ import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest;
|
||||
class FortranTokenizerTest extends CpdTextComparisonTest {
|
||||
|
||||
FortranTokenizerTest() {
|
||||
super(".for");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResourcePrefix() {
|
||||
return "../lang/fortran/cpd/testdata";
|
||||
super("fortran", ".for");
|
||||
}
|
||||
|
||||
@Test
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.gherkin;
|
||||
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
import net.sourceforge.pmd.lang.CpdOnlyLanguageModuleBase;
|
||||
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
|
||||
import net.sourceforge.pmd.lang.gherkin.cpd.GherkinTokenizer;
|
||||
|
||||
/**
|
||||
* Language implementation for Gherkin.
|
||||
*/
|
||||
public class GherkinLanguageModule extends CpdOnlyLanguageModuleBase {
|
||||
|
||||
/**
|
||||
* Creates a new Gherkin Language instance.
|
||||
*/
|
||||
public GherkinLanguageModule() {
|
||||
super(LanguageMetadata.withId("gherkin").name("Gherkin").extensions("feature"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) {
|
||||
return new GherkinTokenizer();
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.gherkin.cpd;
|
||||
|
||||
import net.sourceforge.pmd.cpd.AbstractLanguage;
|
||||
|
||||
/**
|
||||
* Language implementation for Gherkin.
|
||||
*/
|
||||
public class GherkinLanguage extends AbstractLanguage {
|
||||
|
||||
/**
|
||||
* Creates a new Gherkin Language instance.
|
||||
*/
|
||||
public GherkinLanguage() {
|
||||
super("Gherkin", "gherkin", new GherkinTokenizer(), ".feature");
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
net.sourceforge.pmd.lang.gherkin.cpd.GherkinLanguage
|
@ -0,0 +1 @@
|
||||
net.sourceforge.pmd.lang.gherkin.GherkinLanguageModule
|
@ -2,7 +2,7 @@
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.gherkin.cpd;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -10,12 +10,7 @@ import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest;
|
||||
|
||||
class GherkinTokenizerTest extends CpdTextComparisonTest {
|
||||
GherkinTokenizerTest() {
|
||||
super(".feature");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResourcePrefix() {
|
||||
return "../lang/gherkin/cpd/testdata";
|
||||
super("gherkin", ".feature");
|
||||
}
|
||||
|
||||
@Test
|
@ -1,15 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
/**
|
||||
* @author oinume@gmail.com
|
||||
*/
|
||||
public class GoLanguage extends AbstractLanguage {
|
||||
|
||||
public GoLanguage() {
|
||||
super("Go", "go", new GoTokenizer(), ".go");
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.go;
|
||||
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
import net.sourceforge.pmd.lang.CpdOnlyLanguageModuleBase;
|
||||
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
|
||||
import net.sourceforge.pmd.lang.go.cpd.GoTokenizer;
|
||||
|
||||
public class GoLanguageModule extends CpdOnlyLanguageModuleBase {
|
||||
|
||||
public GoLanguageModule() {
|
||||
super(LanguageMetadata.withId("go").name("Go").extensions("go"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) {
|
||||
return new GoTokenizer();
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.go.cpd;
|
||||
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.Lexer;
|
@ -1 +0,0 @@
|
||||
net.sourceforge.pmd.cpd.GoLanguage
|
@ -0,0 +1 @@
|
||||
net.sourceforge.pmd.lang.go.GoLanguageModule
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.go.cpd;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -11,12 +11,7 @@ import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest;
|
||||
class GoTokenizerTest extends CpdTextComparisonTest {
|
||||
|
||||
GoTokenizerTest() {
|
||||
super(".go");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResourcePrefix() {
|
||||
return "../lang/go/cpd/testdata";
|
||||
super("go", ".go");
|
||||
}
|
||||
|
||||
@Test
|
@ -1,18 +0,0 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
/**
|
||||
* Language implementation for Groovy
|
||||
*/
|
||||
public class GroovyLanguage extends AbstractLanguage {
|
||||
|
||||
/**
|
||||
* Creates a new Groovy Language instance.
|
||||
*/
|
||||
public GroovyLanguage() {
|
||||
super("Groovy", "groovy", new GroovyTokenizer(), ".groovy");
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.groovy;
|
||||
|
||||
import net.sourceforge.pmd.lang.groovy.cpd.GroovyTokenizer;
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
import net.sourceforge.pmd.lang.CpdOnlyLanguageModuleBase;
|
||||
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
|
||||
|
||||
/**
|
||||
* Language implementation for Groovy
|
||||
*/
|
||||
public class GroovyLanguageModule extends CpdOnlyLanguageModuleBase {
|
||||
|
||||
/**
|
||||
* Creates a new Groovy Language instance.
|
||||
*/
|
||||
public GroovyLanguageModule() {
|
||||
super(LanguageMetadata.withId("groovy").name("Groovy").extensions("groovy"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tokenizer createCpdTokenizer(LanguagePropertyBundle bundle) {
|
||||
return new GroovyTokenizer();
|
||||
}
|
||||
}
|
@ -1,12 +1,14 @@
|
||||
/**
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.groovy.cpd;
|
||||
|
||||
import org.codehaus.groovy.antlr.SourceInfo;
|
||||
import org.codehaus.groovy.antlr.parser.GroovyLexer;
|
||||
|
||||
import net.sourceforge.pmd.cpd.TokenFactory;
|
||||
import net.sourceforge.pmd.cpd.Tokenizer;
|
||||
import net.sourceforge.pmd.lang.ast.TokenMgrError;
|
||||
import net.sourceforge.pmd.lang.document.TextDocument;
|
||||
|
@ -1 +0,0 @@
|
||||
net.sourceforge.pmd.cpd.GroovyLanguage
|
@ -0,0 +1 @@
|
||||
net.sourceforge.pmd.lang.groovy.GroovyLanguageModule
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
package net.sourceforge.pmd.lang.groovy.cpd;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -11,13 +11,9 @@ import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest;
|
||||
class GroovyTokenizerTest extends CpdTextComparisonTest {
|
||||
|
||||
GroovyTokenizerTest() {
|
||||
super(".groovy");
|
||||
super("groovy", ".groovy");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResourcePrefix() {
|
||||
return "../lang/groovy/cpd/testdata";
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSample() {
|
@ -1,16 +0,0 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
|
||||
package net.sourceforge.pmd.lang.html;
|
||||
|
||||
import net.sourceforge.pmd.cpd.AbstractLanguage;
|
||||
import net.sourceforge.pmd.lang.html.ast.HtmlTokenizer;
|
||||
|
||||
public final class HtmlCpdLanguage extends AbstractLanguage {
|
||||
|
||||
public HtmlCpdLanguage() {
|
||||
super("HTML", "html", new HtmlTokenizer(), ".html");
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user