View Javadoc
1   ////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code for adherence to a set of rules.
3   // Copyright (C) 2001-2017 the original author or authors.
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  
20  package com.puppycrawl.tools.checkstyle.utils;
21  
22  import java.io.IOException;
23  import java.io.InputStream;
24  import java.net.URI;
25  import java.net.URL;
26  
27  import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
28  
29  /**
30   * Utility methods for suppression filters.
31   *
32   * @author Timur Tibeyev.
33   */
34  public final class FilterUtils {
35  
36      /** Stop instances being created. **/
37      private FilterUtils() {
38  
39      }
40  
41      /**
42       * Checks if suppression source with given fileName exists.
43       * @param fileName name of the suppressions file.
44       * @return true if suppression file exists, otherwise false
45       */
46      public static boolean isFileExists(String fileName) {
47          boolean suppressionSourceExists = true;
48          InputStream sourceInput = null;
49          try {
50              final URI uriByFilename = CommonUtils.getUriByFilename(fileName);
51              final URL url = uriByFilename.toURL();
52              sourceInput = url.openStream();
53          }
54          catch (CheckstyleException | IOException ignored) {
55              suppressionSourceExists = false;
56          }
57          finally {
58              suppressionSourceExists = closeQuietlyWithResult(sourceInput, suppressionSourceExists);
59          }
60          return suppressionSourceExists;
61      }
62  
63      /**
64       * Close input.
65       * This method is required till https://github.com/cobertura/cobertura/issues/170
66       * @param sourceInput stream to close
67       * @param suppressionSourceExists previous state of flag
68       * @return result of close operation
69       */
70      private static boolean closeQuietlyWithResult(InputStream sourceInput,
71                                                    boolean suppressionSourceExists) {
72          boolean closed = suppressionSourceExists;
73          if (sourceInput != null) {
74              try {
75                  sourceInput.close();
76              }
77              catch (IOException ignored) {
78                  closed = false;
79              }
80          }
81          return closed;
82      }
83  }