View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.util;
5   
6   import java.util.concurrent.ExecutorService;
7   import java.util.concurrent.Executors;
8   
9   public final class SystemUtils {
10  
11      private SystemUtils() {
12  	// this is a utility class and cannot be instantiated
13      }
14  
15      /**
16       * Do we have proper permissions to use multithreading?
17       */
18      public static final boolean MT_SUPPORTED;
19      static {
20  	boolean error = false;
21  	try {
22  	    /*
23  	     * ant task ran from Eclipse with jdk 1.5.0 raises an AccessControlException
24  	     * when shutdown is called. Standalone pmd or ant from command line are fine.
25  	     *
26  	     * With jdk 1.6.0, ant task from Eclipse also works.
27  	     *
28  	     * Bugs related to this hack:
29  	     * http://sourceforge.net/p/pmd/bugs/1025/
30  	     * http://sourceforge.net/p/pmd/bugs/670/
31  	     */
32  	    ExecutorService executor = Executors.newFixedThreadPool(1);
33  	    executor.shutdown();
34  	} catch (RuntimeException e) {
35  	    error = true;
36  	    System.err.println("Disabling multithreading - consider to upgrade to java 1.6");
37  	    System.err.println("See also: http://sourceforge.net/p/pmd/bugs/670/");
38  	}
39  	MT_SUPPORTED = !error;
40      }
41  }