From: <js...@us...> - 2008-05-09 17:09:03
|
Revision: 49 http://jcontracts.svn.sourceforge.net/jcontracts/?rev=49&view=rev Author: jstuyts Date: 2008-05-09 10:08:59 -0700 (Fri, 09 May 2008) Log Message: ----------- Added some documentation. Modified Paths: -------------- trunk/site/documentation.html Added Paths: ----------- trunk/site/addingContracts.html trunk/site/building.html trunk/site/contractInheritance.html trunk/site/download.html trunk/site/index.html trunk/site/license.html trunk/site/participate.html trunk/site/resources/images/dataflow.gif trunk/site/roadmap.html Removed Paths: ------------- trunk/site/download.html trunk/site/index.html trunk/site/license.html trunk/site/participate.html trunk/site/roadmap.html Added: trunk/site/addingContracts.html =================================================================== --- trunk/site/addingContracts.html (rev 0) +++ trunk/site/addingContracts.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>Documentation - Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu"><a href="index.html">Home</a></li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu"><a href="download.html">Download</a></li> + + <li class="menu"><a href="license.html">License</a></li> + </ul> + + <h1>Adding contracts</h1> + + <h2>Basics</h2> + + <p>Contracts are used to specify the client-visible behavior of an object without saying anything about how this + behavior is implemented. For JContractS contracts are specified as assertions attached to Javadoc tags in Javadoc + comments. There are three types of contracts: preconditions, postconditions and invariants. The purpose of each + type is explained below.</p> + + <p>Multiple Javadoc tags of the same type are allowed. If you specify multiple tags, the tags of the same type + will be evaluated in the order specified. If an assertion fails the following assertions will not be evaluated. + This way assertions can be used that assume the conditions of preceding assertions hold. It works the same as + conditional logical operator where following terms can assume the preceding terms held.</p> + + <p>The assertions are written using standard Java expression with some extensions. The extensions are explained in + following sections.</p> + + <h3>Invariants</h3> + + <p>An invariant describes what assertions must hold during the lifetime of an object. It describes the valid state + of an object. The assertions do not have to hold all the time, it is allowed for a method to temporarily change + the object to an invalid state. But after the method has finished, the object must have a state that is valid + according to the assertions of the invariant. More specifically, the invariant is checked after creation and after + invocation of a public method. This allows protected, package-visible and private methods to change the object as + they see fit.</p> + + <p>The invariant is added to the Javadoc comment of the type. The assertions of an invariant are preceded by the + Javadoc tag <code>@inv</code>. Here is the invariant for a (simple) stack:</p> + + <pre>/** + * @inv getSize() >= 0 + */ +public interface Stack +{ + ... +}</pre> + + <p>This invariant states that the size will always be a non-negative integer.</p> + + <h3>Preconditions</h3> + + <p>A precondition is used to state when it is valid to invoke a method. It is used in addition to the invariant + which must hold for all methods. The precondition usually ensures that a method is only invoked when the object is + in the correct state for that method, and that the parameters passed are valid. A method only has to work + correctly when its precondition holds. If the precondition does not hold then the result of the method is + unpredictable.</p> + + <p>Preconditions are added to the Javadoc comment of methods. They are preceded by the Javadoc tag + <code>@pre</code>. Here is the precondition for method <code>pop()</code> of a stack:</p> + + <pre>/** + * @pre getSize() > 0 + */ +Object pop();</pre> + + <p>This preconditions states that it is only valid to invoke <code>pop()</code> when <code>getSize()</code> + returns a value greater than zero.</p> + + <h3>Postconditions</h3> + + <p>A postcondition states what the correct behavior of a method is. It is used in addition to the invariant which + must hold for all methods. The postcondition usually ensures that a method changes the state of an object + correctly, and that the return value is valid. If the method was called when the precondition held, the method is + required to ensure that its postcondition (and the invariant) will hold.</p> + + <p>Just like preconditions, postconditions are added to the Javadoc comment of methods. Postconditions are + preceded by the Javadoc tag <code>@post</code>. Here is the postcondition of <code>pop()</code>:</p> + + <pre>/** + * @post return != null + */ +Object pop();</pre> + + <p>The postcondition states that <code>pop()</code> will never return a value that is <code>null</code>.</p> + + <h3>Full example</h3> + + <p>Here is the full source code for a simple stack interface:</p> + + <pre>/** + * @inv getSize() >= 0 + */ +public interface Stack +{ + /** + * @post return >= 0 + */ + int getSize(); + /** + * @pre element != null + */ + void push(Object element); + /** + * @pre getSize() > 0 + * @post return != null + */ + Object pop(); +}</pre> + + <h2>Referencing old state</h2> + + <p>It is often very useful to describe the new state of an object in postconditions in terms of its previous + state. Take the postcondition of <code>push(Object)</code> and <code>pop()</code> for example, in addition to the + postconditions that were specified above it is useful to add postconditions that state that the size of the stack + has increased and decreased respectively.</p> + + <p>For this purpose a special expression is present that allows capturing the value of an expression from before + the method invocation. To capture the value of an expression, append <code>@pre</code> to it. Here is the new + postcondition of <code>push(Object)</code>:</p> + + <pre>/** + * @post getSize() == getSize()@pre + 1 + */ +void push(Object element)</pre> + + <p>And here is the extended postcondition of <code>pop()</code>:</p> + + <pre>/** + * @post return != null + * @post getSize() == getSize()@pre - 1 + */ +Object pop()</pre> + + <h2>Logical operators</h2> + + <h3>Implies</h3> + + <p>An operator that is very useful in assertions but is missing from Java is the <i>implies</i> operator. This + operator can be used to state that an expression <i>q</i>, must hold if expression <i>p</i> holds. But if <i>p</i> + does not hold, <i>q</i> is allowed to either hold or not.</p> + + <p>Suppose you have an object that can either be enabled or disabled. When the object is disabled it must have a + reason why it was disabled. Using <i>implies</i> it is easy and intuitive to specify this in the precondition of + the method that changes the state.</p> + + <pre>/** + * @pre !enable implies reason != null + */ +void setState(boolean enable, String reason);</pre> + + <p>Although this operator can also be written as <code>!p || q</code>, it is very useful to have a separate + operator for it because it reveals the intention better. Compare the precondition above with its rewritten + version:</p> + + <pre>/** + * @pre enable || reason != null + */ +void setState(boolean enable, String reason);</pre> + + <h2>Quantifiers</h2> + + <p>Besides single-value fields/parameters collections of values are also used. It must be possible to state + something about the values in these collections too. This requires iterating over a collection in an assertion. As + this is very cumbersome and verbose, additional operators have been added to JContractS to make this easier.</p> + + <p>These operators are called quantifiers and there are two variants: <code>forall</code> and + <code>exists</code>.</p> + + <h3>Forall</h3> + + <p>A <code>forall</code> expression holds if an assertion holds for each and every element in the collection.</p> + + <p>Suppose you have a method that only works on collections of non-negative integers. You can add an assertion to + the precondition that will verify that clients do not pass collections with negative integers:</p> + + <pre>/** + * @pre forall Integer i in values | i.intValue() >= 0 + */ +List squareRoots(List values);</pre> + + <h3>Exists</h3> + + <p>An <code>exists</code> expression holds if an assertion holds for at least one element in the collection.</p> + + <p>Suppose you book groups of people into a hotel, but a group is only allowed to make a reservation if at + least one of them is an adult.</p> + + <pre>/** + * @pre exists Person p in people | p.getAge() >= 18 + */ +void book(Set people);</pre> + + <hr /> + + <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" + src="resources/images/sflogo.png" width="125" /></a></div> + + <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JContractS at SourceForge.net</a></p> + </body> +</html> Added: trunk/site/building.html =================================================================== --- trunk/site/building.html (rev 0) +++ trunk/site/building.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,195 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>Documentation - Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu"><a href="index.html">Home</a></li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu"><a href="download.html">Download</a></li> + + <li class="menu"><a href="license.html">License</a></li> + </ul> + + <h1>Building</h1> + + <h2>Overview</h2> + + <p>When you start using JContractS you have to add a few additional steps to your build process. This is because + JContractS and your other projects need differently built JAR files at different times. Below is a dataflow + diagram of how your Java sources are transformed to, in this case, four sets of compiled classes. Each set has its + own purpose:</p> + + <p><img alt="Data flow from Java sources to multiple sets of compiled classes" + src="resources/images/dataflow.gif" /></p> + + <p>The leftmost branch of the diagram represents the standard compilation of the Java sources. No changes are + needed here. You can use the result of this branch if you do not want to use contracts at all.</p> + + <p>As you can see each configuration of enabled contracts (preconditions and/or postconditions and/or invariants) + needs its own branch of instrumented sources: the 2nd and fourth branches.</p> + + <p>In addition a set of repository classes is generated. The repository classes are used by projects depending on + this project to read the contracts of superclasses without needing access to the source code. The repository + classes are the same for all configurations of enabled contracts.</p> + + <h2>Steps</h2> + + <p>The Java compiler and JContractS in the above diagram have to be applied in the following order:</p> + + <ol> + <li>Java compiler: compile the Java sources to classes without contracts.</li> + + <li>JContractS <i>config</i> (<i>n</i> times): generate the instrumented sources and repository sources.</li> + + <li>Java compiler <i>config</i> (<i>n</i> times): compile the instrumented sources to classes with + contracts.</li> + + <li>Java compiler repo: compile the repository sources to classes.</li> + </ol> + + <h2>Classpaths</h2> + + <p>Each step needs its own specific classpath. What is needed on the classpath is detailed below.</p> + + <h3>Java compiler</h3> + + <p>The following items must be on the classpath passed to the Java compiler:</p> + + <ul> + <li>Classes without contracts of contract-enabled dependencies (the result of the leftmost branch of the + diagram).</li> + + <li>Classes of regular dependencies.</li> + + <li>Destination directory for classes without contracts.</li> + </ul> + + <h3>JContractS <i>config</i></h3> + + <p>The following items must be on the classpath used to run JContractS:</p> + + <ul> + <li>JContractS and log4j.</li> + + <li>Classes with <i>config</i> contracts of contract-enabled dependencies (the result of the 2nd or the 4th + branch of the diagram).</li> + + <li>Repository classes of contract-enabled dependencies, (the result of the 3rd branch of the diagram).</li> + + <li>Classes of regular dependencies.</li> + + <li>Destination directory for classes without contracts.</li> + </ul> + + <h3>Java compiler <i>config</i></h3> + + <p>The following items must be on the classpath passed to the Java compiler:</p> + + <ul> + <li>Classes with <i>config</i> contract of contract-enabled dependencies (the result of the 2nd or the 4th + branch of the diagram).</li> + + <li>Classes of regular dependencies.</li> + + <li>Destination directory for classes with <i>config</i> contracts.</li> + </ul> + + <h3>Java compiler repo</h3> + + <p>The following items must be on the classpath passed to the Java compiler:</p> + + <ul> + <li>Repository classes of contract-enabled dependencies (the result of the 3rd branch of the diagram).</li> + + <li>Destination directory for repository classes.</li> + </ul> + + <h2>Example steps</h2> + + <h3>Project without contract-enabled dependencies (prj1)</h3> + + <p>Java compiler:</p> + + <pre>javac -classpath somelib.jar;target\classes + -sourcepath src + -d target\classes + src\com\acme\prj1\*.java</pre> + + <p>JContractS <i>config</i>:</p> + + <pre>java -classpath jcontracts.jar;log4j.jar;somelib.jar;target\classes + net.sf.jcontracts.icontract.Tool + -m<i>enabled-contracts</i> + -otarget\<i>config</i>-src\@p\@f.java + -ktarget\repo-src\@p + src\*.java</pre> + + <p>Java compiler <i>config</i>:</p> + + <pre>javac -classpath somelib.jar;target\<i>config</i>-classes + -sourcepath target\<i>config</i>-src + -d target\<i>config</i>-classes + target\<i>config</i>-src\com\acme\prj1\*.java</pre> + + <p>Java compiler repo:</p> + + <pre>javac -classpath target\repo-classes + -sourcepath target\repo-src + -d target\repo-classes + target\repo-src\com\acme\prj1\*.java</pre> + + <h3>Project with contract-enabled dependencies (prj2)</h3> + + <p>Java compiler:</p> + + <pre>javac -classpath prj1.jar;somelib.jar;target\classes + -sourcepath src + -d target\classes + src\com\acme\prj2\*.java</pre> + + <p>JContractS <i>config</i>:</p> + + <pre>java -classpath jcontract.jar;log4j.jar;prj1-<i>config</i>.jar;prj1-repo.jar;somelib.jar;target\classes + net.sf.jcontracts.icontract.Tool + -m<i>config</i> + -otarget\<i>config</i>-src\@p\@f.java + -ktarget\repo-src\@p + src\*.java</pre> + + <p>Java compiler <i>config</i>:</p> + + <pre>javac -classpath prj1-<i>config</i>.jar;somelib.jar;target\<i>config</i>-classes + -sourcepath target\<i>config</i>-src + -d target\<i>config</i>-classes + target\<i>config</i>-src\com\acme\prj2\*.java</pre> + + <p>Java compiler repo:</p> + + <pre>javac -classpath prj1-repo.jar;target\repo-classes + -sourcepath target\repo-src + -d target\repo-classes + target\repo-src\com\acme\prj2\*.java</pre> + + <hr /> + + <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" + src="resources/images/sflogo.png" width="125" /></a></div> + + <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JContractS at SourceForge.net</a></p> + </body> +</html> Added: trunk/site/contractInheritance.html =================================================================== --- trunk/site/contractInheritance.html (rev 0) +++ trunk/site/contractInheritance.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>Documentation - Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu"><a href="index.html">Home</a></li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu"><a href="download.html">Download</a></li> + + <li class="menu"><a href="license.html">License</a></li> + </ul> + + <h1>Contract inheritance</h1> + + <h2>The basics</h2> + + <p>The contracts of a base type are automatically inherited by suptypes. This is very straightforward:</p> + + <ul> + <li>the preconditons of methods are inherited by overriding methods;</li> + <li>the postconditons of methods are inherited by overriding methods;</li> + <li>the invariant is inherited by the subtype.</li> + </ul> + + + <p>In addition, subtypes are allowed to extend the contracts of their base types. A subtype can:</p> + + <ul> + <li>make the preconditons less strict (called <i>weakening</i>);</li> + <li>make the postconditons stricter (called <i>strengthening</i>);</li> + <li>extend the invariant with assertions about the new attributes.</li> + </ul> + + <p>Each of these extensions is described below.</p> + + <h2><a name="inheritingMultipleTimes" />Inheriting the same method from multiple types</h2> + + <p>When the same method is inherited from multiple types it is impossible to generate correct pre- + and postconditions for the overriding method. The combination of preconditions (the same effect as + <a href="#weakening">weakening</a>, see below) makes the overriding method too permissive about + parameters passed by clients of the base types. And the combination of postconditions (the same effect + as <a href="#strengthening">strengthening</a>) can cause valid return values for a base type to be + rejected. It is even possible that all return values are rejected because no value can satisfy the + combination of postconditions.</p> + + <p>Because of this issue inheritance of the same method from multiple types is not allowed.</p> + + <p>Here is an example showing how the combination of pre- and postconditions would lead to unwanted + results. This is the method declaration from the first base type:</p> + + <pre>/** + * @pre v >= 10 + * @post return <= 0 + */ +int someCalculation(int v);</pre> + + <p>And this is the method declaration from the second base type:</p> + + <pre>/** + * @pre v <= 0 + * @post return > 100 + */ +int someCalculation(int v);</pre> + + <p>If a class is a subtype of both base types, simply combining the pre- and postconditions will + lead to the following pre- and postcondition:</p> + + <pre>/** + * @pre (v >= 10) | (v <= 0) + * @post (return <= 0) & (return > 100) + */ +public int someCalculation(int v) +{ + ... +}</pre> + + <p>Due to the way the preconditions are combined, a client of the first base type that invokes + <code>someCalculation</code> cannot only pass values greater than or equal to 10, but can also pass values + less than or equal to zero without a problem. However the values less than or equal should not be accepted + because the contract of the first base type does not allow them. If the client does pass values less than or + equal to zero it contains a bug, but this bug cannot detected.</p> + + <p>The combination of postconditions prevents this method from returning any result at all as there is no + integer that is both less than or equal to zero, and greater than one hundred.</p> + + <h2><a name="weakening" />Weakening preconditions</h2> + + <p>Preconditions of a base type and a subtype are combined using a logical <i>or</i> to construct the actual + precondition of the subtype. This makes the actual precondition less restrictive, hence the term + <i>weakening</i>:</p> + + <pre>(precondition base type) | (precondition subtype)</pre> + + <p>Weakening the preconditions of a base type can lead to unexpected results. Code that has been tested against + a weakened type could use parameter values that are not acceptable to the contracts of the base type. When the + implementation is changed to an unweakened one, new contract violations can be detected. For this reason, it is + advisable to never weaken preconditions. This is the same issue as inheriting preconditions from multiple base + types. See <a href="#inheritingMultipleTimes"><i>inheriting the same method from multiple types</i></a> above + for an example.</p> + + <h2><a name="strengthening" />Strengthening postconditions</h2> + + <p>The term <i>strengthening</i> is used because the way in which postconditions of a base type and a subtype are + combined makes the actual postcondition of the subtype more restrictive than the original two. Postconditions + are combined by using a logical <i>and</i>:</p> + + <pre>(postcondition base type) & (postcondition subtype)</pre> + + <p>When you strengthen a postcondition there are some things you have to take into account.</p> + + <p>It is your responsibility to make sure postconditions in subtypes do not strengthen the postcondition in such a + way that all return values become invalid.</p> + + <p>Clients of a method that invoke strengthened methods will only receive a subset of the possible results of the + original method. This means you cannot test your client with all possible return values, so bugs (instead of + contract violations) might surface if the implementation is changed to one that does return all possible values.</p> + + <h2>Invariants</h2> + + <p>Invariants are combined in the same way as postconditions: by using a logical <i>and</i>. However, the term + <i>strengthening</i> is not used for invariants because (in general) an invariant of a subtype only has assertions + about the attributes and methods introduced in that subtype. The restrictions on the members of the base type + are not altered:</p> + + <pre>(invariant base type) & (invariant subtype)</pre> + + <hr /> + + <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" + src="resources/images/sflogo.png" width="125" /></a></div> + + <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JContractS at SourceForge.net</a></p> + </body> +</html> Modified: trunk/site/documentation.html =================================================================== --- trunk/site/documentation.html 2008-05-09 17:08:10 UTC (rev 48) +++ trunk/site/documentation.html 2008-05-09 17:08:59 UTC (rev 49) @@ -27,8 +27,20 @@ <h1>Documentation</h1> - <p>The documentation for the command-line tool and the reference of the contract syntax will appear here soon.</p> + <ul> + <li> + <a href="building.html">Building projects</a> + </li> + <li> + <a href="addingContracts.html">Adding contracts</a> + </li> + + <li> + <a href="contractInheritance.html">Contract inheritance</a> + </li> + </ul> + <hr /> <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" @@ -36,4 +48,4 @@ <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JcontractS at SourceForge.net</a></p> </body> -</html> \ No newline at end of file +</html> Deleted: trunk/site/download.html =================================================================== --- trunk/site/download.html 2008-05-09 17:08:10 UTC (rev 48) +++ trunk/site/download.html 2008-05-09 17:08:59 UTC (rev 49) @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> - <head> - <title>Download - Java Contract Suite</title> - - <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> - - <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> - </head> - - <body> - <ul class="menu"> - <li class="menu"><a href="index.html">Home</a></li> - - <li class="menu"><a href="roadmap.html">Roadmap</a></li> - - <li class="menu"><a href="documentation.html">Documentation</a></li> - - <li class="menu"><a href="participate.html">Participate</a></li> - - <li class="menu">Download</li> - - <li class="menu"><a href="license.html">License</a></li> - </ul> - - <h1>Download</h1> - - <p>The current release is v1.01.00b01. It is practically the same as the JAR compiled by John Swapceinski which is - available from <a href="http://www.icontract2.org/">http://www.icontract2.org/</a>, but the classes have been - moved to another package. You can download the release from the <a - href="https://sourceforge.net/project/showfiles.php?group_id=175492">file releases page of the project</a>.</p> - - <p>At the same page you can also download the original JAR files (package <i>icontract</i>), the source code of - the original JAR for JDK 1.2 which has been modified so it builds using a modern version of Java (package - <i>icontract2</i>), and the JAR built from this source code (package <i>icontract2</i>).</p> - - <hr /> - - <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" - src="resources/images/sflogo.png" width="125" /></a></div> - - <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JcontractS at SourceForge.net</a></p> - </body> -</html> \ No newline at end of file Added: trunk/site/download.html =================================================================== --- trunk/site/download.html (rev 0) +++ trunk/site/download.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>Download - Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu"><a href="index.html">Home</a></li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu">Download</li> + + <li class="menu"><a href="license.html">License</a></li> + </ul> + + <h1>Download</h1> + + <p>The current release is v1.01.00b02. It is a cleaned up version of the reverse engineered JAR with as much + functionality as possible removed to make the code simpler. The code also has been moved to another package. + You can download the release from the <a href="https://sourceforge.net/project/showfiles.php?group_id=175492">file + releases page of JContractS</a>.</p> + + <p>At the same page you can also download the original JAR files (package <i>icontract</i>), the source code of + the original JAR for JDK 1.2 which has been modified so it builds using a modern version of Java (package + <i>icontract2</i>), and the JAR built from this source code (package <i>icontract2</i>).</p> + + <hr /> + + <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" + src="resources/images/sflogo.png" width="125" /></a></div> + + <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JContractS at SourceForge.net</a></p> + </body> +</html> Deleted: trunk/site/index.html =================================================================== --- trunk/site/index.html 2008-05-09 17:08:10 UTC (rev 48) +++ trunk/site/index.html 2008-05-09 17:08:59 UTC (rev 49) @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> - <head> - <title>Welcome to Java Contract Suite</title> - - <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> - - <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> - </head> - - <body> - <ul class="menu"> - <li class="menu">Home</li> - - <li class="menu"><a href="roadmap.html">Roadmap</a></li> - - <li class="menu"><a href="documentation.html">Documentation</a></li> - - <li class="menu"><a href="participate.html">Participate</a></li> - - <li class="menu"><a href="download.html">Download</a></li> - - <li class="menu"><a href="license.html">License</a></li> - </ul> - - <h1>Introduction</h1> - - <p>Java Contract Suite (JcontractS) is a resurrection of the iContract tool originally developed by Reto Kramer of - Reliable Systems. John Swapceinski started the resurrection by decompiling the original JAR files, and making the - sources compile with JDK 1.4 and higher. The result of his work can be found on <a - href="http://www.icontract2.org/">www.icontract2.org</a>.</p> - - <p>Johan Stuyts started the SourceForge.net project so proper further development of the project can take - place.</p> - - <p>The project is being setup at the moment. More information will appear soon. If you cannot wait you can grab - the source from the Subversion repository. Follow the instructions on the <a - href="https://sourceforge.net/svn/?group_id=175492">Subversion page of the project</a>.</p> - - <h1>Goals</h1> - - <p>Java Contract Suite aims to be Design by Contract implementation for Java 1.4 source code. Support for source - code of higher Java versions will be added in the future.</p> - - <p>Even though there have been a number of Design by Contract implementations in the past, the adoption of Design - by Contract has been minimal. To accelerate adoption the project is available under the liberal Apache License - Version 2.0, and will try to provide tasks/extensions/plugins for as many development tools as possible.</p> - - <h1>Why iContract?</h1> - - <p>There were other, more active Design by Contract implementations than iContract when it was resurrected. Below - are the reasons for choosing iContract instead of another implementation.</p> - - <p>With iContract the code and the contracts are kept in the same location. The invariants, preconditions and - postconditions are added to the Javadoc of the classes and methods. You don't have to switch between two files - constantly during development.</p> - - <p>The syntax used by iContract is clean and terse. It is easy to read and understand for people who have never - used iContract before.</p> - - <p>iContract supports Java 1.4. Some other implementations make use of annotations, which require Java 5 or - higher.</p> - - <p>There is no need for JVM parameters, JVM agents, specific class loaders and/or specific frameworks. The classes - built with iContract can be used as is in any deployment environment.</p> - - <h1>Other implementations</h1> - - <p>See the <a href="http://en.wikipedia.org/wiki/Design_by_contract">Design by Contract page at Wikipedia</a> for - a list of Design by Contract implementations for Java (and other languages).</p> - - <hr /> - - <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" - src="resources/images/sflogo.png" width="125" /></a></div> - - <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JcontractS at SourceForge.net</a></p> - </body> -</html> \ No newline at end of file Added: trunk/site/index.html =================================================================== --- trunk/site/index.html (rev 0) +++ trunk/site/index.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>Welcome to Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu">Home</li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu"><a href="download.html">Download</a></li> + + <li class="menu"><a href="license.html">License</a></li> + </ul> + + <h1>Introduction</h1> + + <p>Java Contract Suite (JContractS) is a resurrection of the iContract tool originally developed by Reto Kramer of + Reliable Systems. John Swapceinski started the resurrection by decompiling the original JAR files, and making the + sources compile with JDK 1.4 and higher. The result of his work can be found on <a + href="http://www.icontract2.org/">www.icontract2.org</a>.</p> + + <p>Johan Stuyts started the SourceForge.net project so proper further development of the project can take + place.</p> + + <h1>Goals</h1> + + <p>Java Contract Suite aims to be Design by Contract implementation for Java 1.4 source code. Support for source + code of higher Java versions will be added in the future.</p> + + <p>Even though there have been a number of Design by Contract implementations in the past, the adoption of Design + by Contract has been minimal. To accelerate adoption the project is available under the liberal Apache License + Version 2.0, and will try to provide tasks/extensions/plugins for as many development tools as possible.</p> + + <h1>Why iContract?</h1> + + <p>There were other, more active Design by Contract implementations than iContract when it was resurrected. Below + are the reasons for choosing iContract instead of another implementation.</p> + + <p>With iContract the code and the contracts are kept in the same location. The invariants, preconditions and + postconditions are added to the Javadoc of the classes and methods. You don't have to switch between two files + constantly during development.</p> + + <p>The syntax used by iContract is clean and terse. It is easy to read and understand for people who have never + used iContract before.</p> + + <p>iContract supports Java 1.4. Some other implementations make use of annotations, which require Java 5 or + higher.</p> + + <p>There is no need for JVM parameters, JVM agents, specific class loaders and/or specific frameworks. The classes + built with iContract can be used as is in any deployment environment.</p> + + <h1>Other implementations</h1> + + <p>See the <a href="http://en.wikipedia.org/wiki/Design_by_contract">Design by Contract page at Wikipedia</a> for + a list of Design by Contract implementations for Java (and other languages).</p> + + <hr /> + + <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" + src="resources/images/sflogo.png" width="125" /></a></div> + + <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JContractS at SourceForge.net</a></p> + </body> +</html> \ No newline at end of file Deleted: trunk/site/license.html =================================================================== --- trunk/site/license.html 2008-05-09 17:08:10 UTC (rev 48) +++ trunk/site/license.html 2008-05-09 17:08:59 UTC (rev 49) @@ -1,167 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> - <head> - <title>License - Java Contract Suite</title> - - <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> - - <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> - </head> - - <body> - <ul class="menu"> - <li class="menu"><a href="index.html">Home</a></li> - - <li class="menu"><a href="roadmap.html">Roadmap</a></li> - - <li class="menu"><a href="documentation.html">Documentation</a></li> - - <li class="menu"><a href="participate.html">Participate</a></li> - - <li class="menu"><a href="download.html">Download</a></li> - - <li class="menu">License</li> - </ul> - - <h1>License</h1> - - <p class="licensetitle">Apache License<br />Version 2.0, January 2004<br />http://www.apache.org/licenses/</p> - - <p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p> - - <ol> - <li><p>Definitions.</p><p>"License" shall mean the terms and conditions for use, reproduction, and distribution - as defined by Sections 1 through 9 of this document.</p><p>"Licensor" shall mean the copyright owner or entity - authorized by the copyright owner that is granting the License.</p><p>"Legal Entity" shall mean the union of the - acting entity and all other entities that control, are controlled by, or are under common control with that - entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent - (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.</p><p>"You" (or "Your") - shall mean an individual or Legal Entity exercising permissions granted by this License.</p><p>"Source" form - shall mean the preferred form for making modifications, including but not limited to software source code, - documentation source, and configuration files.</p><p>"Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but not limited to compiled object code, generated - documentation, and conversions to other media types.</p><p>"Work" shall mean the work of authorship, whether in - Source or Object form, made available under the License, as indicated by a copyright notice that is included in - or attached to the work (an example is provided in the Appendix below).</p><p>"Derivative Works" shall mean any - work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial - revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of - authorship. For the purposes of this License, Derivative Works shall not include works that remain separable - from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works - thereof.</p><p>"Contribution" shall mean any work of authorship, including the original version of the Work and - any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to - Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to - submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of - electronic, verbal, or written communication sent to the Licensor or its representatives, including but not - limited to communication on electronic mailing lists, source code control systems, and issue tracking systems - that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner - as "Not a Contribution."</p><p>"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of - whom a Contribution has been received by Licensor and subsequently incorporated within the Work.</p></li> - - <li><p>Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby - grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to - reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work - and such Derivative Works in Source or Object form.</p></li> - - <li><p>Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby - grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in - this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the - Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily - infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such - Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or - counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes - direct or contributory patent infringement, then any patent licenses granted to You under this License for that - Work shall terminate as of the date such litigation is filed.</p></li> - - <li><p>Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any - medium, with or without modifications, and in Source or Object form, provided that You meet the following - conditions:</p><ol style="list-style-type: lower-latin;"> - <li><p>You must give any other recipients of the Work or Derivative Works a copy of this License; - and</p></li> - - <li><p>You must cause any modified files to carry prominent notices stating that You changed the files; - and</p></li> - - <li><p>You must retain, in the Source form of any Derivative Works that You distribute, all copyright, - patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do - not pertain to any part of the Derivative Works; and</p></li> - - <li><p>If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that - You distribute must include a readable copy of the attribution notices contained within such NOTICE file, - excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the - following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source - form or documentation, if provided along with the Derivative Works; or, within a display generated by the - Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file - are for informational purposes only and do not modify the License. You may add Your own attribution notices - within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, - provided that such additional attribution notices cannot be construed as modifying the License.</p></li> - </ol><p>You may add Your own copyright statement to Your modifications and may provide additional or different - license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such - Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies - with the conditions stated in this License.</p></li> - - <li><p>Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally - submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this - License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede - or modify the terms of any separate license agreement you may have executed with Licensor regarding such - Contributions.</p></li> - - <li><p>Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or - product names of the Licensor, except as required for reasonable and customary use in describing the origin of - the Work and reproducing the content of the NOTICE file.</p></li> - - <li><p>Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the - Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF - ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, - NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for - determining the appropriateness of using or redistributing the Work and assume any risks associated with Your - exercise of permissions under this License.</p></li> - - <li><p>Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), - contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or - agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, - special, incidental, or consequential damages of any character arising as a result of this License or out of the - use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, - computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages.</p></li> - - <li><p>Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, - You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability - obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You - agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted - against, such Contributor by reason of your accepting any such warranty or additional liability.</p></li> - </ol> - - <p>END OF TERMS AND CONDITIONS</p> - - <p>APPENDIX: How to apply the Apache License to your work.</p> - - <p style="margin-left: 2em;">To apply the Apache License to your work, attach the following boilerplate notice, - with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the - brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend - that a file or class name and description of purpose be included on the same "printed page" as the copyright - notice for easier identification within third-party archives.</p> - - <p>Copyright [yyyy] [name of copyright owner]</p> - - <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at</p> - - <p style="margin-left: 2em;">http://www.apache.org/licenses/LICENSE-2.0</p> - - <p>Unless required by applicable law or agreed to in writing, software distributed under the License is - distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under the License.</p> - - <hr /> - - <div class="sourceforge-logo"><a href="http://sourceforge.net"><img alt="SourceForge.net Logo" height="37" - src="resources/images/sflogo.png" width="125" /></a></div> - - <p><a href="http://sourceforge.net/projects/jcontracts">The project page of JcontractS at SourceForge.net</a></p> - </body> -</html> \ No newline at end of file Added: trunk/site/license.html =================================================================== --- trunk/site/license.html (rev 0) +++ trunk/site/license.html 2008-05-09 17:08:59 UTC (rev 49) @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + <head> + <title>License - Java Contract Suite</title> + + <link href="resources/stylesheets/jcontracts.css" rel="stylesheet" type="text/css" /> + + <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> + </head> + + <body> + <ul class="menu"> + <li class="menu"><a href="index.html">Home</a></li> + + <li class="menu"><a href="roadmap.html">Roadmap</a></li> + + <li class="menu"><a href="documentation.html">Documentation</a></li> + + <li class="menu"><a href="participate.html">Participate</a></li> + + <li class="menu"><a href="download.html">Download</a></li> + + <li class="menu">License</li> + </ul> + + <h1>License</h1> + + <p class="licensetitle">Apache License<br />Version 2.0, January 2004<br />http://www.apache.org/licenses/</p> + + <p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p> + + <ol> + <li><p>Definitions.</p><p>"License" shall mean the terms and conditions for use, reproduction, and distribution + as defined by Sections 1 through 9 of this document.</p><p>"Licensor" shall mean the copyright owner or entity + authorized by the copyright owner that is granting the License.</p><p>"Legal Entity" shall mean the union of the + acting entity and all other entities that control, are controlled by, or are under common control with that + entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent + (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.</p><p>"You" (or "Your") + shall mean an individual or Legal Entity exercising permissions granted by this License.</p><p>"Source" form + shall mean the preferred form for making modifications, including but not limited to software source code, + documentation source, and configuration files.</p><p>"Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but not limited to compiled object code, generated + documentation, and conversions to other media types.</p><p>"Work" shall mean the work of authorship, whether in + Source or Object form, made available under the License, as indicated by a copyright notice that is included in + or attached to the work (an example is provided in the Appendix below).</p><p>"Derivative Works" shall mean any + work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial + revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of + authorship. For the purposes of this License, Derivative Works shall not include works that remain separable + from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works + thereof.</p><p>"Contribution" shall mean any work of authorship, including the original version of the Work and + any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to + Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to + submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of + electronic, verbal, or written communication sent to the Licensor or its representatives, including but not + limited to communication on electronic mailing lists, source code control systems, and issue tracking systems + that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner + as "Not a Contribution."</p><p>"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of + whom a Contribution has been received by Licensor and subsequently incorporated within the Work.</p></li> + + <li><p>Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby + grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to + reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work + and such Derivative Works in Source or Object form.</p></li> + + <li><p>Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby + grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in + this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the + Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily + infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such + Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or + counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes + direct or contributory patent infringement, then any patent licenses granted to You under this License for that + Work shall terminate as of the date such litigation is filed.</p></li> + + <li><p>Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any + medium, with or without modifications, and in Source or Object form, provided that You meet the following + conditions:</p><ol style="list-style-type: lower-latin;"> + <li><p>You must give any other recipients of the Work or Derivative Works a copy of this License; + and</p></li> + + <li><p>You must cause any modified files to carry prominent notices stating that You changed the files; + and</p></li> + + <li><p>You must retain, in the Source form of any Derivative Works that You distribute, all copyright, + patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do + not pertain to any part of the Derivative Works; and</p></li> + + <li><p>If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that + You distribute must include a readable copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the + following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source + form or documentation, if provided along with the Derivative Works; or, within a display generated by the + Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file + are for informational purposes only and do not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, + provided that such additional attribution notices cannot be construed as modifying the License.</p></li> + </ol><p>You may add Your own copyright statement to Your modifications and may provide additional or different + license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such + Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies + with the conditions stated in this License.</p></li> + + <li><p>Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally + submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this + License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede + or modify the terms of any separate license agreement you may have executed with Licensor regarding such + Contributions.</p></li> + + <li><p>Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or + product names of the Licensor, except as required for reasonable and customary use in describing the origin of + the Work and reproducing the content of the NOTICE file.</p></li> + + <li><p>Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the + Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, + NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for + determining the appropriateness of using or redistributing the Work and assume any risks associated with Your + exercise of permissions under this License.</p></li> + + <li><p>Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), + contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or + agreed to in writing, shall an... [truncated message content] |