Go to the Contract4J web-page and download the latest release. In my case it is ... Selecting the JAR files to add to th
!"##$%&'(#)*#"+',$#-'./%#*)0#12 34 56)%'7'8*$9:)% ;"*:$/%?@'>AAB
./C4*$&-#'>AAB'56)%'7'8*$9:)%D'7EE'F$&-#:'F":"*6"+D'
G
!"#$%&'(&)'*+%*+, H)3E"'/I'./%#"%#:DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD> JK*C/:"'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL M$0"%:$%&'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL N$:0E)$O"*:'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL J*"*"PK$:$#":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL N/,%E/)+$%&'./%#*)0#12DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD1 QK$E+$%&'#-"'./%#*)0#12'M$3*)*4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDR .*")#$%&'#-"'J*/S"0#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDR 7++$%&'(/K*0"'./+"')%+'M$3*)*$":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB ./%I$&K*$%&'#-"'QK$E+'J)#-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD? .*")#$%&'#-"'M$3*)*4'27F'T$E"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG> U:$%&'./%#*)0#12DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 .*")#$%&'#-"'J*/S"0#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 7++$%&'M$3*)*$":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 ./%I$&K*$%&'#-"'QK$E+'J)#-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 V*$#$%&')%'WX)OCE"'J*/&*)ODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGB H-"'=4Q")%'.E)::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGB H-"'=)$%'.E)::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG? FK%%$%&'#-"'WX)OCE"'J*/&*)ODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG?
>
-./0',%& H-$:'+/0KO"%#')$O:'#/'+":0*$3"'-/,'#/'&"##$%&':#)*#"+',$#-'./%#*)0#12@')'#//E'#-)#':KCC/*#:'+":$&%' 34'0/%#*)0#'C*/&*)OO$%&'$%'2)6)'Y')%+'E)#"*D
123%*,2*4& H-$:'+/0KO"%#'$:'E$0"%:"+'K%+"*')'.*")#$6"'./OO/%:'7##*$3K#$/%Z[/%0/OO"*0$)EZ(-)*"'7E$\"'LDA' M$0"%:"D'
52,3$"26%/,& H-/K&-'5'-)6"'+/%"'O4'3":#'#/')6/$+'$#@'#-$:'+/0KO"%#'O$&-#'0/%#)$%'"**/*:D'5'0)%%/#'3"'-"E+' *":C/%:$3E"'I/*')%4'"II"0#:'0)K:"+@'+$*"0#E4'/*'$%+$*"0#E4@'34'#-"'$%I/*O)#$/%'$%'#-$:'+/0KO"%#']'4/K' )*"'K:$%&'$#'/%'4/K*'/,%'*$:\D' (K3O$##$%&')%4':K&&":#$/%:@'/*':$O$E)*@'#-"'$%I/*O)#$/%':K3O$##"+'3"0/O":'O4'C*/C"*#4')%+'4/K' &$6"'O"'#-"'*$&-#'#/'K:"'#-"'$%I/*O)#$/%'$%',-)#"6"*',)4'5'I$%+':K$#)3E"@',$#-/K#'0/OC"%:)#$%&'4/K' $%')%4',)4D' 7EE'#*)+"O)*\:'$%'#-$:'+/0KO"%#')*"'C*/C"*#$":'/I'#-"$*'*":C"0#$6"'/,%"*')%+'+/'%/#'$OCE4' "%+/*:"O"%#'/I')%4'\$%+D' H-$:'+/0KO"%#'-):'3""%',*$##"%'$%'O4':C)*"'#$O"')%+'-):'%/'0/%%"0#$/%',-)#:/"6"*',$#-'O4' "OCE/4"*D'
-/%/%7.2,2+%, 7EE'+"6"E/CO"%#'$%'#-$:'+/0KO"%#',):'+/%"'K:$%&'W0E$C:"'LDLD>',$#-'7:C"0#2'+"6"E/CO"%#'#//E:' GDYD>@',-$0-'K:":'7:C"0#2'GDRDAD
L
5'8*$'"92*4&)'*+/"3+:; !/'#/'#-"'./%#*)0#12',"3ZC)&"')%+'+/,%E/)+'#-"'E)#":#'*"E"):"D'5%'O4'0):"'$#'$:'./%#*)0#12Y'ADBAD U%C)0\'#-"')*0-$6"')%+'#-*/,'),)4'#-"'./%#*)0#12'E$3*)*4'I$E"'%)O"+'^0/%#*)0#1SYDS)*_D
H-"'E/0)#$/%'/I'#-"'./%#*)0#12'E$3*)*4'I$E"'$%'#-"'K%C)0\"+'./%#*)0#12'+$:#*$3K#$/%D
V-4'#-*/,'),)4'#-"'./%#*)0#12'E$3*)*4` H-"'6"*:$/%'/I'./%#*)0#12'5'+/,%E/)+"+@'./%#*)0#12Y'ADBA@',):')CC)*"%#E4'0/OC$E"+',$#-'7:C"0#2' GDY@',-$0-'*"&*"#IKEE4'$:'$%0/OC)#$3E"',$#-'7:C"0#2'GDR@',-$0-'5')O'K:$%&@')#'#-"'#$O"'/I',*$#$%&'#-$:' +/0KO"%#D
1
W**/*:'E$\"'#-"'I/EE/,$%&',$EE'/00K*@',-"%'#*4$%&'#/'K:"'#-"'/*$&$%)E'E$3*)*4
A_m H-$:')%%/#)#$/%'+"0E)*":'#-"'0/%#*)0#'I/*'#-"'O./K%#'$%:#)%0"'6)*$)3E"')%+':C"0$I$":'#-"' O"::)&"'#-)#',$EE'3"'&$6"%'$I'#-$:'0/%#*)0#'$:'3*/\"%D ! gJ*"h6)EK"in$%(#*$%&'di'%KEE'kk'$%(#*$%&D:$9"hm'j'Anm H-$:')%%/#)#$/%'+"0E)*":')'C*"Z0/%+$#$/%'0/%#*)0#'#/'#-"''$()(*+&,'O"#-/+@',-$0-':)4:'#-)#' #-"':KCCE$"+':#*$%&'OK:#'%/#'3"'%KEE')%+'OK:#'%/#'3"')%'"OC#4':#*$%&D
GB
!=%&@"2*&)$",, H-"'!%+&'0E)::'0*")#":')%'$%:#)%0"'/I'#-"'!"#$%&'0E)::')%+'#*$":'#/':"#':/O"'6)EK":'#-)#',$EE'6$/E)#"' #-"'0/%#*)0#:'#-)#',"*"':C"0$I$"+D package com.ivan; public class Main { public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(25); theBean.setString("");
}
}
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'!%+&'0E)::'/I'#-"'"X)OCE"'C*/&*)O'#-)#'K:":'./%#*)0#12D
@2''&'()%*#)?8#)+",("$> [/':C"0$)E'C*"C)*)#$/%:')*"'%""+"+'$%'/*+"*'#/'*K%'#-"'"X)OCE"'C*/&*)O@'SK:#'*$&-#Z0E$0\'/%'#-"' C*/S"0#')%+':"E"0#'FK%'7:')%+'#-"%'7:C"0#2o2)6)'7CCE$0)#$/%@'):':-/,%'$%'#-"'I/EE/,$%&'C$0#K*"D
FK%%$%&'#-"'"X)OCE"'C*/&*)OD
G?
5%'#-$:'I$*:#'6"*:$/%@'#-"'C*/&*)O',$EE'&"%"*)#"'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default [FATAL] DefaultContractEnforcer: *** Contract Failure (MyBean.java:41): Invar test "mCount > 0 && mCount < 20" for "com.ivan.MyBean" failed. Count must be between 1 and 20 [failure cause = null] Exception in thread "main" org.contract4j5.errors.ContractError: *** Contract Failure (MyBean.java:41): Invar test "mCount > 0 && mCount < 20" for "com.ivan.MyBean" failed. Count must be between 1 and 20 [failure cause = null] at org.contract4j5.enforcer.ContractEnforcerHelper.makeContractError(ContractEnforcerHelper .java:183) at org.contract4j5.enforcer.defaultimpl.DefaultContractEnforcer.finishFailureHandling(Defau ltContractEnforcer.java:29) at org.contract4j5.enforcer.ContractEnforcerHelper.handleFailure(ContractEnforcerHelper.jav a:110) at org.contract4j5.enforcer.ContractEnforcerHelper.invokeTest(ContractEnforcerHelper.java:9 2) at com.ivan.MyBean.mCount_aroundBody5$advice(MyBean.java:190) at com.ivan.MyBean.setCount(MyBean.java:41) at com.ivan.Main.main(Main.java:34)
./%:/E"'/K#CK#'I*/O'#-"'I$*:#')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
V"'0)%':""'#-)#'#-"'+"I)KE#'6)EK":'/I'#-"')##*$3K#":'$%'#-"'$%:#)%0"'/I'#-"'!"#$%&'0E)::')*"'C*$%#"+' /%#/'#-"'0/%:/E"@'3K#'#-"%')%'"X0"C#$/%'/00K*:D'V-"%'./%#*)0#12'+"#"0#:')'3*")0-'/I')'0/%#*)0#@'#-"' C*/&*)O',$EE'$OO"+$)#"E4'3"':#/CC"+')%+')'O"::)&"':C"0$I4$%&',-$0-'0/%#*)0#',):'3*/\"%'/K#CK#' #/'#-"'0/%:/E"D' [/#"'#-"'-$&-E$&-#"+'#"X#@',-$0-'$:'#-"'O"::)&"'#-)#',"'"%#"*"+'$%'#-"'0/%#*)0#D 7E:/'%/#"'#-)#'#-"'E$%"'%KO3"*:'$%'#-"')3/6"'0/%:/E"'/K#CK#'+/'%/#'O)#0-'#-"'E$%"'%KO3"*:'$%'#-"' C*"6$/K:':/K*0"'I$E"D'H-$:':$%0"'O/:#'0/OO"%#:'-)6"'3""%'*"O/6"+'I*/O'#-"':/K*0"'0/+"@'#/' 0/%:"*6"':C)0"'$%'#-$:'+/0KO"%#D H/'*"0#$I4'#-"'0/%#*)0#'3*")0-@'#-"'C)*)O"#"*'/I'#-"''$(-./&('O"#-/+'$:'0-)%&"+'#/'G?D'H-"'0%+&1 O"#-/+'$%'#-"'!%+&'0E)::',$EE'%/,'E//\'E$\"'#-$:< ... public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(19); theBean.setString("");
} ...
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'O/+$I$"+'0%+&'O"#-/+'/I'#-"'!%+&'0E)::D
>A
5I',"'#*4'#/'*K%'#-"'"X)OCE"'C*/&*)O'/%0"')&)$%@'$#',$EE'%/,'&"%"*)#"'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default [FATAL] DefaultContractEnforcer: *** Contract Failure (MyBean.java:50): Pre test "inString != null && inString.size() > 0" for "setString" failed. [failure cause = null] Exception in thread "main" org.contract4j5.errors.ContractError: *** Contract Failure (MyBean.java:50): Pre test "inString != null && inString.size() > 0" for "setString" failed. [failure cause = null] at org.contract4j5.enforcer.ContractEnforcerHelper.makeContractError(ContractEnforcerHelper .java:183) at org.contract4j5.enforcer.defaultimpl.DefaultContractEnforcer.finishFailureHandling(Defau ltContractEnforcer.java:29) at org.contract4j5.enforcer.ContractEnforcerHelper.handleFailure(ContractEnforcerHelper.jav a:110) at org.contract4j5.enforcer.ContractEnforcerHelper.invokeTest(ContractEnforcerHelper.java:9 2) at org.contract4j5.aspects.MethodBoundaryConditions.ajc$before$org_contract4j5_aspects_Meth odBoundaryConditions$1$d79ef325(MethodBoundaryConditions.aj:121) at com.ivan.MyBean.setString(MyBean.java:52) at com.ivan.Main.main(Main.java:35)
./%:/E"'/K#CK#'I*/O'#-"':"0/%+')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
H-$:'#$O"@'%/':C"0$)E'O"::)&"'$:'+$:CE)4"+@':$%0"'%/'O"::)&"',):'+"I$%"+'I/*'#-"'0/%#*)0#'#-)#'-):' 3""%'3*/\"%'#-$:'#$O"D'V"'0)%@'-/,"6"*@':""'#-)#'#-"'0/%#*)0#'3*/\"%'$:'I/*'#-"''$()(*+&,'O"#-/+'$%' #-"'!"#$%&'0E)::D c%0"')&)$%',"'O/+$I4'#-"'0%+&'O"#-/+'/I'#-"'!%+&'0E)::@':/'#-)#'#-"'C)*)O"#"*'#/'#-"''$()(*+&,1 O"#-/+'+/":'%/#'3*")\'#-"'0/%#*)0#'I/*'#-"'O"#-/+D'H-"'0%+&'O"#-/+'%/,'E//\:'E$\"'#-$:< ... public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(19); theBean.setString("test");
} ...
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'O/+$I$"+'0%+&'O"#-/+'/I'#-"'!%+&'0E)::D
7'I$%)E')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'%/,'*"%+"*:'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default AFTER Count = 19 String = test
./%:/E"'/K#CK#'I*/O'#-"'#-$*+')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
[/'0/%#*)0#:')*"'3*/\"%')%+'#-"'"X)OCE"'C*/&*)O'0)%'"X"0K#"'%/*O)EE4D
>G