@amplitude/ampli
Version:
Amplitude CLI
65 lines (64 loc) • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const antlr4ts_1 = require("antlr4ts");
const ParseTreeWalker_1 = require("antlr4ts/tree/ParseTreeWalker");
const TerminalNode_1 = require("antlr4ts/tree/TerminalNode");
const JavaLexer_1 = require("../../antlr/java/JavaLexer");
const JavaParser_1 = require("../../antlr/java/JavaParser");
const base_1 = require("../base");
class EventListener {
constructor(entrypointNames, addReference, getReferenceName, hasUserIdParameter) {
this.entrypointNames = entrypointNames;
this.addReference = addReference;
this.getReferenceName = getReferenceName;
this.hasUserIdParameter = hasUserIdParameter;
}
enterExpression(context) {
if (!context || !context.children || context.children.length !== 3) {
return;
}
const instance = context.children[0];
if (!instance || !(instance instanceof JavaParser_1.ExpressionContext) || this.entrypointNames.indexOf(instance.text) < 0) {
return;
}
const dot = context.children[1];
if (!dot || !(dot instanceof TerminalNode_1.TerminalNode) || dot.text !== '.') {
return;
}
const method = context.children[2];
if (!method || !(method instanceof JavaParser_1.MethodCallContext) || !method.children || method.children.length < 3) {
return;
}
const name = method.children[0];
if (!name) {
return;
}
let itlyMethodName = name.text;
if (name.text === 'track' && method.childCount > 1) {
itlyMethodName = method.children[2].text;
if (this.hasUserIdParameter) {
itlyMethodName = itlyMethodName.replace(/^[^,]+,/, '');
}
itlyMethodName = this.getReferenceName(itlyMethodName.split('.')[0]);
}
this.addReference(itlyMethodName, context.start.line, context.start.charPositionInLine);
}
}
class JavaVerifierV1 extends base_1.Verifier {
constructor(hasUserIdParameter, ampliInstanceNames = ['Itly.getInstance()', 'itly'], fileExtensionPattern = 'java', fileFilter = null) {
super(fileExtensionPattern, ampliInstanceNames.map(name => `${name}.`), fileFilter);
this.hasUserIdParameter = hasUserIdParameter;
this.ampliInstanceNames = ampliInstanceNames;
}
async doVerify(eventNames, workingDirs) {
return this.verifyEach((filePath, fileContents, addReference) => {
const inputStream = new antlr4ts_1.ANTLRInputStream(fileContents);
const lexer = new JavaLexer_1.JavaLexer(inputStream);
const tokenStream = new antlr4ts_1.CommonTokenStream(lexer);
const parser = new JavaParser_1.JavaParser(tokenStream);
const listener = new EventListener(this.ampliInstanceNames, (name, row, column) => addReference({ filePath, name, row, column }), this.getReferenceName, this.hasUserIdParameter);
ParseTreeWalker_1.ParseTreeWalker.DEFAULT.walk(listener, parser.compilationUnit());
}, workingDirs);
}
}
exports.default = JavaVerifierV1;