foss-vuln-tracker/repoman/src/main/java/it/unitn/repoman/core/lang/wrappers/c/CWrapper.java

104 lines
2.7 KiB
Java
Executable File

package it.unitn.repoman.core.lang.wrappers.c;
import it.unitn.repoman.core.lang.traversals.c.CMethodCallTraversal;
import it.unitn.repoman.core.lang.traversals.generic.MethodCallTraversal;
import it.unitn.repoman.core.lang.wrappers.generic.Wrapper;
import it.unitn.repoman.core.lang.parsers.c.CParser;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNodeImpl;
public class CWrapper extends Wrapper {
public CWrapper() {
this.restrictedKeywords = new String[]{ "return", "true", "false"};
}
@Override
public boolean isStatement(ParseTree node) {
return node instanceof CParser.DeclarationContext ||
node instanceof CParser.ExpressionStatementContext;
}
@Override
public boolean isReturnStatement(ParseTree node) {
return (node instanceof CParser.JumpStatementContext && node.getChild(0).getText().equals("return"));
}
@Override
public boolean isConditionalExpression(ParseTree node) {
return (node instanceof CParser.ExpressionContext &&
node.getParent() instanceof CParser.SelectionStatementContext);
}
@Override
public boolean isMethodDeclaration(ParseTree node) {
return node instanceof CParser.FunctionDefinitionContext;
}
@Override
public boolean isFieldDeclaration(ParseTree node) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isToken(ParseTree node) {
Pattern pattern = Pattern.compile(this.validVarNameRegex);
Matcher matcher = pattern.matcher(node.getText());
return (!isRestrictedKeyword(node) && matcher.matches() &&
node instanceof TerminalNodeImpl);
}
@Override
public boolean isFormalParameter(ParseTree node) {
return node instanceof CParser.DeclaratorContext &&
node.getParent() instanceof CParser.ParameterDeclarationContext;
}
@Override
protected String getMethodDeclarationName(ParseTree node) {
return node.getChild(1).getChild(0).getChild(0).getText();
}
@Override
protected ParseTree getMethodDeclarationParams(ParseTree node) {
return node.getChild(1).getChild(0).getChild(2);
}
@Override
public MethodCallTraversal getMethodCallTraversal(ParseTree node) {
return new CMethodCallTraversal(node);
}
@Override
public boolean isTerminal(ParseTree node) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isLocalVariableDeclaration(ParseTree node) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isAssignmentExpression(ParseTree node) {
// TODO Auto-generated method stub
return false;
}
// TODO: implement the method
@Override
public boolean isPartOfExpression(ParseTree node) {
return false;
}
}