Rulesavailableinthiscategory:
Severity:Medium
Rule:Useproperprimitivetypeliteralswhereeveravailable.
Reason:Useproperprimitivetypeliteralswhereeveravailable.
UsageExample:
packagecom.rule; publicclassUse_proper_primitive_type_literals_violation { publicvoidmethod() { floatf2=0;//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; publicclassUse_proper_primitive_type_literals_correction { publicvoidmethod() { floatf2=0.0f;//CORRECTION } }
Reference:ReferenceNotAvailable.
Severity:Medium
Rule:Creatinganinstanceoftheclassbeforeinitializingstaticfinalfieldscancauseerrors.
Reason:Creatinganinstanceoftheclassbeforeinitializingstaticfinalfieldscancauseerrors.
UsageExample:
packagecom.rule; publicclassDo_not_instantiate_class_before_initializing_static_final_fields_violation { privatestaticfinallongMAX_VALUE; privatestaticDo_not_instantiate_class_before_initializing_static_final_fields_violationinstance; static { instance=newDo_not_instantiate_class_before_initializing_static_final_fields_violation();//VIOLATION MAX_VALUE=1000; } }
Shouldbewrittenas:
packagecom.rule; publicclassDo_not_instantiate_class_before_initializing_static_final_fields_correction { privatestaticfinallongMAX_VALUE; privatestaticDo_not_instantiate_class_before_initializing_static_final_fields_correctioninstance; static { MAX_VALUE=1000; instance=newDo_not_instantiate_class_before_initializing_static_final_fields_correction();//CORRECTION } }
Reference:Noreferenceavailable.
Severity:High
Rule:Sincethethreadhasnotasktoexecute,itsimplywastestimeanddegradesperformance.
Reason:Sincethethreadhasnotasktoexecute,itsimplywastestimeanddegradesperformance.
UsageExample:
classNoopThreadextendsThread { publicNoopThread() { } publicNoopThread(Strings,ThreadGrouptg) { super(tg,s); } publicNoopThread(Runnabler) { super(r); } publicvoidtest1(){ Threadt=newNoopThread(); t.start(); } publicvoidtest2(){ Threadt=newThread("CoolThread");//VIOLATION t.start(); } publicvoidtest3(){ ThreadGrouptg=newThreadGroup("MyCoolThreadGroup"); Threadt=newThread(tg,"CoolThread");//VIOLATION t.start(); } publicvoidrun() { super.run(); //... } }
Shouldbewrittenas:
classNoopThreadextendsThread { privateRunnabler=null; publicNoopThread() { } publicNoopThread(Strings,ThreadGrouptg) { super(tg,s); } publicNoopThread(Runnabler) { super(r); this.r=r; } publicvoidtest1(){ Threadt=newNoopThread(); t.start(); } publicvoidtest2(){ Threadt=newThread(r,"CoolThread");//FIXED t.start(); } publicvoidtest3(){ ThreadGrouptg=newThreadGroup("MyCoolThreadGroup"); Threadt=newThread(tg,r,"CoolThread");//FIXED t.start(); } publicvoidrun() { super.run(); //... } }
Reference:NotAvailable.
Severity:Medium
Rule:WaitingforaConditionshouldbedoneusingoneoftheawaitmethodsdefinedbytheConditioninterface.
Reason:WaitingforaConditionshouldbedoneusingoneoftheawaitmethodsdefinedbytheConditioninterface.
UsageExample:
importjava.util.concurrent.locks.*; publicclassTest { intx; voidwaitOnCondition(Conditioncond)throwsInterruptedException { while(x==0) { cond.wait();//VIOLATION } } }
Shouldbewrittenas:
importjava.util.concurrent.locks.*; publicclassTest { intx; voidwaitOnCondition(Conditioncond)throwsInterruptedException { while(x==0) { cond.await();//FIXED } } }
Reference:NotAvailable.
Severity:Medium
Rule:Anoperationonanimmutableobjectwon'tchangetheobjectitself.
Reason:Anoperationonanimmutableobjectwon'tchangetheobjectitself.
UsageExample:
importjava.math.*; publicclassTest { voidfubar() { BigDecimalbd=newBigDecimal(10); bd.add(newBigDecimal(5));//VIOLATION } }
Shouldbewrittenas:
importjava.math.*; publicclassTest { voidfubar() { BigDecimalbd=newBigDecimal(10); bd=bd.add(newBigDecimal(5));//FIXED } }
Severity:Medium
Rule:Thevariablereferencedatthispointisknowntobenullduetoanearliercheckagainstnull.
Reason:Thevariablereferencedatthispointisknowntobenullduetoanearliercheckagainstnull.
UsageExample:
publicclassTest { publicvoidfubar() { ObjectnullObject=null; if(nullObject==null) { try { System.out.println("hello"); nullObject="notnull"; } catch(RuntimeExceptionex) { System.out.println(nullObject.getClass());//VIOLATION } } } }
Shouldbewrittenas:
publicclassTest { publicvoidfubar() { ObjectnullObject=null; if(nullObject!=null)//FIXED { try { System.out.println("hello"); nullObject="notnull"; } catch(RuntimeExceptionex) { System.out.println(nullObject.getClass()); } } } }
Reference:NotAvailable.
Severity:Medium
Rule:Ifthesumofthetwonumbersisgreaterthanthemaximumpositiveintvalue,thenitoverflowstoanegativevalue,andthevaluestaysnegativewhendividedbytwo.
Reason:Ifthesumofthetwonumbersisgreaterthanthemaximumpositiveintvalue,thenitoverflowstoanegativevalue,andthevaluestaysnegativewhendividedbytwo.
UsageExample:
publicclassTest { publicstaticintbinarySearch(int[]a,intkey) { intlow=0; inthigh=a.length-1; while(low<=high) { intmid=(low+high)/2;//VIOLATION intmidVal=a[mid]; if(midVal<key) { low=mid+1; } elseif(midVal>key) { high=mid-1; } else { returnmid;//keyfound } } return-(low+1);//keynotfound. } }
Shouldbewrittenas:
publicclassTest { publicstaticintbinarySearch(int[]a,intkey) { intlow=0; inthigh=a.length-1; while(low<=high) { intmid=(low+high)>>>1;//FIXED intmidVal=a[mid]; if(midVal<key) { low=mid+1; } elseif(midVal>key) { high=mid-1; } else { returnmid;//keyfound } } return-(low+1);//keynotfound. } }
Reference:http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
Severity:Medium
Rule:Itwontworkfornegativenumbers.
Reason:Itwontworkfornegativenumbers.
UsageExample:
publicclassTest { publicbooleanisOdd(intx) { returnx%2==1;//VIOLATION } }
Shouldbewrittenas:
publicclassTest { publicbooleanisOdd(intx) { returnx%2!=0;//FIXED } }
Reference:NotAvailable.
Severity:Medium
Rule:Havinganemptystatementasthebodymighthavenotbeenintended.
Reason:Havinganemptystatementasthebodymighthavenotbeenintended.
UsageExample:
publicclassTest { publicstaticvoidmain(String[]args) { if(args.length==1);//VIOLATION System.out.println(args[0]); } }
Shouldbewrittenas:
publicclassTest { publicstaticvoidmain(String[]args) { if(args.length==1)//FIXED System.out.println(args[0]); } }
Reference:NotAvailable.
Severity:Medium
Rule:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
Reason:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
UsageExample:
importjava.security.SecureRandom; importjava.util.Random; classTest { Randomr=newRandom(); SecureRandomsr=newSecureRandom(); publicintgetRandomElement(inta[]) { returna[r.nextInt()%a.length];//VIOLATION } publicintgetSecureRandomElement(inta[]) { returna[sr.nextInt()%a.length];//VIOLATION } }
Shouldbewrittenas:
importjava.security.SecureRandom; importjava.util.Random; classTest { Randomr=newRandom(); SecureRandomsr=newSecureRandom(); publicintgetRandomElement(inta[]) { intindex=r.nextInt()%a.length; if(index!=-1) { returna[index];//FIXED } } publicintgetSecureRandomElement(inta[]) { intindex=sr.nextInt()%a.length; if(index!=-1) { returna[sr.nextInt()%a.length];//FIXED } } }
Reference:NotAvailable.
Severity:Medium
Rule:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
Reason:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
UsageExample:
publicclassTest { publicstaticObjectgetHashBucket(Objecta[],Objectx) { returna[x.hashCode()%a.length];//VIOLATION } publicstaticObjectgetHashBucket2(Objecta[],Objectx) { inti=x.hashCode()%a.length;//VIOLATION returna[i]; } }
Shouldbewrittenas:
publicclassTest { publicstaticObjectgetHashBucket(Objecta[],Objectx) { returna[Math.abs(x.hashCode()%a.length)];//FIXED } publicstaticObjectgetHashBucket2(Objecta[],Objectx) { inti=Math.abs(x.hashCode()%a.length);//FIXED returna[i]; } }
Reference:NotAvailable.
Severity:Medium
Rule:PossibilityofaConcurrentModificationExceptiontobethrownatruntime.
Reason:PossibilityofaConcurrentModificationExceptiontobethrownatruntime.
UsageExample:
importjava.util.*; publicclassTest { publicvoidsomeMethod(Collectioncollection) { Iteratoriter=collection.iterator(); while(iter.hasNext()) { Objectelement=iter.next(); collection.remove(element);//VIOLATION } } }
Shouldbewrittenas:
importjava.util.*; publicclassTest { publicvoidsomeMethod(Collectioncollection) { Iteratoriter=collection.iterator(); while(iter.hasNext()) { iter.remove();//FIXED } } }
Reference:NotAvailable.
Severity:High
Rule:Thereisahighprobabilitythatthewrongvariablewasusedintheloop.
Reason:Thereisahighprobabilitythatthewrongvariablewasusedintheloop.
UsageExample:
publicclassTest { publicvoidmyMethod() { int[]a=newint[5]; for(inti=0;i<a.length;i++) { int[]b=newint[5]; for(intj=0;j<b.length;j++) { b[i]=1;//VIOLATION } } for(intj=0;j<a.length;i++)//VIOLATION { System.out.println("Theindexis:"+j); } } }
Shouldbewrittenas:
publicclassTest { publicvoidmyMethod() { int[]a=newint[5]; for(inti=0;i<a.length;i++) { int[]b=newint[5]; for(intj=0;j<b.length;j++) { b[j]=1;//FIXED } } for(intj=0;j<a.length;j++)//FIXED { System.out.println("Theindexis:"+j); } } }
Reference:NotAvailable.
Severity:Medium
Rule:Itispossiblethatthesecondgetterorsetterwasmeanttoaccessorsetanotherfield.
Reason:Itispossiblethatthesecondgetterorsetterwasmeanttoaccessorsetanotherfield.
UsageExample:
publicclassTest { privateObject_obj,_obj1; publicObjectgetObj() { return_obj; } publicObjectgetObj1(intnum)//VIOLATION { return_obj; } }
Shouldbewrittenas:
publicclassTest { privateObject_obj,_obj1; publicObjectgetObj() { return_obj; } publicObjectgetObj1(intnum) { return_obj1; //FIXED } }
Reference:NotAvailable.
Severity:High
Rule:Violatesonpossiblecasesofmethodinvocationsfromconstructorswhichthrowanullpointerexception.
Reason:Violatesonpossiblecasesofmethodinvocationsfromconstructorswhichthrowanullpointerexception.
UsageExample:
publicclassTest { publicTest() { methodThrowingNPE(); //VIOLATION } protectedvoidmethodThrowingNPE() { //... } } classSubextendsTest { Sub() { //... } protectedvoidmethodThrowingNPE() { Objects=null; inti=2; if(i==3) { s=newObject(); } System.out.println(s.toString()); } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:Autoboxingcapabilitycanleadtounexpectedbehaviorespeciallywhenpassingarguments.Reason:Autoboxingcapabilitycanleadtounexpectedbehaviorespeciallywhenpassingarguments.
UsageExample:
publicclassTest { publicstaticvoidmain(String[]args) { Integernumber=newInteger(10); newTest().foo(number/10);//VIOLATION } privatevoidfoo(inti) { System.out.println("primitive="+i); } privatevoidfoo(Integeri) { System.out.println("wrapper="+i); } }
Shouldbewrittenas:
Intheabovecodefoo(int)methodwillbecalledandnotfoo(Integer);pleaseensureifthisisexpectedbehaviour.
Reference:NoreferencesAvailable.
Severity:Medium
Rule:Possibletyposinargumentstowrapperclasses.
Reason:Possibletyposinargumentstowrapperclasses.
UsageExample:
publicclassTypos { Integeri=newInteger("15A");//VIOLATION publicBooleanmyMethod() { returnBoolean.valueOf("true");//VIOLATION,wouldreturn"false" } }
Shouldbewrittenas:
publicclassTypos { Integeri=newInteger("10"); //CORRECTION publicBooleanmyMethod() { returnBoolean.valueOf("true");//CORRECTION } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Iftheconstantisnotwithintherangeofpossible"char"value,thebooleanwouldalwaysresulttotrueorfalse.
Reason:Iftheconstantisnotwithintherangeofpossible"char"value,thebooleanwouldalwaysresulttotrueorfalse.
UsageExample:
publicclassAlwaysCompareCharsWithValuesWithinTheirRange { publicstaticStringgetAsciiString(StringinString) { StringBufferoutStringBuffer=newStringBuffer(); for(inti=0;i<inString.length();i++) { charcurrentChar=inString.charAt(i); if(currentChar>-1&¤tChar<256) //VIOLATION { outStringBuffer.append(currentChar); } } returnoutStringBuffer.toString(); } }
Shouldbewrittenas:
publicclassAlwaysCompareCharsWithValuesWithinTheirRange { publicstaticStringgetAsciiString(StringinString) { StringBufferoutStringBuffer=newStringBuffer(); for(inti=0;i<inString.length();i++) { charcurrentChar=inString.charAt(i); if(currentChar<256) //CORRECTION { outStringBuffer.append(currentChar); } } returnoutStringBuffer.toString(); } }
Reference:
Severity:Medium
Rule:Using'put'and'putAll'mightallownon-stringentries,whichshouldbeavoidedandgetPropertydirectlyreturnsastringasareturnvalue.
Reason:Using'put'and'putAll'mightallownon-stringentries,whichshouldbeavoidedandgetPropertydirectlyreturnsastringasareturnvalue.
UsageExample:
publicclassPropClass { java.util.Propertiesproperties=newjava.util.Properties(); publicStringsomeMethod() { properties.put("A","someString");//VIOLATION return(String)properties.get("A");//VIOLATION } }
Shouldbewrittenas:
publicclassPropClass { java.util.Propertiesproperties=newjava.util.Properties(); publicStringsomeMethod() { properties.setProperty("A","someString");//CORRECTION returnproperties.getProperty("A");//CORRECTION } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html
Severity:Medium
Rule:Danglingelsestatementleadtoambiguityandpossibleerrorinlogic.
Reason:Danglingelsestatementleadtoambiguityandpossibleerrorinlogic.
UsageExample:
publicclassAvoidDanglingElseStatements { voidmethod() { intnum=23; if(num<24)//VIOLATION:shouldhave"{}"braces if(num<5) num++; else num--; } }
Shouldbewrittenas:
publicclassAvoidDanglingElseStatements { voidmethod() { intnum=23; if(num<24) { //CORRECTION if(num<5) num++; } else { num--; } } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Thisequalscomparisonwillalwaysreturnfalse.
Reason:Thisequalscomparisonwillalwaysreturnfalse.
UsageExample:
importjava.util.ArrayList; importjava.util.Collection; importjava.util.Vector; publicclassTest { publicvoidaMethod() { Collectional=newArrayList(); Collectionv=newVector(); if(al.equals(v))//VIOLATION { System.out.println("Neverhere"); } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:Thecalltojava.lang.Object.wait()isnotwithinaconditionalcontrolflow.Reason:Thecalltojava.lang.Object.wait()isnotwithinaconditionalcontrolflow.
UsageExample:
publicclassTest { voidclueless()throwsException { synchronized(this) { this.wait();//VIOLATION } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:Avoidwaitingonamonitorwhiletwolocksareheld.Reason:Avoidwaitingonamonitorwhiletwolocksareheld.
UsageExample:
publicclassTest { Objectlock=newObject(); Objectvalue; publicsynchronizedvoidnotifyMethod(Objectv) { synchronized(lock) { value=v; lock.notifyAll(); } } publicsynchronizedObjectwaitMethod()throwsInterruptedException { synchronized(lock) { while(value==null) { lock.wait();//VIOLATION } returnvalue; } } publicvoidsomeMethod(Objecta,Objectb) { try { synchronized(a) { synchronized(b) { a.wait();//VIOLATION } } }catch(InterruptedExceptione) { System.out.println("Interrupted"); } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:CriticalRule:Thismethodcallsnotify()ornotifyAll()withoutobviouslyholdingalockontheobject.Reason:Thismethodcallsnotify()ornotifyAll()withoutobviouslyholdingalockontheobject.
UsageExample:
publicclassTest { publicvoidbar(Objecta,Objectb)throwsInterruptedException{ synchronized(a){ b.notify();//VIOLATION b.notifyAll();//VIOLATION } } }
Shouldbewrittenas:
publicclassTest { publicvoidbar(Objecta,Objectb)throwsInterruptedException{ synchronized(b){ b.notify(); b.notifyAll(); } } }
Reference:Noreferencesavailable.
Severity:Critical
Rule:ThisinterfacehasamethodwhichisincompatiblewiththeprotectedObjectmethod.
Reason:ThisinterfacehasamethodwhichisincompatiblewiththeprotectedObjectmethod.
UsageExample:
interfacesomeInterface { intclone();//VIOLATION }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:CriticalRule:ThechararrayisnotconvertedtoanequivalentString.Reason:ThechararrayisnotconvertedtoanequivalentString.
UsageExample:
publicclassTest { publicvoidaMethod() { Stringh="hello"; char[]arr={'w','o','r','l','d'}; Stringmsg=h+""+arr;//VIOLATION } }
Shouldbewrittenas:
publicclassTest { publicvoidaMethod() { Stringh="hello"; char[]arr={'w','o','r','l','d'}; Stringworld=String.valueOf(arr); Stringmsg=h+""+world; } }
Reference:Noreferencesavailable.
Severity:Critical
Rule:Thismethodcallswait()withoutobviouslyholdingalockontheobject.
Reason:Thismethodcallswait()withoutobviouslyholdingalockontheobject.
UsageExample:
publicclassTest { publicvoidfoo(Objecta,Objectb)throwsInterruptedException { synchronized(a) { b.wait();//VIOLATION } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:AvoidcallingThread.sleep(),whilelockheld.Reason:AvoidcallingThread.sleep(),whilelockheld.
UsageExample:
packagecom.rule; publicclassAvoid_calling_Thread_sleep_with_lock_held_violation { publicsynchronizedvoidmethod() { longtime=100000; try { Thread.sleep(time); //Violation. } catch(InterruptedExceptione) { //HandleException. } } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_calling_Thread_sleep_with_lock_held_correction { publicsynchronizedvoidmethod() { try { wait();//Correction. } catch(InterruptedExceptione) { //HandleException. } } }
Reference:Referencenotavailable.
Severity:Medium
Rule:AvoiddeclaringvariablesoftypeThreadGroup
Reason:AvoiddeclaringvariablesoftypeThreadGroup
UsageExample:
publicclassThreadGroupTest { publicstaticvoidmain(String[]args) { ThreadGroupsquares=newThreadGroup("Squares");//VIOLATION Threadt1=newThread(squares,newT(),"t1"); Threadt2=newThread(squares,newT(),"t2"); t1.start(); t2.start(); System.out.println("ThreadGroupnameis:"+squares.getName()); System.out.println("Therearecurrently"+squares.activeCount()+"threadsrunning"); System.out.println("ThemaximumpriorityofaThreadthatcanbecontained within"+squares.getName()+"is"+squares.getMaxPriority()); System.out.println("Therearecurrently"+squares.activeGroupCount()+"activegroups"); System.out.println(squares.getName()+"parentis"+squares.getParent()); } } classTimplementsRunnable { privateintsquare; publicvoidrun() { for(inti=1;i<5;i++) { square=i*i; System.out.println("Thread"+Thread.currentThread().getName()+ "hasapriorityof"+Thread.currentThread().getPriority()+ ":"+square); } } }
Shouldbewrittenas:
AvoidusingThreadGroup.
Reference:JoshuaBloch:"EffectiveJava-ProgrammingLanguageGuide"
Severity:Low
Rule:Mostprobablythiswassupposedtobeabooleancomparisonusing==,notanassignmentusing=
Reason:Mostprobablythiswassupposedtobeabooleancomparisonusing==,notanassignmentusing=
UsageExample:
classTest { publicvoidtest1(booleanb) { if(b=true)//VIOLATION { System.out.println("Hi"); } } publicvoidtest2(inta,intb,intc,intd,booleane) { if(e=false)//VIOLATION { System.out.println("Hi"); } } publicvoidtest3(booleanb) { while(b=true)//VIOLATION { System.out.println("Wow"); } } }
Shouldbewrittenas:
classTest { publicvoidtest1(booleanb) { if(b)//FIXED { System.out.println("Hi"); } } publicvoidtest2(inta,intb,intc,intd,booleane) { if(!e)//FIXED { System.out.println("Hi"); } } publicvoidtest3(booleanb) { while(b)//FIXED { System.out.println("Wow"); } } }
Reference:NotAvailable.
Severity:High
Rule:AvoidquestionableuseofOctateEscapeInString
Reason:AvoidquestionableuseofOctateEscapeInString
UsageExample:
packagecom.rule; classQuestionable_Octate_Escape_In_String_violation { publicvoidmethod() { Stringstr="Allowed:\012"; Stringstr1="Allowed:\377"; System.out.println("suspicious:\128"); //Violation. Stringstr2="suspicious:\318\013"; //Violation. Stringstr3="suspicious:\013\318"; //Violation. } }
Shouldbewrittenas:
Reference:Noreferenceavailable
Severity:HighRule:Thecompilercanoptionallyflagincompleteenumswitchstatements.Reason:Thecompilercanoptionallyflagincompleteenumswitchstatements.
UsageExample:
publicclassBadSwitch { voidfubar(Colorsc) { switch(c)//VIOLATION { caseBLUE: caseWHITE: { //.... break; } } } } enumColors { BLUE,WHITE,RED; }
Shouldbewrittenas:
publicclassBadSwitch { voidfubar(Colorsc) { switch(c)//FIXED { caseRED: { //.. break; } caseBLUE: caseWHITE: { //.... break; } } } } enumColors { BLUE,WHITE,RED; }
Reference:Noreferenceavailable.
Severity:High
Rule:Thesyntaxoftheregularexpressionisinvalid.
Reason:Thesyntaxoftheregularexpressionisinvalid.
UsageExample:
importjava.util.regex.*; publicclassWillThrowPatternSyntaxException { voidx(Strings)throwsException { Pattern.matches("][",s);//VIOLATION } }
Shouldbewrittenas:
Pleaseverifytheregexpattern.
Reference:Noreferencesavailable.
Severity:High
Rule:AStringfunctionisbeinginvokedand"."isbeingpassedtoaparameterthattakesaregularexpressionasanargument.
Reason:AStringfunctionisbeinginvokedand"."isbeingpassedtoaparameterthattakesaregularexpressionasanargument.
UsageExample:
publicclassTest { publicvoidfubar(Strings) { s.replaceAll(".","/");//VIOLATION } }
Shouldbewrittenas:
Pleaseensurethisisintended.
Reference:NotAvailable.
Severity:High
Rule:Avoidaddingacollectiontoitself.
Reason:Avoidaddingacollectiontoitself.
UsageExample:
packagecom.rule; importjava.util.ArrayList; importjava.util.Collection; publicclassAvoid_adding_collection_to_itself_violation { publicvoidmethod() { Collectionc=newArrayList(); c.add("Item1"); c.add("Item2"); c.addAll(c); //Violation. } }
Shouldbewrittenas:
Reference:Referencenotavailable.
Severity:MediumRule:AlwaysrethrowThreadDeathError.Reason:AlwaysrethrowThreadDeathError.
UsageExample:
packagecom.rule; /** *@authorAdministrator * */ publicclassAlways_rethrow_ThreadDeath_violation { publicstaticvoidmain(Stringargs[]) { newThread() { publicvoidrun() { run1(); } privatevoidrun1() { for(inti=0;i<100;i++) { try { doStop(i); } catch(ThreadDeathth)//Violation { System.out.println("th.getClass()="+th.getClass()); th.printStackTrace(); } System.out.println("i="+i); } } privatevoiddoStop(inti) { if(i==5) stop(); } }.start(); } }
Shouldbewrittenas:
packagecom.rule; publicclassAlways_rethrow_ThreadDeath_correction { publicstaticvoidmain(Stringargs[]) { newThread() { publicvoidrun() { run1(); } privatevoidrun1() { for(inti=0;i<100;i++) { try { doStop(i); } catch(ThreadDeathth) { System.out.println("th.getClass()="+th.getClass()); th.printStackTrace(); throwth;//Correction } System.out.println("i="+i); } } privatevoiddoStop(inti) { if(i==5) stop(); } }.start(); } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadDeath.html
Severity:Medium
Rule:Labelsshouldnotappearinswitchstatementsbecausetheywillnotbeused.
Reason:Labelsshouldnotappearinswitchstatementsbecausetheywillnotbeused.
UsageExample:
publicclassMyClass { staticintmethod(inti){ switch(i){ case4: case3://VIOLATION:labeltypo i++; break; case25: unusedlabel://VIOLATION:unusedlabel. break; } returni; } }
Shouldbewrittenas:
publicclassMyClass { staticintmethod(inti){ switch(i){ case4: case3://CORRECTION i++; break; case25: //CORRECTION break; } returni; } }
Reference:Noreferencesavailable.
Severity:High
Rule:UseSystem.exitwithcare.
Reason:UseSystem.exitwithcare.
UsageExample:
packagecom.rule; publicclassUse_System_dot_exit_with_care_violation { publicstaticvoidmain(String[]s) { intia[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; (newThreadDoSum(ia)).start(); System.exit(0);//Violation } } classThreadDoSumextendsThread { int[]ia=null; publicThreadDoSum(intia[]) { this.ia=ia; } publicvoidrun() { intsum=0; for(inti=0;i<ia.length;i++) { sum+=ia[i]; } System.out.println(sum); } }
Shouldbewrittenas:
packagecom.rule; publicclassUse_System_dot_exit_with_care_correction { publicstaticvoidmain(String[]s) { intia[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; (newThreadDoSum(ia)).start(); return;//Correction } } classThreadDoSumextendsThread { int[]ia=null; publicThreadDoSum(intia[]) { this.ia=ia; } publicvoidrun() { intsum=0; for(inti=0;i<ia.length;i++) { sum+=ia[i]; } System.out.println(sum); } }
Reference:http://www.javapractices.com/Topic86.cjp
http://www.devx.com/tips/Tip/14560
Severity:Medium
Rule:Avoidwrongincrementinforloop.
Reason:Avoidwrongincrementinforloop.
UsageExample:
packagecom.rule; classAvoid_wrong_increment_in_for_violation { publicvoidmethod() { intarray[]={10,20,30,40}; intlength=array.length; intj=0; for(inti=0;i<length;j++) //Violation. { //SomeCode... } } }
Shouldbewrittenas:
packagecom.rule; classAvoid_wrong_increment_in_for_Correction { publicvoidmethod() { intarray[]={10,20,30,40}; intlength=array.length; for(inti=0;i<length;i++) //Correction. { //SomeCode... } } }
Reference:Referencenotavailable.
Severity:High
Rule:Nevercalloverridablemethodfromconstructor.
Reason:Nevercalloverridablemethodfromconstructor.
UsageExample:
publicclassNever_call_overridable_method_from_constructor_violation { publicstaticvoidmain(String[]a) { Childc=newChild(); System.out.println(c.type);//isnulleventhoughChild'sinititlize()wasexecuted. } publicNever_call_overridable_method_from_constructor_violation() { inititlize();//Violation } publicvoidinititlize() { } } classChildextendsNever_call_overridable_method_from_constructor_violation { publicStringtype=null; publicChild() { super(); } publicvoidinititlize() { type="CHART"; } }
Shouldbewrittenas:
Donotcalloverridablemethodinsideconstructor.
Reference:http://www.javapractices.com/Topic11.cjp
Severity:High
Rule:Itcanleadtopossibleerrors.
Reason:Itcanleadtopossibleerrors.
UsageExample:
publicclassTest { publicvoidmethod(int[]a) { a[0]=0;//VIOLATION } }
Shouldbewrittenas:
publicclassTest { publicvoidmethod(int[]a) { finalintlen=a.length; int[]b=newint[len]; System.arraycopy(a,0,b,0,len); b[0]=0;//FIXED } }
Reference:Notavailable.
Severity:Critical
Rule:Avoidnon-SerializableandnonprimitiveinstancefieldinsideSerializableclass.
Reason:Avoidnon-SerializableandnonprimitiveinstancefieldinsideSerializableclass.
UsageExample:
packagecom.rule; importjava.io.*; publicclassAvoid_non_Serializable_field_inside_Serializable_class_violationimplementsSerializable { MyClassmc=newMyClass();//Violation privateintiNum=90; publicstaticvoidmain(Stringargs[])throwsIOException { FileOutputStreamout=newFileOutputStream("Test"); ObjectOutputStreamoos=newObjectOutputStream(out); oos.writeObject(newAvoid_non_Serializable_field_inside_Serializable_class_violation()); oos.flush(); } } classMyClass { intj=89; }
Shouldbewrittenas:
AvoidnonSerializablefieldinsideSerializableclass.
Reference:Referencenotavailable.
Severity:Critical
Rule:Ifanynon-serializablesuperclassesdon'thaveazero-argumentconstructor,serializationwillfail.
Reason:Ifanynon-serializablesuperclassesdon'thaveazero-argumentconstructor,serializationwillfail.
UsageExample:
publicclassSomeClassimplementsjava.io.Serializable extendsSuperClass//VIOLATION { SomeClass() { super(0); } } classSuperClass { SuperClass(inti){} }
Shouldbewrittenas:
publicclassSomeClassimplementsjava.io.Serializable extendsSuperClass { SomeClass() { super(0); } } classSuperClass { SuperClass(inti){} SuperClass(){}//CORRECTION }
Reference:Noreferencesavailable.
Severity:Critical
Rule:Thiscodewoulddefinitelythrowajava.lang.NullPointerException.
Reason:Thiscodewoulddefinitelythrowajava.lang.NullPointerException.
UsageExample:
publicclassErroneous_null_check_violation { publicvoidaMethod() { Objectx=newObject(); if(x==null) { System.out.println(x.toString());//VIOLATION } } }
Shouldbewrittenas:
Reference:Referencenotavailable.
Severity:CriticalRule:Apossibly-nullvalueispassedtoamethodwhichunconditionallydereferencesitresultinginanullpointerexception.Reason:Apossibly-nullvalueispassedtoamethodwhichunconditionallydereferencesitresultinginanullpointerexception.
UsageExample:
publicclassTest { publicvoidfubar() { Objects=null; //... System.out.println(getStringRepresentation(s));//VIOLATION } privateStringgetStringRepresentation(Objects) { returns.toString(); } }
Shouldbewrittenas:
publicclassTest { publicvoidfubar() { Objects=null; //... System.out.println(getStringRepresentation(s)); } privateStringgetStringRepresentation(Objects) { returns!=null?s.toString():"";//FIXED } }
Reference:NotAvailable.
Severity:Critical
Rule:Thiscodewoulddefinitelythrowajava.lang.ClassCastException.
Reason:Thiscodewoulddefinitelythrowajava.lang.ClassCastException.
UsageExample:
importjava.util.Hashtable; importjava.util.Vector; publicclassTest { Hashtablebaz() { returnnewHashtable(); } Vector[]faz() { returnnewVector[10]; } intf2() { Objecto=faz(); return((Hashtable[])o).length;//VIOLATION } inthx() { Objecto=baz(); return((Vector)o).size();//VIOLATION } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:CriticalRule:ThiscodeintheconstructorcallsmethodsintheparentAppletthatrelyontheAppletstub.Reason:ThiscodeintheconstructorcallsmethodsintheparentAppletthatrelyontheAppletstub.
UsageExample:
importjava.applet.Applet; importjava.net.URL; publicclassTestextendsApplet { publicTest() { URLu1=getDocumentBase();//VIOLATION URLu2=getCodeBase();//VIOLATION if(u1.equals(u2)) return; if(getParameter("bad")!=null)//VIOLATION return; if(getAppletContext()!=null)//VIOLATION return; } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:CriticalRule:Avoiddoublecheckedlocking.Reason:Avoiddoublecheckedlocking.
UsageExample:
packagecom.rule; publicclassAvoid_double_checked_locking { ObjectobjOne=null; if(objOne==null) { synchronized(this) { if(objOne==null) //Violation. { objOne=null; } } } }
Shouldbewrittenas:
Reference:http://www.javaworld.com/javaworld/jw-02-2001/jw-0209-double.html.
Severity:MediumRule:AvoidimmediatedereferenceofresultofreadLine()method.Reason:AvoidimmediatedereferenceofresultofreadLine()method.
UsageExample:
packagecom.rule; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.FileReader; classAvoid_immediate_dereference_of_readLine_violation { publicvoidmethod() { BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt")); if(in.readLine().equals("AppPerfect")) //Violation { //SomeCode... } } }
Shouldbewrittenas:
packagecom.rule; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.FileReader; classAvoid_immediate_dereference_of_readLine_Correction { publicvoidmethod() { BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt")); Stringstr=in.readLine(); if(str!=null) { if(str.equals("AppPerfect")) //Correction { //SomeCode... } } } }
Reference:Referencenotavailable.
Severity:Medium
Rule:ResultofreadLine()isnotused.
Reason:ResultofreadLine()isnotused.
UsageExample:
packagecom.rule; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.FileReader; publicclassResult_of_readLine_not_used_violation { publicvoidmethod() { BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt")); Stringstr=null; if(in.readLine()!=null) //Violation { str=in.readLine(); } } }
Shouldbewrittenas:
packagecom.rule; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.FileReader; publicclassResult_of_readLine_not_used_correction { publicvoidmethod() { BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt")); Stringstr=null; if((str=in.readLine())!=null) //Correction. { str; } } }
Reference:Referencenotavailable.
Severity:Low
Rule:Therunmethodshouldbedeclaredassynchronized.
Reason:Therunmethodshouldbedeclaredassynchronized.
UsageExample:
packagecom.rule; publicclassDeclare_Runnable_run_as_synchronized_violationimplementsRunnable { publicvoidrun()//VIOLATION { System.out.println("Declare_Runnable_run_as_synchronized_violation.run()"); } }
Shouldbewrittenas:
packagecom.rule; publicclassDeclare_Runnable_run_as_synchronized_correctionimplementsRunnable { publicsynchronizedvoidrun()//CORRECTION { System.out.println("Declare_Runnable_run_as_synchronized_correction.run()"); } }
Reference:Noreferenceavailable.
Severity:Low
Rule:TODOcommentsleftinthecodecouldindicatethattheimplementationisincompleteorsomebugneedstobefixed.
Reason:TODOcommentsleftinthecodecouldindicatethattheimplementationisincompleteorsomebugneedstobefixed.
UsageExample:
publicclassMyClass { publicvoidmyMethod() { //TODOAuto-generatedmethodstub//VIOLATION } }
Shouldbewrittenas:
publicclassMyClass { publicvoidmyMethod() { //... //FIXED,TODOcommentisremoved } }
Reference:Notavailable.
Severity:Low
Rule:Avoidusingprimitivespinlocks.
Reason:Avoidusingprimitivespinlocks.
UsageExample:
publicclassTest { booleanflag; voidwaitForTrue() { for(;flag;);//VIOLATION } Testfoo; Testbar; voidwaitForNonNull() { while(foo==null);//VIOLATION } staticvoidwaitForNonNullIndirect(intx,Testbaz) { while(baz.foo==null);//VIOLATION while(baz.foo.bar==null);//VIOLATION } staticbooleansflag; staticvoidwaitForStatic() { do { }while(!sflag);//VIOLATION } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:HighRule:Avoiddowncastingtoconcretecollection.Reason:Avoiddowncastingtoconcretecollection.
UsageExample:
publicclassTest { Lista; publicVectorswap(Listb) { Vectorv=(Vector)a; a=(Vector)b;//VIOLATION returnv; } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:HighRule:Avoidcastingjava.util.Collectionorjava.util.Iterabletoanotherabstractcollection.Reason:Avoidcastingjava.util.Collectionorjava.util.Iterabletoanotherabstractcollection.
UsageExample:
importjava.util.Hashtable; importjava.util.Map; importjava.util.Set; publicclassTest { Mapbar() { returnnewHashtable(); } intd() { Mapm=bar(); Sets=(Set)m.values();//VIOLATION returns.size(); } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:DonotuseemptystatementsReason:Donotuseemptystatements
UsageExample:
packagecom.rule; publicclassAvoid_empty_statement { publicvoidsaveAndExit(booleanbExit) { for(i=0;i<fileCount;saveFile(i++)); //violation if(bExit) { exitEditor(); }; //Violation } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_empty_statement { publicvoidsaveAndExit() { for(i=0;i<fileCount;saveFile(i++)) { //Correction } if(bExit) { exitEditor(); } //Correction } }
Reference:http://www.faqs.org/docs/javap/c3/s6.html
Severity:Low
Rule:Avoidfieldswithcloselysimilarnames
Reason:Avoidfieldswithcloselysimilarnames
UsageExample:
packagecom.rule; publicclassAvoid_fields_with_closely_similar_names_violation { intfield; intField;//VIOLATION }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_fields_with_closely_similar_names_correction { intfield1; intfield2;//CORRECTION }
Reference:Referencenotavailable.
Severity:Low
Rule:Fieldsaremutable.
Reason:Fieldsaremutable.
UsageExample:
publicclasssomeExceptionextendsException { privateStringmessage;//VIOLATION publicsomeException(Stringmessage) { //... } }
Shouldbewrittenas:
publicclasssomeExceptionextendsException { privatefinalStringmessage; publicsomeException(Stringmessage) { //... } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Avoidcastingprimitivetypestolowerprecisiondatatypes.
Reason:Avoidcastingprimitivetypestolowerprecisiondatatypes.
UsageExample:
packagecom.rule; publicclassDo_not_cast_to_lower_precision { voidmethod(longl,doubled,floatf,Stringstr) { shorts=(short)l; //VIOLATION inti=s; i=(int)f; //VIOLATION f=(float)d; //VIOLATION method((byte)i); Objectobj=(Object)str; } voidmethod(byteb) { } }
Shouldbewrittenas:
Tryusingdatatypesofproperprecision.
Reference:ReferenceNotAvailable.
Severity:Medium
Rule:Thiscodecouldpossiblythrowajava.lang.ClassCastException.
Reason:Thiscodecouldpossiblythrowajava.lang.ClassCastException.
UsageExample:
importjava.util.ArrayList; importjava.util.Collection; importjava.util.List; importjava.util.Vector; publicclassTest { publicstaticvoidmain(String[]args) { Collectionh=newArrayList(); inti=2; if(i==3) { h=newVector(); } Listj=(Vector)h;//VIOLATION if(hinstanceofArrayList) { j=(ArrayList)h; } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:Donotcastresultofintegerdivisiontoadouble.Reason:Donotcastresultofintegerdivisiontoadouble.
UsageExample:
packagecom.rule; classDo_not_cast_integer_division_to_double_violation { publicvoidmethod() { intx=2; inty=5; doublevalue1=x/y; //Violation. } }
Shouldbewrittenas:
packagecom.rule; classDo_not_cast_integer_division_to_double_Correction { publicvoidmethod() { intx=2; inty=5; doublevalue1=(double)x/y; //Correction. } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Ifthemultiplicationisdoneusinglongarithmetic,youcanavoidthepossibilitythattheresultwilloverflow.
Reason:Ifthemultiplicationisdoneusinglongarithmetic,youcanavoidthepossibilitythattheresultwilloverflow.
UsageExample:
publicclassTest { longconvertDaysToMilliseconds(intdays) { return1000*3600*24*days;//VIOLATION } }
Shouldbewrittenas:
publicclassTest { staticfinallongMILLISECONDS_PER_DAY=24L*3600*1000;//FIXED longconvertDaysToMilliseconds(intdays) { returndays*MILLISECONDS_PER_DAY; } }
Reference:NotAvailable.
Severity:Medium
Rule:Userandom.nextInt()insteadof(int)(random.nextDouble()).
Reason:Userandom.nextInt()insteadof(int)(random.nextDouble()).
UsageExample:
packagecom.rule; importjava.util.Random; publicclassUse_random_nextInt_violation { publicvoidmethod() { Randomr=newRandom(); inti=(int)(r.nextDouble()*100); //Violation. } }
Shouldbewrittenas:
packagecom.rule; importjava.util.Random; publicclassUse_random_nextInt_correction { publicvoidmethod() { Randomr=newRandom(); inti=r.nextInt(100); //Corection. } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Avoidcastingrandomvaluefrom0to1tointegerbeforeitsuse.
Reason:Avoidcastingrandomvaluefrom0to1tointegerbeforeitsuse.
UsageExample:
importjava.util.Random; publicclassAvoid_casting_random_value_to_integer_violation { publicvoidmethod() { Randomr=newRandom(3); inti=(int)r.nextFloat();//Violation. } }
Shouldbewrittenas:
importjava.util.Random; publicclassAvoid_casting_random_value_to_integer_violation { publicvoidmethod() { Randomr=newRandom(); inti=r.nextInt(3); } }
Reference:http://java.sun.com/developer/JDCTechTips/2001/tt0925.html#tip1
Severity:Medium
Rule:Avoidoverwritingtheincrementofavariable.
Reason:Avoidoverwritingtheincrementofavariable.
UsageExample:
packagecom.rule; publicclassOverwritten_increment_violation { publicvoidmethod() { inti=10; i=i++; //Violation. } }
Shouldbewrittenas:
packagecom.rule; publicclassOverwritten_increment_correction { publicvoidmethod() { inti=10; i++; //Correction. } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Avoidoverwritingthedecrementofavariable.
Reason:Avoidoverwritingthedecrementofavariable.
UsageExample:
packagecom.rule; publicclassOverwritten_decrement_violation { publicvoidmethod() { inti=10; i=i--; //Violation. } }
Shouldbewrittenas:
packagecom.rule; publicclassOverwritten_decrement_correction { publicvoidmethod() { inti=10; i--; //Correction. } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Avoidpassingwrongmonthvalue.
Reason:Avoidpassingwrongmonthvalue.
UsageExample:
packagecom.rule; importjava.util.Date; importjava.util.Calendar; importjava.util.GregorianCalendar; publicclassInvalid_month_argument_violation { publicvoidmethod() { Datedate=newDate(); date.setMonth(12); //Violation. Calendarcal=newGregorianCalendar(); cal.set(Calendar.MONTH,14); //Violation. } }
Shouldbewrittenas:
packagecom.rule; importjava.util.Date; importjava.util.Calendar; importjava.util.GregorianCalendar; publicclassInvalid_month_argument_correction { publicvoidmethod() { Datedate=newDate(); date.setMonth(0); //Correction Calendarcal=newGregorianCalendar(); cal.set(Calendar.MONTH,2); //Correction } }
Reference:Referencenotavailable.
Severity:High
Rule:CallingrunmethodofRunnableobjectdirectlywillnotcreateanewthread.
Reason:CallingrunmethodofRunnableobjectdirectlywillnotcreateanewthread.
UsageExample:
packagecom.rule; publicclassDo_not_call_run_explicitly_violation { publicvoidmethod(Do_not_call_run_explicitly_violation1obj) { obj.run();//VIOLATION } } classDo_not_call_run_explicitly_violation1implementsRunnable { publicvoidrun() { } }
Shouldbewrittenas:
packagecom.rule; publicclassDo_not_call_run_explicitly_correction { publicvoidmethod(Do_not_call_run_explicitly_violation1obj) { newThread(obj).start();//CORRECTION } } classDo_not_call_run_explicitly_violation1implementsRunnable { publicvoidrun() { } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runnable.html
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html
Severity:Medium
Rule:CatchingIllegalMonitorStateExceptionrepresentsalogicalerrorinthecode.
Reason:CatchingIllegalMonitorStateExceptionrepresentsalogicalerrorinthecode.
UsageExample:
packagecom.rule; publicclassAvoid_catching_IllegalMonitorStateException_violation { publicvoidmethod(Objectobj) { try { obj.wait(1000); } catch(InterruptedExceptione) { e.printStackTrace(); } catch(IllegalMonitorStateExceptione)//VIOLATION { e.printStackTrace(); } } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_catching_IllegalMonitorStateException_correction { publicvoidmethod(Objectobj) { try { //usepropersynchronization synchronized(obj)//CORRECTION { obj.wait(1000); } } catch(InterruptedExceptione) { e.printStackTrace(); } } }
Reference:NoReferenceavailable.
Severity:Medium
Rule:Certainswingmethodsshouldonlybecalledinswingeventthread.
Reason:Certainswingmethodsshouldonlybecalledinswingeventthread.
UsageExample:
packagecom.rule; importjavax.swing.JFrame; publicclassAlways_call_swing_methods_in_swing_event_thread_violation { publicstaticvoidmain(Stringargs[]) { JFrameframe=newJFrame(); frame.setTitle("Title"); frame.setSize(200,100); frame.show(); //Violation frame.pack(); //Violation frame.setVisible(true); //Violation } }
Shouldbewrittenas:
packagecom.rule; importjavax.swing.JFrame; publicclassAlways_call_swing_methods_in_swing_event_thread_correctionimplementsRunnable { finalFrameframe; publicFrameShower(Frameframe) { this.frame=frame; } publicvoidrun() { frame.show(); //Correction } publicstaticvoidmain(Stringargs[]) { JFrameframe=newJFrame(); frame.setTitle("Title"); frame.setSize(200,100); Runnablerunner=newFrameShower(frame); } }
Reference:http://java.sun.com/developer/JDCTechTips/2003/tt1208.html#1
Severity:Medium
Rule:AvoiderroneoususeofbinaryANDoperatorwithzero.
Reason:AvoiderroneoususeofbinaryANDoperatorwithzero.
UsageExample:
packagecom.rule; publicclassErroneous_use_of_binary_AND_with_ZERO_violation { publicstaticfinalintHSCROLLBAR=1; publicstaticfinalintVSCROLLBAR=2; publicstaticfinalintNONE=0; publicstaticfinalintBOTHSCROLLBARS=3; publicbooleancheck(intattribs) { return((attribs&NONE)==NONE); } }
Shouldbewrittenas:
Nocorrectionavailable.
Reference:Referencenotavailable.
Severity:Medium
Rule:AvoidexpressioninvolingspecificuseofbitwiseANDoperatorthatalwaysevaluatetofalse.
Reason:AvoidexpressioninvolingspecificuseofbitwiseANDoperatorthatalwaysevaluatetofalse.
UsageExample:
packagecom.rule; publicclassErroneous_use_of_BAND_violation { publicstaticfinalintHSCROLLBAR=1; publicstaticfinalintVSCROLLBAR=2; publicstaticfinalintNONE=0; publicstaticfinalintBOTHSCROLLBARS=3; publicbooleancheck(intattribs) { return((attribs&VSCROLLBAR)==BOTHSCROLLBARS); } }
Shouldbewrittenas:
Nocorrectionavailable.
Reference:Referencenotavailable.
Severity:Medium
Rule:IfcompareTomethodisdeclared,itshouldhavetheparameteroftypejava.lang.Object.
Reason:IfcompareTomethodisdeclared,itshouldhavetheparameteroftypejava.lang.Object.
UsageExample:
packagecom.rule; publicclassDeclare_Object_as_parameter_for_compareTo_method_violation { publicintcompareTo(Declare_Object_as_parameter_for_compareTo_method_violationo)//VIOLATION { return0; } }
Shouldbewrittenas:
packagecom.rule; publicclassDeclare_Object_as_parameter_for_compareTo_method_correction { publicintcompareTo(Objecto)//CORRECTION { return0; } }
Reference:Noreferenceavailable.
Severity:Medium
Rule:Explicitlyintializeallfieldsconstructor.
Reason:Explicitlyintializeallfieldsconstructor.
UsageExample:
publicclassInit { privateinti=5; privateintj; privateintk; publicInit() { this(12); k=0; } publicInit(intval)//VIOLATION:kisnotinitialized. { j=val; } }
Shouldbewrittenas:
publicclassInit { privateinti=5; privateintj; privateintk; publicInit() { this(12); } publicInit(intval) { j=val; k=0; //CORRECTION } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Thisshouldbeavoidedbecausedecimalliteralsarenotpreciselyequaltotheirdesiredvalues.
Reason:Thisshouldbeavoidedbecausedecimalliteralsarenotpreciselyequaltotheirdesiredvalues.
UsageExample:
importjava.math.*; publicclassTest { publicvoidmethod() { BigDecimalbd=newBigDecimal(.1);//VIOLATION } }
Shouldbewrittenas:
Usethe'BigDecimal'constructorwhichtakesaStringasanargumentinstead oftheonewhichtakesadoublesincethisconstructorwillproduceaprecise value. importjava.math.*; publicclassTest { publicvoidmethod() { BigDecimalbd=newBigDecimal(".1");//FIXED } }
Reference:Notavailable.
Severity:Medium
Rule:UseequalsmethodforStringcomparison.
Reason:UseequalsmethodforStringcomparison.
UsageExample:
packagecom.rule; publicclassUse_string_equals_method_violation { publicvoidfoo() { Stringstr="compare"; Stringtemp=newString("compare"); if(str==temp)//Violation { //... System.out.println("samecontent"); } } }
Shouldbewrittenas:
packagecom.rule; publicclassUse_string_equals_method_correction { publicvoidfoo() { Stringstr="compare"; Stringtemp=newString("compare"); if(str.equals(temp))//Correction { //... System.out.println("samecontent"); } } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Initializationsthatdependonstaticfieldsfromdifferentclassesorfilesshouldbeavoided.
Reason:Initializationsthatdependonstaticfieldsfromdifferentclassesorfilesshouldbeavoided.
UsageExample:
publicclassNoCirc { publicstaticvoidmain(Stringargs[]) { //Iftheorderisswitched,theresultwouldbedifferent IC2ref2=newIC2(); IC1ref1=newIC1(); System.out.println(IC1.a+""+IC2.b); } } classIC1 { staticinta=IC2.b+1;//VIOLATION } classIC2 { staticintb=IC1.a;//VIOLATION }
Shouldbewrittenas:
publicclassNoCirc { publicstaticvoidmain(Stringargs[]) { IC2ref2=newIC2(); IC1ref1=newIC1(); System.out.println(IC1.a+""+IC2.b); } } classIC1 { staticinta=IC2.b+1;//CORRECTION } classIC2 { staticintb=0;//CORRECTION }
Reference:Noreferencesavailable.
Severity:High
Rule:Ifthegetterorsettersaresettingfieldsotherthantheonementionedinitname,thenitcouldbeapossiblebug.
Reason:Ifthegetterorsettersaresettingfieldsotherthantheonementionedinitname,thenitcouldbeapossiblebug.
UsageExample:
publicclassAlwaysEnsureGetSetMethodsAccessCorrectFields { privateString_str1; privateString_str2; publicvoidsetStr1(Stringstr)//VIOLATION { _str2=str; } publicStringgetStr2()//VIOLATION { return_str1; } }
Shouldbewrittenas:
publicclassAlwaysEnsureGetSetMethodsAccessCorrectFields { privateString_str1; privateString_str2; publicvoidsetStr1(Stringstr)//CORRECTION { _str1=str; } publicStringgetStr2()//CORRECTION { return_str2; } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Declarethefieldsasfinalorprivatesoastopreventthemfromunauthorizedmodifications.
Reason:Declarethefieldsasfinalorprivatesoastopreventthemfromunauthorizedmodifications.
UsageExample:
publicclassMyExceptionextendsjava.lang.Exception//VIOLATION { StringextraMessage; intseverity; //... }
Shouldbewrittenas:
publicclassMyExceptionextendsjava.lang.Exception { finalStringextraMessage; privateseverity; //... }
Reference:
Severity:Medium
Rule:Methodoverloadingbasedontheargument'sdatatypeshouldbeavoided.
Reason:Methodoverloadingbasedontheargument'sdatatypeshouldbeavoided.
UsageExample:
packagecom.rule; publicclassAvoid_overloading_methods_on_argument_types_violation { voidmethod(IntegerintVal)//VIOLATION { //handleInteger } voidmethod(StringstrVal) { //handleString } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_overloading_methods_on_argument_types_correction { voidmethod(Objectval)//CORRECTION { if(valinstanceofInteger) { //handleInteger } elseif(valinstanceofString) { //handleString } } }
Reference:Noreferenceavailable.
Severity:Medium
Rule:Novaluewasassignedtoprivatefield.
Reason:Novaluewasassignedtoprivatefield.
UsageExample:
packagecom.rule; publicclassPrivate_field_is_never_written_violation { privateStringname;//VIOLATION publicvoiddebug() { System.out.println("name="+name); } }
Shouldbewrittenas:
packagecom.rule; publicclassPrivate_field_is_never_written_correction { // privateStringname;//CORRECTION publicvoiddebug() { // System.out.println("name="+name); } }
Reference:Noreferenceavailable
Severity:Critical
Rule:Donotcallsynchronizedmethodfromsynchronizedmethod.
Reason:Donotcallsynchronizedmethodfromsynchronizedmethod.
UsageExample:
packagecom.rule; publicclassDo_not_call_synchronized_method_from_synchronized_method_violation { publicsynchronizedvoidmeth() { Testtt=newTest(); //... tt.foo();//Violation } } classTest { publicsynchronizedvoidfoo() { //... } }
Shouldbewrittenas:
Avoidcallingsynchronizedmethodfromsynchronizedmethod.
Reference:http://www.onjava.com/pub/a/onjava/2004/10/20/threads2.html
Severity:High
Rule:Alwaysplaceliteralsfirstinstringcomparison.
Reason:Alwaysplaceliteralsfirstinstringcomparison.
UsageExample:
packagecom.rule; publicclassAlways_place_literals_first_in_string_comparison_violation { publicvoidmethod() { Stringstr="AppPerfect"; if(str.equals("AppPerfect")) //Violation. { } } }
Shouldbewrittenas:
packagecom.rule; publicclassAlways_place_literals_first_in_string_comparison_correction { publicvoidmethod() { Stringstr="AppPerfect"; if("AppPerfect".equals(str)) //Correction. { } } }
Reference:Referencenotavailable.
Severity:Medium
Rule:Donotuseequalsoperatorfordecimalpointvaluestoavoidpossibleerrors
Reason:Donotuseequalsoperatorfordecimalpointvaluestoavoidpossibleerrors
UsageExample:
packagecom.rule; classAvoid_equals_operator_for_decimal_point_values_violation { publicbooleanisEqual(floatf1,floatf2) { returnf1==f2; } }
Shouldbewrittenas:
Insteadofcheckingforexactequality,checkforsufficientequality.Thatisfindthedifferenceoftwovaluesandseeifitsinthepermissiblelimits. packagecom.rule; classAvoid_equals_operator_for_decimal_point_values_correction { publicbooleanisEqual(floatf1,floatf2) { return(Math.abs(f1-f2)<0.01); } }
Reference:http://www-106.ibm.com/developerworks/java/library/j-jtp0114/
Severity:Medium
Rule:Avoidreturningjava.lang.Object.
Reason:Avoidreturningjava.lang.Object.
UsageExample:
publicclassNoObject { privateStringstr; publicNoObject(Stringstr) { super(); this.str=str; } publicObjectgetMyString()//VIOLATION { returnstr; } publicstaticvoidmain(String[]args)throwsException { NoObjectno=newNoObject("Test"); Stringstr=(String)no.getMyString(); System.out.println(str); } }
Shouldbewrittenas:
publicclassNoObject { privateStringstr; publicNoObject(Stringstr) { super(); this.str=str; } publicStringgetMyString()//CORRECTION { returnstr; } publicstaticvoidmain(String[]args)throwsException { NoObjectno=newNoObject("Test"); Stringstr=no.getMyString(); System.out.println(str); } }
Reference:Noreferencesavailable.
Severity:High
Rule:AvoidinvokingSystem.runFinalizersOnExitorRuntime.runFinalizersOnExit.
Reason:AvoidinvokingSystem.runFinalizersOnExitorRuntime.runFinalizersOnExit.
UsageExample:
packagecom.rule; publicclassAvoid_invoking_runFinalizersOnExit_violation { publicvoidmethod() { Object[]oa=getObjects(); process(oa); System.runFinalizersOnExit(true); //Violation. Runtime.runFinalizersOnExit(true); //Violation. } }
Shouldbewrittenas:
Reference:Referencenotavailable.
Severity:MediumRule:AvoidcontiguousnonStringvaluesduringStringconcatenation.Reason:AvoidcontiguousnonStringvaluesduringStringconcatenation.
UsageExample:
packagecom.rule; publicclassAvoid_contiguous_non_String_values_during_concatenation_violation { publicvoidmethod() { intprinciple=100; intinterest=10; System.out.println("Netpayable="+principle+interest+"rupees");//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_contiguous_non_String_values_during_concatenation_correction { publicvoidmethod() { intprinciple=100; intinterest=10; inttotal=principle+interest System.out.println("Netpayable="+total+"rupees");//CORRECTION } }
Reference:ReferenceNotAvailable.
Severity:Medium
Rule:Aconditionalexpressionthatalwaysevaluatestofalseismostlylikelyapossiblebug.
Reason:Aconditionalexpressionthatalwaysevaluatestofalseismostlylikelyapossiblebug.
UsageExample:
publicclassMyClass { publicvoidprocess(intarray_size,booleanb1,booleanb2) { if(array_size<0&&array_size>100) //VIOLATION thrownewIllegalArgumentException("invalidarraysize"); } }
Shouldbewrittenas:
publicclassMyClass { publicvoidprocess(intarray_size,booleanb1,booleanb2) { if(array_size<0||array_size>100) //CORRECTION thrownewIllegalArgumentException("invalidarraysize"); } }
Reference:Noreferencesavailable.
Severity:Medium
Rule:Donotuseanyclassfieldsthathavenotassignedanyvalueinconstructors.
Reason:Donotuseanyclassfieldsthathavenotassignedanyvalueinconstructors.
UsageExample:
packagecom.rule; publicclassAvoid_accessing_uninitialized_fields_in_constructors_violation { privateStringname; privateintid; publicAvoid_accessing_uninitialized_fields_in_constructors_violation(intID) { name="name"+id;//VIOLATION id=ID; } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_accessing_uninitialized_fields_in_constructors_correction { privateStringname; privateintid; publicAvoid_accessing_uninitialized_fields_in_constructors_correction(intID) { name="name"+ID;//CORRECTION id=ID; } }
Reference:Noreferenceavailable.
Severity:Medium
Rule:Donotuseanyclassfieldsthathavenotassignedanyvalueinmethods.
Reason:Donotuseanyclassfieldsthathavenotassignedanyvalueinmethods.
UsageExample:
packagecom.rule; publicclassAvoid_accessing_uninitialized_fields_violation { privateStringname; privateintid; publicvoidmethod() { name="name"+id;//VIOLATION id=ID; } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_accessing_uninitialized_fields_correction { privateStringname; privateintid; publicvoidmethod() { name="name"+ID;//CORRECTION id=ID; } }
Reference:Noreferenceavailable.
Severity:Critical
Rule:Theerrorisdetectedatruntime.
Reason:Theerrorisdetectedatruntime.
UsageExample:
packagecom.rule; publicclassAvoid_Serializable_class_having_non_Serializable_parent_violationextendsSuperimplementsjava.io.Serializable//VIOLATION { Avoid_Serializable_class_having_non_Serializable_parent_violation() { super(0); } } classSuper { Super(inti) { } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_Serializable_class_having_non_Serializable_parent_correctionextendsSuperimplementsjava.io.Serializable { Avoid_Serializable_class_having_non_Serializable_parent_violation() { super(); } } classSuper { Super() { } }
Reference:http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html
Severity:Medium
Rule:AvoidcomparisonwithFloat.NaNandDouble.NaN.
Reason:AvoidcomparisonwithFloat.NaNandDouble.NaN.
UsageExample:
packagecom.rule; publicclassAvoid_comparison_with_float_NaN_violation { publicvoidmethod() { if(performDivision(0.0f,0.0f)==Float.NaN)//Violation { System.out.println("NotaNumber"); } else { System.out.println("aNumber"); } } publicfloatperformDivision(floatf1,floatf2) { returnf1/f2; } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_comparison_with_float_NaN_correction { publicvoidmethod() { if(Float.isNan(performDivision(0.0,0.0)))//Correction { System.out.println("NotaNumber"); } else { System.out.println("aNumber"); } } publicfloatperformDivision(floatf1,floatf2) { returnf1/f2; } }
Reference:http://www.concentric.net/~Ttwang/tech/javafloat.htm
Severity:High
Rule:Ifthesetmethodissynchronized,thegetmethodshouldalsobesynchronized.
Reason:Ifthesetmethodissynchronized,thegetmethodshouldalsobesynchronized.
UsageExample:
packagecom.rule; publicclassDeclare_get_method_synchronized_violation { privateintvalue; publicintgetValue()//VIOLATION { returnvalue; } publicsynchronizedvoidsetValue(intval) { value=val; } }
Shouldbewrittenas:
packagecom.rule; publicclassDeclare_get_method_synchronized_correction { privateintvalue; publicsynchronizedintgetValue()//CORRECTION { returnvalue; } publicsynchronizedvoidsetValue(intval) { value=val; } }
Reference:Noreferenceavailable.
Severity:High
Rule:Floatanddoubledonotprovideexactresultsandshouldnotbeusedwhereexactresultsarerequired.
Reason:Floatanddoubledonotprovideexactresultsandshouldnotbeusedwhereexactresultsarerequired.
UsageExample:
publicclassBadFloatAndDouble { publicstaticvoidmain(String[]args) { doublefunds=1.0; intitemsBought=0; for(doubleprice=.10;funds>=price;price+=.10)//VIOLATION { funds-=price;//VIOLATION itemsBought++; } System.out.println(itemsBought+"itemsbought."); System.out.println("Change:$"+funds);//VIOLATION } }
Shouldbewrittenas:
publicclassBadFloatAndDouble { publicstaticvoidmain(String[]args) { finalBigDecimalTEN_CENTS=newBigDecimal(".10"); intitemsBought=0; BigDecimalfunds=newBigDecimal("1.00"); for(BigDecimalprice=TEN_CENTS;funds.compareTo(price)>=0; price=price.add(TEN_CENTS)) { itemsBought++; funds=funds.subtract(price); } System.out.println(itemsBought+"itemsbought."); System.out.println("Moneyleftover:$"+funds); } }
Reference:JoshuaBloch:"EffectiveJava-ProgrammingLanguageGuide"AddisonWesley,2001,pp.149-151
Severity:Critical
Rule:Avoidassigningvariabletosamevariable.
Reason:Avoidassigningvariabletosamevariable.
UsageExample:
packagecom.rule; publicclassAvoid_assigning_variable_to_same_variable_violation { privateintiVar; Avoid_assigning_variable_to_same_variable_violation(intiVar) { iVar=iVar;//Violation } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_assigning_variable_to_same_variable_correction { privateintiVar; Avoid_assigning_variable_to_same_variable_violation(intiVar) { this.iVar=iVar;//Correction } }
Reference:Referencenotavailable.
Severity:Medium
Rule:AvoiderroneoususeofbinaryORoperator.
Reason:AvoiderroneoususeofbinaryORoperator.
UsageExample:
packagecom.rule; publicclassErroneous_use_of_binary_OR_violation { publicstaticfinalintHSCROLLBAR=1; publicstaticfinalintVSCROLLBAR=2; publicstaticfinalintNONE=0; publicstaticfinalintBOTHSCROLLBARS=3; publicbooleancheck(intattribs) { return((attribs|BOTHSCROLLBARS)==HSCROLLBAR); } }
Shouldbewrittenas:
Nocorrectionavailable.
Reference:Referencenotavailable.
Severity:Critical
Rule:Avoidunsynchronizedlazyinitializationofnon-volatilestaticfield.
Reason:Avoidunsynchronizedlazyinitializationofnon-volatilestaticfield.
UsageExample:
packagecom.rule; publicclassAvoid_Lazy_initialization_of_unsynchronized_static_field_violation { privatestaticSingletoninstance=null; publicstaticSingletongetInstance() { if(instance==null) instance=newSingleton();//Violation returninstance; } }
Shouldbewrittenas:
Reference:http://www.cs.umd.edu/users/pugh/java/memoryModel/jsr-133-faq.html
Severity:HighRule:Avoidusingvolatilemodifierforarray.Reason:Avoidusingvolatilemodifierforarray.
UsageExample:
packagecom.rule; publicclassAvoid_using_volatile_modifier_for_array_violation { publicstaticvolatileinti=10; publicstaticvolatileint[]array={10,20,30}; //Violation. }
Shouldbewrittenas:
Reference:Referencenotavailable.
Severity:CriticalRule:Avoidsynchronizationonobjectswhosereferencesaremutable.Reason:Avoidsynchronizationonobjectswhosereferencesaremutable.
UsageExample:
packagecom.rule; publicclassAvoid_synchronization_on_mutable_field_violation { MyClassmyClass=newMyClass(); publicvoidfoo() { synchronized(myClass)//Violation { //... } } }
Shouldbewrittenas:
Avoidsynchronizationonobjectswhosereferencesaremutable.
Reference:Referencenotavailable.
Severity:Low
Rule:Avoidmethodsinsameclasswhichdifferonlyincase.
Reason:Avoidmethodsinsameclasswhichdifferonlyincase.
UsageExample:
packagecom.rule; publicclassAvoid_methods_with_closely_similar_names_violation { publicvoidmethod() { } publicvoidMethod()//VIOLATION { } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_methods_with_closely_similar_names_correction { publicvoidmethod1() { } publicvoidmethod2()//CORRECTION { } }
Reference:Referencenotavailable.
Severity:Medium
Rule:TheobjectspassedtosomeofthemethodsneedtobeSerializable.
Reason:TheobjectspassedtosomeofthemethodsneedtobeSerializable.
UsageExample:
packagecom.rule; importjava.io.IOException; importjava.io.ObjectOutputStream; importjava.io.OutputStream; publicclassUse_serializable_objects_as_argument_violation { publicvoidmethod1(ObjectOutputStreamoos)throwsException { oos.writeObject(this);//VIOLATION } classUSOAAV_ObjectOutputStreamextendsObjectOutputStream { USOAAV_ObjectOutputStream(OutputStreamos)throwsIOException { super(os); } } }
Shouldbewrittenas:
packagecom.rule; importjava.io.IOException; importjava.io.ObjectOutputStream; importjava.io.OutputStream; publicclassUse_serializable_objects_as_argument_correctionimplementsSerializable//Correction { publicvoidmethod1(ObjectOutputStreamoos)throws Exception { oos.writeObject(this); } classUSOAAV_ObjectOutputStreamextendsObjectOutputStream { USOAAV_ObjectOutputStream(OutputStreamos)throwsIOException { super(os); } } }
Reference:Noreferenceavailable.
Severity:High
Rule:ThemethodsofAppletthatuseAppletStubshouldnotbecalledfromconstructor.
Reason:ThemethodsofAppletthatuseAppletStubshouldnotbecalledfromconstructor.
UsageExample:
packagecom.rule; importjava.applet.Applet; publicclassDo_not_call_methods_that_use_AppletStub_violationextendsApplet { privateStringdocBase; publicDo_not_call_methods_that_use_AppletStub_violation() { docBase=getDocumentBase().toString();//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; importjava.applet.Applet; publicclassDo_not_call_methods_that_use_AppletStub_correctionextendsApplet { privateStringdocBase; publicvoidinit()//CORRECTION { docBase=getDocumentBase().toString(); } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/applet/AppletStub.html
Severity:Critical
Rule:ThisistheconventiontobefollowedforthereadResolvemethodtoberecognizedbytheserializationmechanism.
Reason:ThisistheconventiontobefollowedforthereadResolvemethodtoberecognizedbytheserializationmechanism.
UsageExample:
importjava.io.ObjectStreamException; importjava.io.Serializable; publicclassTestimplementsSerializable { publicTestreadResolve()throwsObjectStreamException//VIOLATION { returnnull; } }
Shouldbewrittenas:
importjava.io.ObjectStreamException; importjava.io.Serializable; publicclassTestimplementsSerializable { publicObjectreadResolve()throwsObjectStreamException//VIOLATION { returnnull; } }
Reference:NotAvailable.
Severity:High
Rule:DonotcallsetSizemethodinsidethecomponentResizedmethod
Reason:DonotcallsetSizemethodinsidethecomponentResizedmethod
UsageExample:
packagecom.rule; importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.Component; importjava.awt.Frame; importjava.awt.Panel; importjava.awt.event.ComponentAdapter; importjava.awt.event.ComponentEvent; publicclassAvoid_setSize_in_componentResized_violationextendsFrame { publicAvoid_setSize_in_componentResized_violation() { Panelpan=newPanel(); pan.setBackground(Color.blue); this.add(pan,BorderLayout.CENTER); pan.addComponentListener(newComponentAdapter(){ publicvoidcomponentResized(ComponentEvente) { setSize(); Frameparent=Avoid_setSize_in_componentResized_violation.this; parent.setSize(200,200); //VIOLATION parent.validate(); } publicvoidsetSize() { } }); this.addComponentListener(newComponentAdapter(){ publicvoidcomponentResized(ComponentEvente) { e.getComponent().setSize(10,10); //VIOLATION ((Component)e.getSource()).setSize(20,20); //VIOLATION setSize(100,100); //VIOLATION } }); } }
Shouldbewrittenas:
RemovecallstosetSizemethodsfromcomponentResizedmethod.
Reference:ReferenceNotAvailable.
Severity:Medium
Rule:AvoidunnecessarycalltoMath.ceil().
Reason:AvoidunnecessarycalltoMath.ceil().
UsageExample:
packagecom.rule; publicclassAvoid_unnecessary_call_to_Math_ceil_violation { publicvoidmethod() { inti=10; doubleresult=Math.ceil((double)i); //Violation } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_unnecessary_call_to_Math_ceil_correction { publicvoidmethod() { doublei=10.2; doubleresult=Math.ceil(i); //Correction } }
Reference:Referencenotavailable.
Severity:Medium
Rule:AvoidunnecessarycalltoamethodofMathclass.
Reason:AvoidunnecessarycalltoamethodofMathclass.
UsageExample:
packagecom.rule; publicclassAvoid_unnecessary_call_to_Math_class_method_violation { publicstaticfinaldoubleNUMBER=-10.2; publicvoidmethod() { doubled=Math.abs(NUMBER); //Violation. } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_unnecessary_call_to_Math_class_method_correction { publicstaticfinaldoubleNUMBER=-10.2; publicstaticfinaldoubleABSNUMBER=10.2; publicvoidmethod() { doubled=ABSNUMBER; //Correction. } }
Reference:Referencenotavailable.
Severity:Low
Rule:Thereturnvalueofthemethodcallshouldnotbeignored.
Reason:Thereturnvalueofthemethodcallshouldnotbeignored.
UsageExample:
packagecom.rule; publicclassAlways_use_method_return_values { publicvoidfubar() { StringsomeString=getString(); someString.trim(); } privateStringgetString() { return"hello"; } }
Shouldbewrittenas:
packagecom.rule; publicclassAlways_use_method_return_values { publicvoidfubar() { StringsomeString=getString(); someString=someString.trim(); } privateStringgetString() { return"hello"; } }
Reference:Noreferenceavailable.
Severity:Low
Rule:ThereturnvalueofthemethodcallInputStream.read(byte[]b)andInputStream.read(byte[]b,intoff,intlen)shouldalwaysbechecked.
Reason:ThereturnvalueofthemethodcallInputStream.read(byte[]b)andInputStream.read(byte[]b,intoff,intlen)shouldalwaysbechecked.
UsageExample:
packagecom.rule; importjava.io.InputStream; importjava.io.FileInputStream; importjava.io.IOException; publicclassAlways_check_return_value_of_input_stream_read_violation { publicvoidmethod() { InputStreamin=null; try { in=newFileInputStream("Filename.txt"); in.read(b,3,10); //Violation. } catch(IOExceptionioe) { //HandleException. } finally { in.close(); } } }
Shouldbewrittenas:
packagecom.rule; importjava.io.InputStream; importjava.io.FileInputStream; importjava.io.IOException; publicclassAlways_check_return_value_of_input_stream_read_correction { publicvoidmethod() { InputStreamin=null; try { in=newFileInputStream("Filename.txt"); inti=in.read(b,3,10); //Correction //Checkvalueofi. } catch(IOExceptionioe) { //HandleException. } finally { in.close(); } } }
Reference:Referencenotavailable.
Severity:Low
Rule:ThereturnvalueofthemethodcallInputStream.skip(longn)shouldalwaysbechecked.
Reason:ThereturnvalueofthemethodcallInputStream.skip(longn)shouldalwaysbechecked.
UsageExample:
packagecom.rule; importjava.io.InputStream; importjava.io.FileInputStream; importjava.io.IOException; publicclassAlways_check_return_value_of_input_stream_skip_violation { publicvoidmethod() { InputStreamin=null; try { longcount=100000; in=newFileInputStream("Filename.txt"); in.skip(count); //Violation. } catch(IOExceptionioe) { //HandleException. } finally { in.close(); } } }
Shouldbewrittenas:
packagecom.rule; importjava.io.InputStream; importjava.io.FileInputStream; importjava.io.IOException; publicclassAlways_check_return_value_of_input_stream_skip_correction { publicvoidmethod() { InputStreamin=null; try { longcount=100000; in=newFileInputStream("Filename.txt"); inti=in.skip(count); //Correction //Checkvalueofi. } catch(IOExceptionioe) { //HandleException. } finally { in.close(); } } }
Reference:Referencenotavailable.
Severity:Low
Rule:TheconditionshouldcheckwhetherindexOfreturnsnegativeornon-negativevalue.
Reason:TheconditionshouldcheckwhetherindexOfreturnsnegativeornon-negativevalue.
UsageExample:
publicclassSomeClass { publicvoidaMethod() { Strings="hello"; if(s.indexOf("e")>0)//VIOLATION { //... } if(s.indexOf("s")<1)//VIOLATION { //... } if(s.indexOf("h")>=1)//VIOLATION { //.... } If(s.indexOf("o")<=0)//VIOLATION { //... } } }
Shouldbewrittenas:
publicclassSomeClass { publicvoidaMethod() { Strings="hello"; if(s.indexOf("e")>=0) { //... } if(s.indexOf("s")==-1) { //... } if(s.indexOf("h")!=-1) { //.... } If(s.indexOf("o")==-1) { //... } } }
Reference:Referencenotavailable.
Severity:Low
Rule:Thiscodecallsequalsonanobjectofafinalclasswhichdoesn'thaveequals()methodoverriden.
Reason:Thiscodecallsequalsonanobjectofafinalclasswhichdoesn'thaveequals()methodoverriden.
UsageExample:
publicfinalclassTest { publicvoidcheck(Testne) { if(ne.equals(this))//VIOLATION { System.out.println("it'sequal"); } } }
Shouldbewrittenas:
CheckifequalsneedstobeoverrideninclassTestornot.
Reference:Noreferencesavailable.
Severity:Critical
Rule:Possibleinfiniterecursion.
Reason:Possibleinfiniterecursion.
UsageExample:
packagecom.rule; importcom.appperfect.common.dstruct.Color; importcom.appperfect.common.dstruct.Font; publicclassPossible_infinite_recursion_violation { publicvoidshowMessage(Strings,Fontf) { showMessage(s,f,null); } publicvoidshowMessage(Strings,Fontf,Colorfg) { showMessage(s,f,fg);//Violation } publicvoidshowMessage(Strings,Fontf,Colorfg,Colorbg) { //..codethatrendersactually } }
Shouldbewrittenas:
Nocorrectionavailable.
Reference:Referencenotavailable.
Severity:Critical
Rule:Possibleinfiniteloop.
Reason:Possibleinfiniteloop.
UsageExample:
importjava.util.List; importjava.util.Iterator; publicclassTest { publicvoidmethod(Listl) { booleanbool=true; do { //... }while(bool);//VIOLATION Iteratoriter; for(iter=l.iterator();iter.hasNext();)//VIOLATION { //... } while(true)//VIOLATION { //... } } }
Shouldbewrittenas:
importjava.util.List; importjava.util.Iterator; publicclassTest { publicvoidmethod(Listl) { booleanbool=true; do { //... bool=false;//FIXED }while(bool); Iteratoriter; for(iter=l.iterator();iter.hasNext();) { //... System.err.println(iter.next());//FIXED } while(true) { //... break;//FIXED } } }
Reference:NotAvailable.
Severity:Medium
Rule:ThisinstanceOfcheckwillalwaysreturnfalse.
Reason:ThisinstanceOfcheckwillalwaysreturnfalse.
UsageExample:
importjava.util.ArrayList; importjava.util.Collection; importjava.util.Vector; publicclassTest { publicstaticvoidmain(String[]args) { Collections=newArrayList(); if(sinstanceofVector)//VIOLATION { //... } else { //... } } }
Shouldbewrittenas:
Reference:Noreferencesavailable.
Severity:MediumRule:Fields,methods,andtypesthatarenot"private"andnot"static"areuselessiftheonlyconstructorsavailableareprivate.Reason:Fields,methods,andtypesthatarenot"private"andnot"static"areuselessiftheonlyconstructorsavailableareprivate.
UsageExample:
publicclassTest//VIOLATION { privatestaticTest_test; privateTest() { } publicTestgetInstance() { if(_test==null) { _test=newTest(); } return_test; } }
Shouldbewrittenas:
publicclassTest//FIXED { privateTest_test; privateTest() { } publicstaticTestgetInstance() { if(_test==null) { _test=newTest(); } return_test; } }
Reference:NotAvailable.
Severity:Low
Rule:Removingitimprovescodereadabilityandmakescodelesserror-prone.
Reason:Removingitimprovescodereadabilityandmakescodelesserror-prone.
UsageExample:
publicclassTest { publicvoidmethod()throwsException { try { //... } catch(Exceptione)//VIOLATION { throwe; } } }
Shouldbewrittenas:
publicTest { publicvoidmethod()throwsException { //FIXED:try-catchstatementisremoved //... } }
Reference:NotAvailable.
Severity:Critical
Rule:Whenanarrayisdeclaredwithanegativedimenson,aNegativeArraySizeExceptionwouldbethrown.
Reason:Whenanarrayisdeclaredwithanegativedimenson,aNegativeArraySizeExceptionwouldbethrown.
UsageExample:
publicclassTest { privatestaticfinalintA_SIZE=10; privatestaticfinalintB_SIZE=15; privatestaticint[]diffSet=newint[A_SIZE-B_SIZE];//VIOLATION }
Shouldbewrittenas:
publicclassTest { privatestaticfinalintA_SIZE=10; privatestaticfinalintB_SIZE=15; privatestaticint[]diffSet=newint[A_SIZE-B_SIZE>=0?A_SIZE-B_SIZE:0];//FIXED }
Reference:NotAvailable.
Severity:Medium
Rule:Useequals()insteadof'=='operator.
Reason:Useequals()insteadof'=='operator.
UsageExample:
packagecom.rule; publicclassUseEqualsInsteadEqualityOperator_Violation { privatevoidfoo() { Stringstr="compare"; Stringtemp=newString("compare"); if(str==temp)//Violation { //... } } }
Shouldbewrittenas:
packagecom.rule; publicclassUseEqualsInsteadEqualityOperator_Correction { privatevoidfoo() { Stringstr="compare"; Stringtemp=newString("compare"); if(str.equals(temp))//Correction { //... } } }
Reference:http://www.devx.com/tips/Tip/14219
Severity:Medium
Rule:Possiblespellingmistakewhileoverridingmethod.
Reason:Possiblespellingmistakewhileoverridingmethod.
UsageExample:
packagecom.rule; publicclassPossible_spelling_mistake_while_overriding_method_violation { publicStringToString()//VIOLATION { returnsuper.toString(); } }
Shouldbewrittenas:
packagecom.rule; publicclassPossible_spelling_mistake_while_overriding_method_correction { publicStringtoString()//CORRECTION { returnsuper.toString(); } }
Reference:ReferenceNotAvailable.
Severity:Critical
Rule:TheindexforgetandupdatemethodsofResultSetstartsfrom1.
Reason:TheindexforgetandupdatemethodsofResultSetstartsfrom1.
UsageExample:
packagecom.rule; importjava.sql.ResultSet; importjava.sql.SQLException; publicclassDo_not_use_zero_as_index_with_ResultSet_violation { publicStringgetName(ResultSetrs)throwsSQLException { returnrs.getString(0);//VIOLATION } publicvoidsetName(ResultSetrs,Stringname)throwsSQLException { rs.updateString(0,name);//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; importjava.sql.ResultSet; importjava.sql.SQLException; publicclassDo_not_use_zero_as_index_with_ResultSet_correction { publicStringgetName(ResultSetrs)throwsSQLException { returnrs.getString(1);//CORRECTION } publicvoidsetName(ResultSetrs,Stringname)throwsSQLException { rs.updateString(1,name);//CORRECTION } }
Reference:http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/resultset.html
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html
Severity:Critical
Rule:TheindexforthesettersofPreparedStatementstartfrom1.
Reason:TheindexforthesettersofPreparedStatementstartfrom1.
UsageExample:
importjava.sql.PreparedStatement; importjava.sql.SQLException; publicclassTest { publicvoidsetName(PreparedStatementps,Stringname)throwsSQLException { ps.setObject(0,name);//VIOLATION } }
Shouldbewrittenas:
importjava.sql.PreparedStatement; importjava.sql.SQLException; publicclassTest { publicvoidsetName(PreparedStatementps,Stringname)throwsSQLException { ps.setObject(1,name);//FIXED } }
Reference:NotAvailable.
Severity:High
Rule:Alwayscallwaitfromwithinawhileordo-whileloop.
Reason:Alwayscallwaitfromwithinawhileordo-whileloop.
UsageExample:
packagecom.rule; publicclassAlwaysCall_wait_inside_while_or_doWhile_loop_Violation { intavailable=0; synchronizedpublicvoidconsume() { try { if(available<0) { wait();//VIOLATION } } catch(InterruptedExceptione) { //consume } } }
Shouldbewrittenas:
packagecom.rule; publicclassAlwaysCall_wait_inside_while_or_doWhile_loop_Correction { intavailable=0; synchronizedpublicvoidconsume() { try { while(available<0) { wait();//CORRECTION } } catch(InterruptedExceptione) { //consume } } }
Reference:http://today.java.net/cs/user/create/cs_msg?x-lr=cs_msg/7296&x-lr2=a/131
Severity:High
Rule:Iftheobjectisusedformultipleconditions,theconditionthecallerintendedtowaitformightnotbetheonethatactuallyoccurred.
Reason:Iftheobjectisusedformultipleconditions,theconditionthecallerintendedtowaitformightnotbetheonethatactuallyoccurred.
UsageExample:
publicclassTest { voidfubar(Conditioncond)throwsInterruptedException//VIOLATION { cond.await(); } }
Shouldbewrittenas:
publicclassTest { intx; voidfubar(Conditioncond)throwsInterruptedException { while(x==0) { cond.wait();//FIXED } } }
Reference:NotAvailable.
Severity:High
Rule:Avoidusingwait(),notify()ornotifyAll()onthe"this"reference.
Reason:Avoidusingwait(),notify()ornotifyAll()onthe"this"reference.
UsageExample:
importjava.util.*; publicclassTestextendsThread { ArrayListobjects=newArrayList(); publicstaticvoidmain(String[]args) { finalTesttest=newTest(); Threadt1=newThread() { publicvoidrun() { try { test.add(newObject()); } catch(InterruptedExceptione) { e.printStackTrace(); } } }; t1.start(); Threadt2=newThread() { publicvoidrun() { try { test.add(newObject()); } catch(InterruptedExceptione) { e.printStackTrace(); } } }; t2.start(); } publicsynchronizedvoidadd(Objectobj)throwsInterruptedException { while(objects.size()==10) { wait();//VIOLATION } objects.add(obj); if(objects.size()==1) { notify(); } } }
Shouldbewrittenas:
Considerusingaprivatemembervariabletocontrolsynchronization.
Reference:Noreferenceavailable.
Severity:High
Rule:ThestaticmethodinterruptedinThreadclassshouldnotbecalledonathreadobject.
Reason:ThestaticmethodinterruptedinThreadclassshouldnotbecalledonathreadobject.
UsageExample:
packagecom.rule; publicclassDo_not_call_interrupted_method_on_thread_object_violation { publicvoidmethod(Threadth) { booleanb=th.interrupted();//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; publicclassDo_not_call_interrupted_method_on_thread_object_correction { publicvoidmethod(Threadth) { booleanb=th.isInterrupted();//CORRECTION } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#interrupted()
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#isInterrupted()
Severity:Low
Rule:Avoidunnecessarycomparisonoftworeferenceswhicharedefinitelynull.
Reason:Avoidunnecessarycomparisonoftworeferenceswhicharedefinitelynull.
UsageExample:
publicclassTest { publicvoidfubar() { Objectob1=null; Objectob2=null; //... if(ob1!=ob2)//VIOLATION { //... } } }
Shouldbewrittenas:
Checkiftheob1andob2aretoalwaysremainnull,thentheconditioncanberemoved.
Reference:NotAvailable.
Severity:Low
Rule:Avoidunnecessarycomparisonoftworeferenceswhereoneisdefinitelynonnullandtheotherisdefinitelynull.
Reason:Avoidunnecessarycomparisonoftworeferenceswhereoneisdefinitelynonnullandtheotherisdefinitelynull.
UsageExample:
publicclassTest { publicvoidfubar() { Objectob1=null; Objectob2=null; //... ob2=newObject(); //... if(ob1==ob2)//VIOLATION { //... } } }
Shouldbewrittenas:
Ifonevalueisalwaysgoingtobenullandtheotheralwaysnon-null,thentheconditioncanberemoved.
Reference:NotAvailable.
Severity:Medium
Rule:Thiswillreturnaconstantvalue.
Reason:Thiswillreturnaconstantvalue.
UsageExample:
publicclassTest { intmethod(intx) { for(inti=0;i<=Integer.MAX_VALUE;i++)//VIOLATION { if(i*i==x) { returni; } } return0; } intmethod2(intx) { if(x<0||x>Integer.MAX_VALUE)//VIOLATION { return-1; } returnx; } }
Shouldbewrittenas:
Pleaserecheckcondition.
Reference:NotAvailable.
Severity:Low
Rule:Thestart()methodofathreadshouldnotbecalledinit'sconstructor.
Reason:Thestart()methodofathreadshouldnotbecalledinit'sconstructor.
UsageExample:
packagecom.rule; publicclassDo_not_start_Thread_in_constructor_violation { voidmethod() { newThread_sub(); } classThread_subextendsThread { publicThread_sub() { start();//VIOLATION } } }
Shouldbewrittenas:
packagecom.rule; publicclassDo_not_start_Thread_in_constructor_correction { voidmethod() { newThread_sub().start();//CORRECTION:calltostart()movedhere } classThread_subextendsThread { publicThread_sub() { //CORRECTION:calltostart()ismovedtowhereobjectiscreated } } }
Reference:https://lists.xcf.berkeley.edu/lists/advanced-java/2001-April/016440.html
Severity:Low
Rule:Classesorinterfaceshavingsamenameasjavafileshouldbedeclaredaspublic.
Reason:Classesorinterfaceshavingsamenameasjavafileshouldbedeclaredaspublic.
UsageExample:
filename:MyFile.java classMyFile//VIOLATION {}
Shouldbewrittenas:
filename:MyFile.java publicclassMyFile//CORRECTION {}
Reference:Noreferencesavailable.
Severity:Low
Rule:Atleastoneclassorinterfaceshouldhavethesamenameasthejavafileinwhichitisdeclared.
Reason:Atleastoneclassorinterfaceshouldhavethesamenameasthejavafileinwhichitisdeclared.
UsageExample:
filename:MyClass.java classMyClass_//VIOLATION { }
Shouldbewrittenas:
filename:MyClass.java classMyClass//CORRECTION { }
Reference:Norefrerencesavailable.
Severity:Medium
Rule:Avoidreturningthisfromamethod.
Reason:Avoidreturningthisfromamethod.
UsageExample:
packagecom.rule; publicclassAvoid_returning_this_violation { publicAvoid_returning_this_violationmethod1() { returnthis;//VIOLATION } publicvoidmethod2() { //somethingsynchronized } publicstaticvoidmain(String[]args) { Avoid_returning_this_violationa=newAvoid_returning_this_violation(); a.method1().method2(); } }
Shouldbewrittenas:
packagecom.rule; publicclassAvoid_returning_this_correction { publicvoidmethod1() { return;//CORRECTION } publicvoidmethod2() { //somethingsynchronized } publicstaticvoidmain(String[]args) { Avoid_returning_this_correctiona=newAvoid_returning_this_correction(); a.method1(); a.method2(); } }
Reference:http://gee.cs.oswego.edu/dl/html/javaCodingStd.html#secRec
Severity:Medium
Rule:CallinggetResource()ontheclassreturnedbygetClass()mightcauseunexpectedresults.
Reason:CallinggetResource()ontheclassreturnedbygetClass()mightcauseunexpectedresults.
UsageExample:
packagecom.rule; importjava.net.URL; publicclassAvoid_calling_getResource_on_getClass_violation { publicURLloadResource(Stringstr) { returnthis.getClass().getResource(str);//VIOLATION } }
Shouldbewrittenas:
packagecom.rule; importjava.net.URL; publicclassAvoid_calling_getResource_on_getClass_correction { publicURLloadResource(Stringstr) { returnAvoid_calling_getResource_on_getClass_correction.class.getResource(str);//CORRECTION } }
Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getResource(java.lang.String)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)
Severity:Critical
Rule:Thereshouldbeatleastonenon-private,staticmethodintheclasshavingonlyprivateconstructors
Reason:Thereshouldbeatleastonenon-private,staticmethodintheclasshavingonlyprivateconstructors
UsageExample:
packagecom.rule; classNon_instantiable_class_should_contain_non_private_static_member_violation { privateNon_instantiable_class_should_contain_non_private_static_member_violation() { } privatestaticintgetValue()//VIOLATION { return1; } }
Shouldbewrittenas:
packagecom.rule; classNon_instantiable_class_should_contain_non_private_static_member_correction { privateNon_instantiable_class_should_contain_non_private_static_member_correction() { } staticintgetValue()//CORRECTION { return1; } }
Reference:ReferenceNotAvailable.
Severity:High
Rule:Donotoverridesynchronizedmethodwithunsynchronizedmethod.
Reason:Donotoverridesynchronizedmethodwithunsynchronizedmethod.
UsageExample:
packagecom.rule; publicclassDo_not_override_synchronized_method_with_unsynchronized_method_violation { publicsynchronizedvoidfoo() {} } classchild { publicvoidfoo(){}//Violation }
Shouldbewrittenas:
packagecom.rule; publicclassDo_not_override_synchronized_method_with_unsynchronized_method_correction { publicsynchronizedvoidfoo() {} } classchild { publicsynchronizedvoidfoo() {}//Correction }
Reference:Referencenotavailable.