UNPKG

@amplitude/ampli

Version:

Amplitude CLI

65 lines (64 loc) 3.15 kB
"use strict"; 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;