Search in sources :

Example 1 with FlowAnalyser

use of org.eclipse.n4js.flowgraphs.FlowAnalyser in project n4js by eclipse.

the class N4JSFlowgraphValidator method checkFlowGraphs.

/**
 * Triggers all flow graph related validations
 */
@Check
public void checkFlowGraphs(Script script) {
    // Note: The Flow Graph is NOT stored in the meta info cache. Hence, it is created here at use site.
    // In case the its creation is moved to the N4JSPostProcessor, care about an increase in memory consumption.
    N4JSFlowAnalyser flowAnalyzer = new N4JSFlowAnalyser(this::checkCancelled);
    FlowValidator[] fValidators = { new DeadCodeValidator(keywordProvider), new UsedBeforeDeclaredValidator(), new NullUndefinedValidator(n4jsCore, findReferenceHelper), new MissingReturnOrThrowValidator(typeSystemHelper, jsVariantHelper) };
    FlowAnalyser[] fAnalysers = new FlowAnalyser[fValidators.length];
    for (int i = 0; i < fValidators.length; i++) {
        fAnalysers[i] = fValidators[i].getFlowAnalyser();
    }
    flowAnalyzer.createGraphs(script);
    flowAnalyzer.accept(fAnalysers);
    String uriString = script.eResource().getURI().toString();
    try (ClosableMeasurement m1 = dcFlowGraphs.getClosableMeasurement("flowGraphs_" + uriString);
        ClosableMeasurement m2 = dcPostprocessing.getClosableMeasurement("createGraph_" + uriString)) {
        for (FlowValidator fValidator : fValidators) {
            fValidator.checkResults(this);
        }
    }
}
Also used : ClosableMeasurement(org.eclipse.n4js.smith.ClosableMeasurement) NullUndefinedValidator(org.eclipse.n4js.validation.validators.flowgraphs.NullUndefinedValidator) MissingReturnOrThrowValidator(org.eclipse.n4js.validation.validators.flowgraphs.MissingReturnOrThrowValidator) N4JSFlowAnalyser(org.eclipse.n4js.flowgraphs.N4JSFlowAnalyser) UsedBeforeDeclaredValidator(org.eclipse.n4js.validation.validators.flowgraphs.UsedBeforeDeclaredValidator) FlowValidator(org.eclipse.n4js.validation.validators.flowgraphs.FlowValidator) FlowAnalyser(org.eclipse.n4js.flowgraphs.FlowAnalyser) N4JSFlowAnalyser(org.eclipse.n4js.flowgraphs.N4JSFlowAnalyser) DeadCodeValidator(org.eclipse.n4js.validation.validators.flowgraphs.DeadCodeValidator) Check(org.eclipse.xtext.validation.Check)

Example 2 with FlowAnalyser

use of org.eclipse.n4js.flowgraphs.FlowAnalyser in project n4js by eclipse.

the class GraphVisitorAnalysis method getGraphVisitors.

private List<GraphVisitorInternal> getGraphVisitors(FlowAnalyser[] flowAnalysers, TraverseDirection direction) {
    List<GraphVisitorInternal> graphVisitors = new LinkedList<>();
    List<DataFlowVisitor> dataflowVisitorList = new LinkedList<>();
    for (FlowAnalyser flowAnalyser : flowAnalysers) {
        if (flowAnalyser instanceof GraphVisitorInternal) {
            GraphVisitorInternal graphVisitor = (GraphVisitorInternal) flowAnalyser;
            if (graphVisitor.getDirection() == direction) {
                graphVisitors.add(graphVisitor);
            }
        }
        if (flowAnalyser instanceof DataFlowVisitor) {
            DataFlowVisitor dataflowVisitor = (DataFlowVisitor) flowAnalyser;
            if (dataflowVisitor.getDirection() == direction) {
                dataflowVisitorList.add(dataflowVisitor);
            }
        }
    }
    if (!dataflowVisitorList.isEmpty()) {
        DataFlowVisitorHost dfvh = new DataFlowVisitorHost(direction, dataflowVisitorList);
        graphVisitors.add(dfvh);
    }
    return graphVisitors;
}
Also used : DataFlowVisitor(org.eclipse.n4js.flowgraphs.dataflow.DataFlowVisitor) DataFlowVisitorHost(org.eclipse.n4js.flowgraphs.dataflow.DataFlowVisitorHost) FlowAnalyser(org.eclipse.n4js.flowgraphs.FlowAnalyser) N4JSFlowAnalyser(org.eclipse.n4js.flowgraphs.N4JSFlowAnalyser) LinkedList(java.util.LinkedList)

Aggregations

FlowAnalyser (org.eclipse.n4js.flowgraphs.FlowAnalyser)2 N4JSFlowAnalyser (org.eclipse.n4js.flowgraphs.N4JSFlowAnalyser)2 LinkedList (java.util.LinkedList)1 DataFlowVisitor (org.eclipse.n4js.flowgraphs.dataflow.DataFlowVisitor)1 DataFlowVisitorHost (org.eclipse.n4js.flowgraphs.dataflow.DataFlowVisitorHost)1 ClosableMeasurement (org.eclipse.n4js.smith.ClosableMeasurement)1 DeadCodeValidator (org.eclipse.n4js.validation.validators.flowgraphs.DeadCodeValidator)1 FlowValidator (org.eclipse.n4js.validation.validators.flowgraphs.FlowValidator)1 MissingReturnOrThrowValidator (org.eclipse.n4js.validation.validators.flowgraphs.MissingReturnOrThrowValidator)1 NullUndefinedValidator (org.eclipse.n4js.validation.validators.flowgraphs.NullUndefinedValidator)1 UsedBeforeDeclaredValidator (org.eclipse.n4js.validation.validators.flowgraphs.UsedBeforeDeclaredValidator)1 Check (org.eclipse.xtext.validation.Check)1