UNPKG

@atomist/sdm-pack-spring

Version:

Atomist software delivery machine extension pack for Spring and Spring Boot applications

78 lines 3.97 kB
"use strict"; /* * Copyright © 2018 Atomist, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const antlr_1 = require("@atomist/antlr"); const automation_client_1 = require("@atomist/automation-client"); const javaProjectUtils_1 = require("../../java/javaProjectUtils"); const springReviewCategories_1 = require("./springReviewCategories"); exports.MutableInjectionCategory = "Mutable injection"; class MutableInjection { constructor(name, type, sourceLocation) { this.name = name; this.type = type; this.sourceLocation = sourceLocation; this.severity = "warn"; this.category = springReviewCategories_1.SpringStyle; this.subcategory = exports.MutableInjectionCategory; } get detail() { return `Improper Spring injection: Mutable ${this.type} ${this.name} is injected`; } } exports.MutableInjection = MutableInjection; // TODO will eventually use OR predicates - for @Inject const InjectedFields = `//classBodyDeclaration[//annotation[@value='@Autowired']] //fieldDeclaration//variableDeclaratorId | //classBodyDeclaration[//annotation[@value='@Inject']] //fieldDeclaration//variableDeclaratorId | //classBodyDeclaration[//annotation[@value='@Autowired']] //methodDeclaration//methodDeclarator/identifier | //classBodyDeclaration[//annotation[@value='@Inject']] //methodDeclaration//methodDeclarator/identifier`; /** * Find all fields or setters annotated with @Autowired or @Inject in the codebase. * This is an undesirable usage pattern in application code, although * acceptable in tests. * @param {Project} p project to search * @param globPattern glob pattern. Defaults to Maven convention Java source files * location of source tree. */ function findMutableInjections(p, globPattern = javaProjectUtils_1.JavaSourceFiles) { return __awaiter(this, void 0, void 0, function* () { const fileHits = yield automation_client_1.astUtils.findMatches(p, antlr_1.Java9FileParser, globPattern, InjectedFields); const comments = fileHits.map(m => new MutableInjection(m.$value, m.$value.startsWith("set") ? "setter" : "field", m.sourceLocation)); return { repoId: p.id, comments, }; }); } exports.findMutableInjections = findMutableInjections; exports.MutableInjectionsReviewer = { name: "mutable-injections-reviewer", inspection: (p) => __awaiter(void 0, void 0, void 0, function* () { return findMutableInjections(p); }), }; //# sourceMappingURL=mutableInjectionsReviewer.js.map