/** * Returns the list of {@link Suppression} instances retrieved from the given {@link FileText}. * @param fileText {@link FileText} instance. * @return list of {@link Suppression} instances. */ private List<Suppression> getSuppressions(FileText fileText) { final List<Suppression> suppressions = new ArrayList<>(); for (int lineNo = 0; lineNo < fileText.size(); lineNo++) { final Optional<Suppression> suppression = getSuppression(fileText, lineNo); suppression.ifPresent(suppressions::add); } return suppressions; }
/** * Find positions of line breaks in the full text. * @return an array giving the first positions of each line. */ private int[] findLineBreaks() { if (lineBreaks == null) { final int[] lineBreakPositions = new int[size() + 1]; lineBreakPositions[0] = 0; int lineNo = 1; final Matcher matcher = LINE_TERMINATOR.matcher(fullText); while (matcher.find()) { lineBreakPositions[lineNo] = matcher.end(); lineNo++; } if (lineNo < lineBreakPositions.length) { lineBreakPositions[lineNo] = fullText.length(); } lineBreaks = lineBreakPositions; } return lineBreaks; }
/** * Method returns line number the key is detected in the checked properties * files first. * * @param fileText * {@link FileText} object contains the lines to process * @param keyName * key name to look for * @return line number of first occurrence. If no key found in properties * file, 1 is returned */ private static int getLineNumber(FileText fileText, String keyName) { final Pattern keyPattern = getKeyPattern(keyName); int lineNumber = 1; final Matcher matcher = keyPattern.matcher(""); for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); matcher.reset(line); if (matcher.matches()) { break; } ++lineNumber; } // -1 as check seeks for the first duplicate occurrence in file, // so it cannot be the last line. if (lineNumber > fileText.size() - 1) { lineNumber = 1; } return lineNumber; }
@Override protected void processFiltered(File file, FileText fileText) { if (fileText.size() == 0) { log(1, MSG_KEY); } }
@Override protected void processFiltered(File file, FileText fileText) { int lineNum = 0; for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); lineNum++; final int tabPosition = line.indexOf('\t'); if (tabPosition != -1) { if (eachLine) { log(lineNum, tabPosition + 1, MSG_CONTAINS_TAB); } else { log(lineNum, tabPosition + 1, MSG_FILE_CONTAINS_TAB); break; } } } }
@Override protected void processFiltered(File file, FileText fileText) { if (getHeaderLines().size() > fileText.size()) { log(1, MSG_MISSING); } else { for (int i = 0; i < getHeaderLines().size(); i++) { if (!isMatch(i, fileText.get(i))) { log(i + 1, MSG_MISMATCH, getHeaderLines().get(i)); break; } } } }
/** * Processes a set of lines looking for matches. * @param fileText {@link FileText} object contains the lines to process. */ public void processLines(FileText fileText) { resetState(); int lineNo = 0; for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); lineNo++; checkLine(lineNo, line, options.getPattern().matcher(line), 0); } finish(); }
@Override protected void processFiltered(File file, FileText fileText) { final int headerSize = getHeaderLines().size(); final int fileSize = fileText.size();
/** * Returns the list of {@link Suppression} instances retrieved from the given {@link FileText}. * @param fileText {@link FileText} instance. * @return list of {@link Suppression} instances. */ private List<Suppression> getSuppressions(FileText fileText) { final List<Suppression> suppressions = new ArrayList<>(); for (int lineNo = 0; lineNo < fileText.size(); lineNo++) { final Optional<Suppression> suppression = getSuppression(fileText, lineNo); suppression.ifPresent(suppressions::add); } return suppressions; }
/** * Find positions of line breaks in the full text. * @return an array giving the first positions of each line. */ private int[] findLineBreaks() { if (lineBreaks == null) { final int[] lineBreakPositions = new int[size() + 1]; lineBreakPositions[0] = 0; int lineNo = 1; final Matcher matcher = LINE_TERMINATOR.matcher(fullText); while (matcher.find()) { lineBreakPositions[lineNo] = matcher.end(); lineNo++; } if (lineNo < lineBreakPositions.length) { lineBreakPositions[lineNo] = fullText.length(); } lineBreaks = lineBreakPositions; } return lineBreaks; }
/** * Method returns line number the key is detected in the checked properties * files first. * * @param fileText * {@link FileText} object contains the lines to process * @param keyName * key name to look for * @return line number of first occurrence. If no key found in properties * file, 1 is returned */ private static int getLineNumber(FileText fileText, String keyName) { final Pattern keyPattern = getKeyPattern(keyName); int lineNumber = 1; final Matcher matcher = keyPattern.matcher(""); for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); matcher.reset(line); if (matcher.matches()) { break; } ++lineNumber; } // -1 as check seeks for the first duplicate occurrence in file, // so it cannot be the last line. if (lineNumber > fileText.size() - 1) { lineNumber = 1; } return lineNumber; }
@Override public boolean run(FileText fileText) { if (this.lines.size() > fileText.size()) { log(1, RegexpHeaderCheck.MSG_HEADER_MISSING); return false; } for (int i = 0; i < this.lines.size(); i++) { String fileLine = fileText.get(i); Pattern pattern = this.lines.get(i); if (!pattern.matcher(fileLine).matches()) { log(i + 1, RegexpHeaderCheck.MSG_HEADER_MISMATCH, pattern); return false; } } return true; }
@Override public boolean run(FileText fileText) { for (int i = 0; i < fileText.size(); i++) { String fileLine = fileText.get(i); if (fileLine.trim().isEmpty()) { continue; } if (isHeaderComment(fileLine)) { log(i, "header.unexpected"); return false; } return true; } return true; }
@Override public void processFiltered(final File file, final FileText lines) { int first = -1; int last = -1; for (int pos = 0; pos < lines.size(); pos += 1) { final String line = lines.get(pos); if (line.startsWith(ImportCohesionCheck.IMPORT)) { if (first == -1) { first = pos; } last = pos; } } if (first == -1) { return; } if (this.check(first, last, lines)) { this.fireErrors(file.getPath()); } }
@Override public void processFiltered(final File file, final FileText lines) { int first = -1; int last = -1; for (int pos = 0; pos < lines.size(); pos += 1) { final String line = lines.get(pos); if (line.startsWith(ImportCohesionCheck.IMPORT)) { if (first == -1) { first = pos; } last = pos; } } if (first == -1) { return; } if (this.check(first, last, lines)) { this.fireErrors(file.getPath()); } }
@Override protected void processFiltered(File file, FileText fileText) { int lineNum = 0; for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); lineNum++; final int tabPosition = line.indexOf('\t'); if (tabPosition != -1) { if (eachLine) { log(lineNum, tabPosition + 1, MSG_CONTAINS_TAB); } else { log(lineNum, tabPosition + 1, MSG_FILE_CONTAINS_TAB); break; } } } }
@Override protected void processFiltered(File file, FileText fileText) { if (getHeaderLines().size() > fileText.size()) { log(1, MSG_MISSING); } else { for (int i = 0; i < getHeaderLines().size(); i++) { if (!isMatch(i, fileText.get(i))) { log(i + 1, MSG_MISMATCH, getHeaderLines().get(i)); break; } } } }
/** * Processes a set of lines looking for matches. * @param fileText {@link FileText} object contains the lines to process. */ public void processLines(FileText fileText) { resetState(); int lineNo = 0; for (int index = 0; index < fileText.size(); index++) { final String line = fileText.get(index); lineNo++; checkLine(lineNo, line, options.getPattern().matcher(line), 0); } finish(); }