001: /*
002: * Hammurapi
003: * Automated Java code review system.
004: * Copyright (C) 2004 Hammurapi Group
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * URL: http://www.hammurapi.org
021: * e-Mail: support@hammurapi.biz
022: */
023: package org.hammurapi.inspectors.testcases.fixes;
024:
025: /**
026: * CyclomaticComplexityRule
027: * @author Pavel Vlasov
028: * @version $Revision: 1.1 $
029: */
030: public class CyclomaticComplexityRuleFixTestCase {
031:
032: private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
033: .getRootLogger();
034:
035: private static final int INT_ZERO = 0;
036: private static final int INT_1 = 1;
037: private static final int NEG_INT_1 = -INT_1;
038: private static final int INT_2 = 2;
039: private static final int NEG_INT_2 = -INT_2;
040: private static final int INT_3 = 3;
041: private static final int NEG_INT_3 = -INT_3;
042:
043: private static final String CONST_SPACE = " ";
044: private static final char CONST_A = 'A';
045: private static final char CHAR_B = 'B';
046:
047: // --- FIX ---
048:
049: /* Split methods with complex logic if possible! */
050: /** Java doc automaticaly generated by Hammurapi */
051: public int complexMethod(final String strToProc,
052: final boolean firstType) {
053: if (firstType) {
054: return complexMethodFT(strToProc);
055: } else {
056: return complexMethodNFT(strToProc);
057: }
058: }
059:
060: private int complexMethodFT(final String strToProc) {
061: if (strToProc == null) {
062: return INT_1;
063: } else if (strToProc.length() == INT_ZERO) {
064: return INT_2;
065: } else if (strToProc.length() == INT_1
066: && strToProc.equalsIgnoreCase(CONST_SPACE)) {
067: return INT_3;
068: } else {
069: int retVal = INT_ZERO;
070: for (int i = INT_ZERO; i < strToProc.length(); i++) {
071: if (strToProc.charAt(i) == CONST_A
072: || i % INT_3 == INT_2) {
073: retVal++;
074: } else {
075: retVal += INT_2;
076: }
077: }
078: return retVal;
079: }
080: }
081:
082: private int complexMethodNFT(final String strToProc) {
083: if (strToProc == null) {
084: return NEG_INT_1;
085: } else if (strToProc.length() == INT_ZERO) {
086: return NEG_INT_2;
087: } else if (strToProc.length() == INT_1
088: && strToProc.equalsIgnoreCase(CONST_SPACE)) {
089: return NEG_INT_3;
090: } else {
091: int retVal = INT_ZERO;
092: for (int i = INT_ZERO; i < strToProc.length(); i++) {
093: if (strToProc.charAt(i) == CONST_A
094: || i % INT_3 == INT_2) {
095: retVal--;
096: } else if (strToProc.charAt(i) == CHAR_B
097: || i % INT_3 == INT_2) {
098: retVal -= INT_2;
099: } else {
100: retVal -= INT_3;
101: }
102: }
103: return retVal;
104: }
105: }
106:
107: /* Take complex logic into util classes if possible! */
108: /** Java doc automaticaly generated by Hammurapi */
109: public static int tooComplexClassMethod(final int valToProc) {
110: return CyclomaticComplexityRule2FixTestCase
111: .tooComplexClassMethod(valToProc);
112: }
113: //--- END FIX ---
114: }
|