forked from phoedos/pmd
Wire in existing langs
This commit is contained in:
@@ -4,55 +4,20 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.vf;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.pmd.lang.AbstractPmdLanguageVersionHandler;
|
||||
import net.sourceforge.pmd.lang.BatchLanguageProcessor;
|
||||
import net.sourceforge.pmd.lang.LanguageVersionHandler;
|
||||
import net.sourceforge.pmd.lang.ast.Parser;
|
||||
import net.sourceforge.pmd.lang.vf.ast.VfParser;
|
||||
import net.sourceforge.pmd.properties.PropertyDescriptor;
|
||||
import net.sourceforge.pmd.properties.PropertyFactory;
|
||||
import net.sourceforge.pmd.properties.PropertySource;
|
||||
|
||||
public class VfHandler extends AbstractPmdLanguageVersionHandler {
|
||||
public class VfHandler extends BatchLanguageProcessor<VfLanguageProperties> implements LanguageVersionHandler {
|
||||
|
||||
static final List<String> DEFAULT_APEX_DIRECTORIES = Collections.singletonList(".." + File.separator + "classes");
|
||||
static final List<String> DEFAULT_OBJECT_DIRECTORIES = Collections.singletonList(".." + File.separator + "objects");
|
||||
|
||||
/**
|
||||
* Directory that contains Apex classes that may be referenced from a Visualforce page.
|
||||
*
|
||||
* <p>Env variable is {@code PMD_VF_APEXDIRECTORIES}.
|
||||
*/
|
||||
public static final PropertyDescriptor<List<String>> APEX_DIRECTORIES_DESCRIPTOR =
|
||||
PropertyFactory.stringListProperty("apexDirectories")
|
||||
.desc("Location of Apex Class directories. Absolute or relative to the Visualforce directory.")
|
||||
.defaultValue(DEFAULT_APEX_DIRECTORIES)
|
||||
.delim(',')
|
||||
.build();
|
||||
|
||||
/**
|
||||
* Directory that contains Object definitions that may be referenced from a Visualforce page.
|
||||
*
|
||||
* <p>Env variable is {@code PMD_VF_OBJECTSDIRECTORIES}.
|
||||
*/
|
||||
public static final PropertyDescriptor<List<String>> OBJECTS_DIRECTORIES_DESCRIPTOR =
|
||||
PropertyFactory.stringListProperty("objectsDirectories")
|
||||
.desc("Location of Custom Object directories. Absolute or relative to the Visualforce directory.")
|
||||
.defaultValue(DEFAULT_OBJECT_DIRECTORIES)
|
||||
.delim(',')
|
||||
.build();
|
||||
public VfHandler(VfLanguageProperties bundle) {
|
||||
super(VfLanguageModule.getInstance(), bundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Parser getParser() {
|
||||
return new VfParser();
|
||||
return new VfParser(getProperties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void declareParserTaskProperties(PropertySource source) {
|
||||
source.definePropertyDescriptor(APEX_DIRECTORIES_DESCRIPTOR);
|
||||
source.definePropertyDescriptor(OBJECTS_DIRECTORIES_DESCRIPTOR);
|
||||
overridePropertiesFromEnv(VfLanguageModule.TERSE_NAME, source);
|
||||
}
|
||||
}
|
||||
|
@@ -5,6 +5,8 @@
|
||||
package net.sourceforge.pmd.lang.vf;
|
||||
|
||||
import net.sourceforge.pmd.lang.BaseLanguageModule;
|
||||
import net.sourceforge.pmd.lang.Language;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
|
||||
|
||||
/**
|
||||
@@ -18,6 +20,10 @@ public class VfLanguageModule extends BaseLanguageModule {
|
||||
|
||||
public VfLanguageModule() {
|
||||
super(NAME, "VisualForce", TERSE_NAME, "page", "component");
|
||||
addVersion("", new VfHandler(), true);
|
||||
addVersion("", new VfHandler(new VfLanguageProperties()), true);
|
||||
}
|
||||
|
||||
public static Language getInstance() {
|
||||
return LanguageRegistry.PMD.getLanguageByFullName(NAME);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.vf;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
|
||||
import net.sourceforge.pmd.properties.PropertyDescriptor;
|
||||
import net.sourceforge.pmd.properties.PropertyFactory;
|
||||
|
||||
/**
|
||||
* @author Clément Fournier
|
||||
*/
|
||||
public class VfLanguageProperties extends LanguagePropertyBundle {
|
||||
|
||||
static final List<String> DEFAULT_APEX_DIRECTORIES = Collections.singletonList(".." + File.separator + "classes");
|
||||
|
||||
/**
|
||||
* Directory that contains Apex classes that may be referenced from a Visualforce page.
|
||||
*
|
||||
* <p>Env variable is {@code PMD_VF_APEXDIRECTORIES}.
|
||||
*/
|
||||
public static final PropertyDescriptor<List<String>> APEX_DIRECTORIES_DESCRIPTOR =
|
||||
PropertyFactory.stringListProperty("apexDirectories")
|
||||
.desc("Location of Apex Class directories. Absolute or relative to the Visualforce directory.")
|
||||
.defaultValue(DEFAULT_APEX_DIRECTORIES)
|
||||
.delim(',')
|
||||
.build();
|
||||
static final List<String> DEFAULT_OBJECT_DIRECTORIES = Collections.singletonList(".." + File.separator + "objects");
|
||||
|
||||
/**
|
||||
* Directory that contains Object definitions that may be referenced from a Visualforce page.
|
||||
*
|
||||
* <p>Env variable is {@code PMD_VF_OBJECTSDIRECTORIES}.
|
||||
*/
|
||||
public static final PropertyDescriptor<List<String>> OBJECTS_DIRECTORIES_DESCRIPTOR =
|
||||
PropertyFactory.stringListProperty("objectsDirectories")
|
||||
.desc("Location of Custom Object directories. Absolute or relative to the Visualforce directory.")
|
||||
.defaultValue(DEFAULT_OBJECT_DIRECTORIES)
|
||||
.delim(',')
|
||||
.build();
|
||||
|
||||
public VfLanguageProperties() {
|
||||
super(VfLanguageModule.getInstance());
|
||||
definePropertyDescriptor(APEX_DIRECTORIES_DESCRIPTOR);
|
||||
definePropertyDescriptor(OBJECTS_DIRECTORIES_DESCRIPTOR);
|
||||
}
|
||||
}
|
@@ -71,8 +71,7 @@ class ApexClassPropertyTypes extends SalesforceFieldTypes {
|
||||
TextDocument textDocument = TextDocument.create(file)) {
|
||||
|
||||
Parser parser = languageVersion.getLanguageVersionHandler().getParser();
|
||||
ParserTask task = new ParserTask(textDocument, SemanticErrorReporter.noop(), ApexClassPropertyTypes.class.getClassLoader());
|
||||
languageVersion.getLanguageVersionHandler().declareParserTaskProperties(task.getProperties());
|
||||
ParserTask task = new ParserTask(textDocument, SemanticErrorReporter.noop());
|
||||
|
||||
return parser.parse(task);
|
||||
} catch (IOException e) {
|
||||
|
@@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Parser.ParserTask;
|
||||
import net.sourceforge.pmd.lang.vf.DataType;
|
||||
import net.sourceforge.pmd.lang.vf.VfHandler;
|
||||
import net.sourceforge.pmd.lang.vf.VfLanguageProperties;
|
||||
|
||||
/**
|
||||
* Visits {@link ASTExpression} nodes and stores type information for
|
||||
@@ -45,10 +45,10 @@ class VfExpressionTypeVisitor extends VfParserVisitorAdapter {
|
||||
private final List<String> apexDirectories;
|
||||
private final List<String> objectsDirectories;
|
||||
|
||||
VfExpressionTypeVisitor(ParserTask task) {
|
||||
VfExpressionTypeVisitor(ParserTask task, VfLanguageProperties vfProperties) {
|
||||
this.fileName = task.getFileDisplayName();
|
||||
this.apexDirectories = task.getProperties().getProperty(VfHandler.APEX_DIRECTORIES_DESCRIPTOR);
|
||||
this.objectsDirectories = task.getProperties().getProperty(VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR);
|
||||
this.apexDirectories = vfProperties.getProperty(VfLanguageProperties.APEX_DIRECTORIES_DESCRIPTOR);
|
||||
this.objectsDirectories = vfProperties.getProperty(VfLanguageProperties.OBJECTS_DIRECTORIES_DESCRIPTOR);
|
||||
this.apexClassNames = new ArrayList<>();
|
||||
this.apexClassPropertyTypes = new ApexClassPropertyTypes();
|
||||
this.objectFieldTypes = new ObjectFieldTypes();
|
||||
|
@@ -11,12 +11,19 @@ import net.sourceforge.pmd.lang.ast.ParseException;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter;
|
||||
import net.sourceforge.pmd.lang.document.TextDocument;
|
||||
import net.sourceforge.pmd.lang.vf.VfLanguageProperties;
|
||||
|
||||
/**
|
||||
* Parser for the VisualForce language.
|
||||
*/
|
||||
public final class VfParser extends JjtreeParserAdapter<ASTCompilationUnit> {
|
||||
|
||||
private VfLanguageProperties vfProperties;
|
||||
|
||||
public VfParser(VfLanguageProperties vfProperties) {
|
||||
this.vfProperties = vfProperties;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JavaccTokenDocument newDocumentImpl(TextDocument fullText) {
|
||||
return new JavaccTokenDocument(fullText) {
|
||||
@@ -32,7 +39,7 @@ public final class VfParser extends JjtreeParserAdapter<ASTCompilationUnit> {
|
||||
ASTCompilationUnit root = new VfParserImpl(cs).CompilationUnit().makeTaskInfo(task);
|
||||
|
||||
// Add type information to the AST
|
||||
VfExpressionTypeVisitor visitor = new VfExpressionTypeVisitor(task);
|
||||
VfExpressionTypeVisitor visitor = new VfExpressionTypeVisitor(task, vfProperties);
|
||||
visitor.visit(root, null);
|
||||
|
||||
return root;
|
||||
|
@@ -17,7 +17,7 @@ import org.junit.Test;
|
||||
|
||||
import net.sourceforge.pmd.lang.vf.DataType;
|
||||
import net.sourceforge.pmd.lang.vf.VFTestUtils;
|
||||
import net.sourceforge.pmd.lang.vf.VfHandler;
|
||||
import net.sourceforge.pmd.lang.vf.VfLanguageProperties;
|
||||
|
||||
public class ApexClassPropertyTypesTest {
|
||||
private static final Map<String, DataType> EXPECTED_DATA_TYPES;
|
||||
@@ -58,7 +58,7 @@ public class ApexClassPropertyTypesTest {
|
||||
ApexClassPropertyTypes apexClassPropertyTypes = new ApexClassPropertyTypes();
|
||||
|
||||
ObjectFieldTypesTest.validateDataTypes(EXPECTED_DATA_TYPES, apexClassPropertyTypes, vfPagePath,
|
||||
VfHandler.APEX_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
VfLanguageProperties.APEX_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -19,7 +19,7 @@ import org.junit.Test;
|
||||
|
||||
import net.sourceforge.pmd.lang.vf.DataType;
|
||||
import net.sourceforge.pmd.lang.vf.VFTestUtils;
|
||||
import net.sourceforge.pmd.lang.vf.VfHandler;
|
||||
import net.sourceforge.pmd.lang.vf.VfLanguageProperties;
|
||||
|
||||
public class ObjectFieldTypesTest {
|
||||
private static final Map<String, DataType> EXPECTED_SFDX_DATA_TYPES;
|
||||
@@ -57,7 +57,7 @@ public class ObjectFieldTypesTest {
|
||||
Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.SFDX, VFTestUtils.MetadataType.Vf).resolve("SomePage.page");
|
||||
|
||||
ObjectFieldTypes objectFieldTypes = new ObjectFieldTypes();
|
||||
validateSfdxAccount(objectFieldTypes, vfPagePath, VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
validateSfdxAccount(objectFieldTypes, vfPagePath, VfLanguageProperties.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,7 +68,7 @@ public class ObjectFieldTypesTest {
|
||||
Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.MDAPI, VFTestUtils.MetadataType.Vf).resolve("SomePage.page");
|
||||
|
||||
ObjectFieldTypes objectFieldTypes = new ObjectFieldTypes();
|
||||
validateMDAPIAccount(objectFieldTypes, vfPagePath, VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
validateMDAPIAccount(objectFieldTypes, vfPagePath, VfLanguageProperties.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,8 +80,8 @@ public class ObjectFieldTypesTest {
|
||||
Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.SFDX, VFTestUtils.MetadataType.Vf)
|
||||
.resolve("SomePage.page");
|
||||
|
||||
List<String> paths = Arrays.asList(VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue().get(0),
|
||||
VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.MDAPI, VFTestUtils.MetadataType.Objects).toString());
|
||||
List<String> paths = Arrays.asList(VfLanguageProperties.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue().get(0),
|
||||
VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.MDAPI, VFTestUtils.MetadataType.Objects).toString());
|
||||
objectFieldTypes = new ObjectFieldTypes();
|
||||
validateSfdxAccount(objectFieldTypes, vfPagePath, paths);
|
||||
validateMDAPIAccount(objectFieldTypes, vfPagePath, paths);
|
||||
|
Reference in New Issue
Block a user