Bonjour !

je suis un débutant en java et je souhaite utiliser JContractor (http://jcontractor.sourceforge.net/) et pas un autre mode de programation par contrat...

j'ai créé un petit programme tout simple avec une classe instrumentée. les voici
La class main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class main_with_problem 
{
	/**
         * @param args
         */
	public static void main(String[] args) 
	{
		@SuppressWarnings("unused")
		double result = 0;
		Operations Op = new Operations();
 
		result = Op.sqrt(-4.0);
 
	}
}
la class "Operations" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
public class Operations
{
	public double sqrt(double value)
	{
		return Math.sqrt(value);
	}
}
les contrats de la classe "Operations"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class Operations_CONTRACT extends Operations
{
	protected boolean _Invariant()
	{
		System.out.println("=== Invariant ===");
		return true;
	}
 
	protected boolean sqrt_PostCondition (double value)
	{
		System.out.println("=== PostCondition ===");
		return value > 0;
	}
 
	protected boolean sqrt_PreCondition (double value)
	{
		System.out.println("=== PreCondition ===");
		return value > 0;
	}
}

J'effectue ensuite les opérations suivantes (j'ai volontairement enlevé ici les classpath etc pour que se soit lisible):
javac *.java
java jInstrument Operations.class
java main_with_problem

j'obtiens le resultat suivant:

Instrumenting Operations at 'all' level
=== Invariant ===
=== Invariant ===
=== Invariant ===
Je constate donc que le check d'invariant est bien appellé, mais pas les preconditions et postconditions... Pourquoi ???

Merci d'avance pour votre aide !!!