use of org.eclipse.titan.designer.AST.TTCN3.statements.StatementBlock in project titan.EclipsePlug-ins by eclipse.
the class IsBoundWithoutElse method process.
@Override
protected void process(final IVisitableNode node, final Problems problems) {
if (!(node instanceof If_Statement)) {
return;
}
final If_Statement ifs = (If_Statement) node;
final StatementBlock elseClause = ifs.getStatementBlock();
if (elseClause != null) {
return;
}
// there is no else clause present
final If_Clauses ifcs = ifs.getIfClauses();
if (ifcs == null) {
return;
}
final List<If_Clause> ifcL = ifcs.getClauses();
if (ifcL == null || ifcL.isEmpty()) {
return;
}
for (final If_Clause ifc : ifcL) {
final IfConditionVisitor visitor = new IfConditionVisitor(problems);
ifc.accept(visitor);
}
}
use of org.eclipse.titan.designer.AST.TTCN3.statements.StatementBlock in project titan.EclipsePlug-ins by eclipse.
the class IterateOnWrongArray method process.
@Override
protected void process(final IVisitableNode node, final Problems problems) {
if (!(node instanceof For_Statement)) {
return;
}
final For_Statement fs = (For_Statement) node;
// find the loop variable
final LoopVariableFinder lvVisitor = new LoopVariableFinder();
fs.accept(lvVisitor);
final Reference loopVar = lvVisitor.getLoopVariable();
if (loopVar == null) {
return;
}
final Assignment loopVarDef = loopVar.getRefdAssignment(CompilationTimeStamp.getBaseTimestamp(), false);
if (loopVarDef == null) {
return;
}
// find the array over which the loop iterates
final Value finalExpr = fs.getFinalExpression();
if (finalExpr == null) {
return;
}
final FinalExprVisitor exprVisitor = new FinalExprVisitor();
finalExpr.accept(exprVisitor);
final List<Reference> arraysIterated = exprVisitor.getArraysIterated();
if (arraysIterated.isEmpty()) {
return;
}
/* search every statement block for references that has the loop variable in them and the
* reference differs from the reference of the array over which the for loop iterates */
final StatementBlock sb = fs.getStatementBlock();
if (sb == null) {
return;
}
final StatementBlockVisitor sbVisitor = new StatementBlockVisitor(loopVar, arraysIterated);
sb.accept(sbVisitor);
final List<Reference> matchingRefs = sbVisitor.getMatchingReferences();
for (final Reference r : matchingRefs) {
if (r.getUsedOnLeftHandSide()) {
continue;
}
problems.report(r.getLocation(), MessageFormat.format(ERR_MSG, loopVar));
}
}
use of org.eclipse.titan.designer.AST.TTCN3.statements.StatementBlock in project titan.EclipsePlug-ins by eclipse.
the class FMLinesOfCode method measure.
@Override
public Number measure(final MetricData data, final Def_Function function) {
final Counter count = new Counter(0);
function.accept(new CounterVisitor(count) {
@Override
public int visit(final IVisitableNode node) {
if (node instanceof Def_Function) {
return V_CONTINUE;
} else if (node instanceof StatementBlock) {
count.set(((LargeLocation) ((StatementBlock) node).getLocation()).getEndLine());
}
return V_SKIP;
}
});
return count.val() - function.getLocation().getLine() + 1;
}
use of org.eclipse.titan.designer.AST.TTCN3.statements.StatementBlock in project titan.EclipsePlug-ins by eclipse.
the class IfInsteadAltguard method process.
@Override
public void process(final IVisitableNode node, final Problems problems) {
if (node instanceof AltGuard) {
final AltGuard ag = (AltGuard) node;
final StatementBlock statements = ag.getStatementBlock();
if (statements != null && !statements.isEmpty()) {
final Statement firstStatement = statements.getStatementByIndex(0);
if (firstStatement instanceof If_Statement) {
final Value condition = ((If_Statement) firstStatement).getIfClauses().getClauses().get(0).getExpression();
Location reportAt;
if (condition != null) {
reportAt = condition.getLocation();
} else {
reportAt = firstStatement.getLocation();
}
problems.report(reportAt, MIGHT_ALTGUARD);
}
}
}
}
use of org.eclipse.titan.designer.AST.TTCN3.statements.StatementBlock in project titan.EclipsePlug-ins by eclipse.
the class ReferenceFinder method detectSmallestScope.
/**
* Detect the smallest scope where the references should be searched
*
* @param assignment
* The assignment
* @return The detected scope
*/
private Scope detectSmallestScope(final Assignment assignment) {
Scope localScope = assignment.getMyScope();
final Module module = localScope.getModuleScope();
if (localScope instanceof StatementBlock) {
final StatementBlock statementBlock = (StatementBlock) localScope;
if (statementBlock.getMyDefinition() instanceof Def_Altstep) {
localScope = localScope.getParentScope();
}
if (statementBlock.hasEnclosingLoopOrAltguard()) {
localScope = localScope.getParentScope();
}
}
if (localScope instanceof NamedBridgeScope) {
localScope = localScope.getParentScope();
}
// control,function,testcase,altstep then it is global
if (localScope instanceof Assignments && localScope.getParentScope() == module) {
localScope = module;
} else // treat it as global definition
if (localScope instanceof ComponentTypeBody) {
// FIXME this still does not make them global, that is something completely different.
localScope = module;
} else // search for actual named parameters everywhere
if (localScope instanceof FormalParameterList || localScope instanceof RunsOnScope) {
localScope = module;
} else // For_Statement that must be searched
if (localScope instanceof For_Loop_Definitions) {
localScope = localScope.getParentScope();
}
return localScope;
}
Aggregations