/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by christoferdutz on 21.09.14.
*/
public abstract class BaseLanguageModule implements Language {
protected String name;
protected String shortName;
protected String terseName;
protected Class<?> ruleChainVisitorClass;
protected List<String> extensions;
protected Map<String, LanguageVersion> versions;
protected LanguageVersion defaultVersion;
public BaseLanguageModule(String name, String shortName, String terseName, Class<?> ruleChainVisitorClass,
String... extensions) {
this.name = name;
this.shortName = shortName;
this.terseName = terseName;
this.ruleChainVisitorClass = ruleChainVisitorClass;
this.extensions = Arrays.asList(extensions);
}
protected void addVersion(String version, LanguageVersionHandler languageVersionHandler, boolean isDefault) {
if (versions == null) {
versions = new HashMap<>();
}
LanguageVersion languageVersion = new LanguageVersion(this, version, languageVersionHandler);
versions.put(version, languageVersion);
if (isDefault) {
defaultVersion = languageVersion;
}
}
@Override
public String getName() {
return name;
}
@Override
public String getShortName() {
return (shortName != null) ? shortName : name;
}
@Override
public String getTerseName() {
return terseName;
}
@Override
public Class<?> getRuleChainVisitorClass() {
return ruleChainVisitorClass;
}
@Override
public List<String> getExtensions() {
return Collections.unmodifiableList(extensions);
}
@Override
public boolean hasExtension(String extension) {
return extensions != null && extensions.contains(extension);
}
@Override
public List<LanguageVersion> getVersions() {
return new ArrayList<>(versions.values());
}
@Override
public boolean hasVersion(String version) {
return versions != null && versions.containsKey(version);
}
@Override
public LanguageVersion getVersion(String versionName) {
if (versions != null) {
return versions.get(versionName);
}
return null;
}
@Override
public LanguageVersion getDefaultVersion() {
return defaultVersion;
}
@Override
public String toString() {
return "LanguageModule:" + name + "(" + this.getClass().getSimpleName() + ")";
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof BaseLanguageModule)) {
return false;
}
BaseLanguageModule other = (BaseLanguageModule) obj;
return name.equals(other.name);
}
@Override
public int compareTo(Language o) {
return getName().compareTo(o.getName());
}
}