remove enum based base class
This commit is contained in:
4 files changed
+4
-123
No files matched your search
@@ -9,9 +9,7 @@ import java.util.ServiceLoader;
|
||||
|
||||
/**
|
||||
* Represents a language module, and provides access to language-specific
|
||||
* functionality. You can get a language instance from {@link LanguageRegistry}.
|
||||
* Using a language involves first selecting the relevant {@link LanguageVersion}
|
||||
* for the sources, and accessing implemented services through {@link LanguageVersion#getLanguageVersionHandler()}.
|
||||
* functionality. You can get a language instance from a {@link LanguageRegistry}.
|
||||
*
|
||||
* <p>Language instances must be registered with a {@linkplain ServiceLoader service file}
|
||||
* to be picked up on by the {@link LanguageRegistry}.
|
||||
|
||||
@@ -35,7 +35,6 @@ public class LanguageVersion implements Comparable<LanguageVersion> {
|
||||
|
||||
private final Language language;
|
||||
private final String version;
|
||||
private final LanguageVersionHandler languageVersionHandler; // note: this is null if this is a cpd-only language...
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link Language#getVersion(String)}. This is only
|
||||
@@ -43,10 +42,9 @@ public class LanguageVersion implements Comparable<LanguageVersion> {
|
||||
*/
|
||||
@Deprecated
|
||||
@InternalApi
|
||||
public LanguageVersion(Language language, String version, LanguageVersionHandler languageVersionHandler) {
|
||||
public LanguageVersion(Language language, String version) {
|
||||
this.language = language;
|
||||
this.version = version;
|
||||
this.languageVersionHandler = languageVersionHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,14 +62,6 @@ public class LanguageVersion implements Comparable<LanguageVersion> {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link LanguageVersionHandler}, which provides access
|
||||
* to version-specific services, like the parser.
|
||||
*/
|
||||
@Deprecated
|
||||
public LanguageVersionHandler getLanguageVersionHandler() {
|
||||
return languageVersionHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of this language version. This is the version string
|
||||
|
||||
@@ -21,8 +21,7 @@ import net.sourceforge.pmd.lang.LanguageVersion;
|
||||
import net.sourceforge.pmd.lang.impl.LanguageModuleBase.LanguageMetadata.LangVersionMetadata;
|
||||
|
||||
/**
|
||||
* The simplest implementation of a language with only a few versions,
|
||||
* and a single handler for all of them.
|
||||
* Base class for language modules.
|
||||
*
|
||||
* @author Clément Fournier
|
||||
*/
|
||||
@@ -50,7 +49,7 @@ public abstract class LanguageModuleBase implements Language {
|
||||
|
||||
for (LanguageMetadata.LangVersionMetadata versionId : metadata.versionMetadata) {
|
||||
String versionStr = versionId.name;
|
||||
LanguageVersion languageVersion = new LanguageVersion(this, versionStr, null);
|
||||
LanguageVersion languageVersion = new LanguageVersion(this, versionStr);
|
||||
|
||||
versions.add(languageVersion);
|
||||
|
||||
|
||||
-106
@@ -1,106 +0,0 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang3.EnumUtils;
|
||||
|
||||
import net.sourceforge.pmd.lang.LanguageVersion;
|
||||
import net.sourceforge.pmd.lang.impl.LanguageModuleWithSeveralVersions.LanguageVersionId;
|
||||
|
||||
/**
|
||||
* @author Clément Fournier
|
||||
*/
|
||||
public abstract class LanguageModuleWithSeveralVersions<V extends Enum<V> & LanguageVersionId> extends LanguageModuleBase {
|
||||
|
||||
private final List<LanguageVersion> distinctVersions;
|
||||
private final Map<String, LanguageVersion> byName;
|
||||
private final Map<LanguageVersion, V> versionToId;
|
||||
private final LanguageVersion defaultVersion;
|
||||
|
||||
protected LanguageModuleWithSeveralVersions(LanguageMetadata metadata,
|
||||
Class<V> versionIdClass) {
|
||||
super(metadata);
|
||||
|
||||
List<V> versionIds = EnumUtils.getEnumList(versionIdClass);
|
||||
List<LanguageVersion> versions = new ArrayList<>();
|
||||
Map<String, LanguageVersion> byName = new HashMap<>();
|
||||
Map<LanguageVersion, V> verToId = new HashMap<>();
|
||||
LanguageVersion defaultVersion = null;
|
||||
|
||||
for (V versionId : versionIds) {
|
||||
String versionStr = versionId.getVersionString();
|
||||
LanguageVersion languageVersion = new LanguageVersion(this, versionStr, null);
|
||||
|
||||
versions.add(languageVersion);
|
||||
|
||||
checkNotPresent(versionStr);
|
||||
byName.put(versionStr, languageVersion);
|
||||
verToId.put(languageVersion, versionId);
|
||||
for (String alias : versionId.getAliases()) {
|
||||
checkNotPresent(alias);
|
||||
byName.put(alias, languageVersion);
|
||||
}
|
||||
|
||||
if (versionId.isDefault()) {
|
||||
if (defaultVersion != null) {
|
||||
throw new IllegalStateException(
|
||||
"Default version already set to " + defaultVersion + ", cannot set it to " + languageVersion);
|
||||
}
|
||||
defaultVersion = languageVersion;
|
||||
}
|
||||
}
|
||||
this.byName = Collections.unmodifiableMap(byName);
|
||||
this.versionToId = Collections.unmodifiableMap(verToId);
|
||||
this.distinctVersions = Collections.unmodifiableList(versions);
|
||||
this.defaultVersion = Objects.requireNonNull(defaultVersion, "No default version for " + getId());
|
||||
}
|
||||
|
||||
private void checkNotPresent(String alias) {
|
||||
if (byName.containsKey(alias)) {
|
||||
throw new IllegalArgumentException("Version key '" + alias + "' is duplicated");
|
||||
}
|
||||
}
|
||||
|
||||
protected V getIdOf(LanguageVersion v) {
|
||||
V obj = versionToId.get(v);
|
||||
if (obj == null) {
|
||||
throw new NullPointerException("no such version " + v + " in " + getVersions());
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LanguageVersion> getVersions() {
|
||||
return distinctVersions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LanguageVersion getDefaultVersion() {
|
||||
return defaultVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LanguageVersion getVersion(String version) {
|
||||
return byName.get(version);
|
||||
}
|
||||
|
||||
protected interface LanguageVersionId {
|
||||
|
||||
String getVersionString();
|
||||
|
||||
boolean isDefault();
|
||||
|
||||
default List<String> getAliases() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user