001 /* 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2005 Mark Doliner <thekingant@users.sourceforge.net> 005 * 006 * Cobertura is free software; you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published 008 * by the Free Software Foundation; either version 2 of the License, 009 * or (at your option) any later version. 010 * 011 * Cobertura is distributed in the hope that it will be useful, but 012 * WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Cobertura; if not, write to the Free Software 018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 019 * USA 020 */ 021 022 package net.sourceforge.cobertura.reporting; 023 024 import java.io.File; 025 import java.util.Iterator; 026 import java.util.List; 027 import java.util.Vector; 028 029 public abstract class Util 030 { 031 032 /** 033 * Calculates the code complexity number for a given class. 034 * "CCN" stands for "code complexity number." This is 035 * sometimes referred to as McCabe's number. This method 036 * calculates the average cyclomatic code complexity of all 037 * methods in a given class, or of all methods of all classes 038 * in a given directory. This recursive calculation is useful 039 * for calculating the average CCN for a specific package. 040 * 041 * @param file The source of a Java class for which you want 042 * to calculate the complexity, or a directory containing 043 * Java source files for which you want to calculate the 044 * complexity. 045 * @param recursive If file is a directory, this parameter is 046 * used to decide whether to only list the files in the 047 * given directory, or to list all files in all 048 * subdirectories of the given directory. 049 * @return The average cyclomatic code complexity for this class. 050 */ 051 public static double getCCN(File file, boolean recursive) 052 { 053 return -1; 054 } 055 056 /** 057 * Create a <code>Vector</code> containing the file names of 058 * Java source code. If the given file parameter is a regular 059 * file, then the return value only contains the absolute 060 * path of this file. However, if the given file parameter 061 * is a directory, this vector contains absolute paths to all 062 * files under this directory and all subdirectories. 063 * 064 * @param file A Java source file or a directory containing 065 * Java source files. 066 * @return A Vector containing <code>String</code>s that 067 * are absolute paths to Java source files. 068 */ 069 private static Vector getListOfFiles(File file, boolean recursive) 070 { 071 Vector ret = new Vector(); 072 073 if (file.isFile()) 074 { 075 ret.add(file.getAbsolutePath()); 076 } 077 else if (file.isDirectory()) 078 { 079 File[] files = file.listFiles(); 080 for (int i = 0; i < files.length; i++) 081 { 082 if (recursive) 083 { 084 ret.addAll(getListOfFiles(files[i], true)); 085 } 086 else 087 { 088 if (files[i].isFile()) 089 { 090 ret.add(files[i].getAbsolutePath()); 091 } 092 } 093 } 094 } 095 096 return ret; 097 } 098 099 }