From aad179d8574d411d071956bffe7d751c3fea8ac0 Mon Sep 17 00:00:00 2001 From: Guilherme Espada Date: Sun, 1 Dec 2024 18:01:26 +0000 Subject: [PATCH 1/4] Use the Palantir formatter in pre-commit Compiling in pre-commit is not a good idea, since it takes forever --- .github/workflows/maven.yml | 2 +- .pre-commit-config.yaml | 19 ++- .vscode/settings.json | 2 +- ...quidJava Evaluation with Hands-on Study.md | 140 +++++++++--------- docs/design/evaluation_survey/README.md | 2 +- .../syntax_survey/Refinements_Syntax.md | 28 ++-- docs/design/syntax_survey/analysis.html | 78 +++++----- liquidjava-api/pom.xml | 2 +- .../src/main/java/example/NumericExample.jpf | 12 -- liquidjava-example/pom.xml | 2 +- .../testSuite/CorrectTrafficLightRGB.java | 4 +- .../java/testSuite/ErrorTrafficLightRGB.java | 4 +- .../testSuite/classes/car_correct/Test.java | 2 +- .../classes/input_reader_correct/Test.java | 2 +- liquidjava-example/test1.txt | 2 +- liquidjava-verifier/checkstyle.xml | 2 +- liquidjava-verifier/pom.xml | 2 +- .../src/main/antlr4/rj/grammar/RJ.g4 | 40 ++--- .../processor/context/RefinedFunction.java | 2 +- .../processor/context/Variable.java | 4 +- .../refinement_checker/VCChecker.java | 4 +- .../MethodsFunctionsChecker.java | 4 +- .../general_checkers/OperationsChecker.java | 18 +-- .../AuxHierarchyRefinememtsPassage.java | 2 +- .../object_checkers/AuxStateHandler.java | 22 +-- .../liquidjava/rj_language/Predicate.java | 2 +- .../rj_language/ast/Expression.java | 2 +- .../parsing/RefinementsParser.java | 6 +- .../rj_language/visitors/AliasVisitor.java | 6 +- .../liquidjava/api/tests/TestExamples.java | 6 +- pom.xml | 2 +- 31 files changed, 209 insertions(+), 216 deletions(-) delete mode 100644 liquidjava-api/src/main/java/example/NumericExample.jpf diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 3ddd9b72..6bcc4b7e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -14,7 +14,7 @@ on: pull_request: branches: [ "main" ] - + jobs: build: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cc8c4682..58488d19 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,15 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks repos: -- repo: https://github.com/ejba/pre-commit-maven - rev: v0.3.4 - hooks: - - id: maven - args: [clean compile] + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks + rev: v2.14.0 + hooks: + - id: pretty-format-java + args: [--palantir] diff --git a/.vscode/settings.json b/.vscode/settings.json index e0f15db2..04cd6188 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { "java.configuration.updateBuildConfiguration": "automatic" -} \ No newline at end of file +} diff --git a/docs/design/evaluation_survey/LiquidJava Evaluation with Hands-on Study.md b/docs/design/evaluation_survey/LiquidJava Evaluation with Hands-on Study.md index 7f6033ea..882312a9 100644 --- a/docs/design/evaluation_survey/LiquidJava Evaluation with Hands-on Study.md +++ b/docs/design/evaluation_survey/LiquidJava Evaluation with Hands-on Study.md @@ -65,7 +65,7 @@ For each write the line with the error, the error and how to fix it Share registration survey -- Background data ~~ to 1st survey +- Background data ~~ to 1st survey - only accept people familiar/very familiar with Java - Did you contact with LiquidJava before? - Send available date and time for 1h of synchronized study-session, via zoom @@ -89,44 +89,44 @@ Make a correct and an incorrect use of the annotated code. int x; ``` - -- Method annotated - parameters and return. *(Average with parameters dependency)* + +- Method annotated - parameters and return. *(Average with parameters dependency)* Write a correct and an incorrect invocation of function1. ```java @Refinement("_ >= 0") public static double function1( - @Refinement("a >= 0") double a, + @Refinement("a >= 0") double a, @Refinement("b >= a") double b){ return (a + b)/2; } ``` - + - Object State - Vending Machine idea: showing products -> product selected -> pay -> show products Write a correct and incorrect sequence of invocations on the object MyObj - + ```java @StateSet({"sX", "sY", "sZ"}) public class MyObj { - + @StateRefinement(to="sY(this)") public MyObj() {} - + @StateRefinement(from="sY(this)", to="sX(this)") public void select(int number) {} - + @StateRefinement(from="sX(this)", to="sZ(this)") public void pay(int account) { } - + @StateRefinement(from="sY(this)", to="sX(this)") @StateRefinement(from="sZ(this)", to="sX(this)") public void show() { } } - + ``` - + ## PART 2 : Overview Brief introduction to LiquidJava and how to use Refinements in Java. @@ -143,7 +143,7 @@ Off-video: ### 3.1 Plain Java Code -Open project without liquid Java. +Open project without liquid Java. Each file contains a bug, try to locate it without running the code. @@ -155,7 +155,7 @@ For each file answer: ### 3.2 Liquid Java Code -Open project that contains the liquid-java-api jar and the files already annotated. +Open project that contains the liquid-java-api jar and the files already annotated. Each file contains a bug, try to locate it without running the code. @@ -194,11 +194,11 @@ This exercises will be grouped in pairs. For each participant, one of the exerci return n + t1; } } - + } ``` - + * Pair 2/2 - *Fibonacci* @@ -208,7 +208,7 @@ This exercises will be grouped in pairs. For each participant, one of the exerci /** * Computes the fibonacci of index n * @param n The index of the required fibonnaci number - * @return The fibonacci nth number. The fibonacci sequence follows the formula Fn = Fn-1 + Fn-2 and has the starting values of F0 = 1 and F1 = 1 + * @return The fibonacci nth number. The fibonacci sequence follows the formula Fn = Fn-1 + Fn-2 and has the starting values of F0 = 1 and F1 = 1 */ @Refinement( "_ >= 1 && GreaterEqualThan(_, n)") public static int fibonacci(@Refinement("Nat(n)") int n){ @@ -220,7 +220,7 @@ This exercises will be grouped in pairs. For each participant, one of the exerci } ``` - + * **3** - State error (using external libs annotated) @@ -228,11 +228,11 @@ This exercises will be grouped in pairs. For each participant, one of the exerci ```java class Test3 { - + public void createSocket(InetSocketAddress addr) throws IOException{ int port = 5000; - InetAddress inetAddress = InetAddress.getByName("localhost"); - + InetAddress inetAddress = InetAddress.getByName("localhost"); + Socket socket = new Socket(); socket.bind(new InetSocketAddress(inetAddress, port)); //missing socket.connect(addr); @@ -246,30 +246,30 @@ This exercises will be grouped in pairs. For each participant, one of the exerci @ExternalRefinementsFor("java.net.Socket") @StateSet({"unconnected", "binded", "connected", "closed"}) public interface SocketRefinements { - + @StateRefinement(to="unconnected(this)") public void Socket(); - + @StateRefinement(from="unconnected(this)",to="binded(this)") public void bind(SocketAddress add); - + @StateRefinement(from="binded(this)", to="connected(this)") public void connect(SocketAddress add); - + @StateRefinement(from="connected(this)") public void sendUrgentData(int n); - + @StateRefinement(to="closed(this)") public void close(); - + } ``` - + * Pair 2/2 - ArrayDeque - To use ghost field size to model the object state (https://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html) ```java class Test3 { - + public static void main(String[] args) throws IOException{ ArrayDeque p = new ArrayDeque<>(); p.add(2); @@ -286,42 +286,42 @@ This exercises will be grouped in pairs. For each participant, one of the exerci ``` ```java - + @ExternalRefinementsFor("java.util.ArrayDeque") @Ghost("int size") public interface ArrayDequeRefinements { - + public void ArrayDeque(); - + @StateRefinement(to="size(this) == (size(old(this)) + 1)") public boolean add(E elem); - + @StateRefinement(to="size(this) == (size(old(this)) + 1)") public boolean offerFirst(E elem); - + @StateRefinement(from="size(this) > 0", to = "size(this) == (size(old(this)))") public E getFirst(); - + @StateRefinement(from="size(this) > 0", to = "size(this) == (size(old(this)))") public E getLast(); - + @StateRefinement(from="size(this)> 0", to="size(this) == (size(old(this)) - 1)") public void remove(); - + @StateRefinement(from="size(this)> 0", to="size(this) == (size(old(this)) - 1)") public E pop(); - + @Refinement("_ == size(this)") public int size(); - + @Refinement("_ == (size(this) <= 0)") public boolean isEmpty(); - + } - + ``` - + @@ -337,7 +337,7 @@ Each package contains a program to annotate and 2 files with tests (one that sho ```java /* A month needs to have a value between 1 and 12*/ int currentMonth; - + currentMonth = 13; currentMonth = 5; ``` @@ -355,7 +355,7 @@ Each package contains a program to annotate and 2 files with tests (one that sho public static int inRange(int a, int b){ return a + 1; } - + public static void main(String[] args) { inRange(10, 11); //Correct inRange(10, 9); //Error @@ -369,27 +369,27 @@ Each package contains a program to annotate and 2 files with tests (one that sho ```java public class TrafficLight { - - int r; - int g; + + int r; + int g; int b; - + public TrafficLight() { - r = 255; g = 0; b = 0; + r = 255; g = 0; b = 0; } - + public void transitionToAmber() { r = 255; g = 120; b = 0; } - + public void transitionToGreen() { - r = 76; g = 187; b = 23; + r = 76; g = 187; b = 23; } - + public void transitionToRed() { - r = 230; g = 0; b = -1; + r = 230; g = 0; b = -1; } - + } ``` @@ -399,9 +399,9 @@ Each package contains a program to annotate and 2 files with tests (one that sho - [Optional] What did you dislike the most while using LiquidJava? - Would you use LiquidJava in your projects? - - - + + + ## EXTRA METHODS - NOT USED * **1** - Incorrect Invocation Simple Arithmetics @@ -410,13 +410,13 @@ Each package contains a program to annotate and 2 files with tests (one that sho ```java public class Test3 { - public static double divide(double numerator, + public static double divide(double numerator, @Refinement("denominator != 0")double denominator){ return numerator/denominator; } - + public static void main(String[] args) { - double a; + double a; a = divide(10, 5); a = divide(50, -10+5); a = divide(800, 2*30-60); @@ -426,29 +426,29 @@ Each package contains a program to annotate and 2 files with tests (one that sho } ``` - + * Part 2/2 - *Average Price - only positives* ```java public class Test3 { public static double averagePrice( - @Refinement("price1 >= 0") double price1, + @Refinement("price1 >= 0") double price1, @Refinement("price2 >= 0") double price2){ return (price1 + price2)/2; } public static void main(String[] args) { - double b; + double b; b = averagePrice(10, 5); b = averagePrice(50, -10+15); b = averagePrice(800, 2*30-60); b = averagePrice(1952*-2, 20-10); - b = averagePrice(5*5*5, -5*-1); + b = averagePrice(5*5*5, -5*-1); } } ``` - - + + * Pair 1/2 - *Absolute* ```java @@ -483,11 +483,7 @@ Each package contains a program to annotate and 2 files with tests (one that sho if(a > b) //correct: change signal return b; else - return a; + return a; } } ``` - - - - diff --git a/docs/design/evaluation_survey/README.md b/docs/design/evaluation_survey/README.md index 692a25d3..1e93038b 100644 --- a/docs/design/evaluation_survey/README.md +++ b/docs/design/evaluation_survey/README.md @@ -1 +1 @@ -Find the examples described in the Study in https://github.com/CatarinaGamboa/liquidjava-examples \ No newline at end of file +Find the examples described in the Study in https://github.com/CatarinaGamboa/liquidjava-examples diff --git a/docs/design/syntax_survey/Refinements_Syntax.md b/docs/design/syntax_survey/Refinements_Syntax.md index b6d2bbad..9744fd94 100644 --- a/docs/design/syntax_survey/Refinements_Syntax.md +++ b/docs/design/syntax_survey/Refinements_Syntax.md @@ -1,4 +1,4 @@ -# Java Refinements +# Java Refinements ## Refinements in Java - Syntax ## Introduction @@ -41,7 +41,7 @@ This section serves as assessment of the knowledge ground on the different techn (If vaguely or not familiar with Refinement Types goes to next section, otherwise steps to the following section) ### Introduction to Refinement Types -Refinement Types extend a language with predicates (boolean expressions) over the basic types. +Refinement Types extend a language with predicates (boolean expressions) over the basic types. A popular syntax is {v : T | p(v) }, of which {x : Integer | x > 0} is an instance. The example bellow represents a way to apply refinements in Java, where the variable y has the type int and a refinement that only allows y to have positive values which are lesser than 50. When the variable is assigned the value 10 no errors will be shown, but if the assigned value is 100 the compiler will send a refinement type error to the developer. @@ -145,7 +145,7 @@ Analyse each of the examples bellow. ```java @Refinement("\\v >= 0 && \\v <= 100") -public static int percentageFromGrade(@Refinement("grade >= 0") int grade, +public static int percentageFromGrade(@Refinement("grade >= 0") int grade, @Refinement("scale > 0") int scale){...} ``` @@ -165,7 +165,7 @@ Which of the above syntaxes would you use? (possibility for multiple answers) ### **Alias** -Several implementations of refinement types include alias for a group of predicates. +Several implementations of refinement types include alias for a group of predicates. In this section we present possible syntaxes for the creation of the alias and their usage in variable refinements. PtGrade is a refinement alias that describes an int between 0 and 20 - grade range used in the Portuguese higher education system. @@ -214,8 +214,8 @@ File *PtGrade.java* ```java @Refinement(" int x | x >= 0 && x <= 20 ") @Retention(RetentionPolicy.CLASS) -@Target({ ElementType.METHOD, ElementType.FIELD, - ElementType.LOCAL_VARIABLE, +@Target({ ElementType.METHOD, ElementType.FIELD, + ElementType.LOCAL_VARIABLE, ElementType.PARAMETER, ElementType.TYPE }) public @interface PtGrade {} ``` @@ -225,7 +225,7 @@ File *MyClass.java* ```java class MyClass{ ... - @PtGrade @Refinement("positiveGrade >= 10") + @PtGrade @Refinement("positiveGrade >= 10") int positiveGrade = 12; } ``` @@ -239,7 +239,7 @@ Which of the above syntaxes would you use? (possibility for multiple answers) ### Uninterpreted Functions -To invoke functions inside the Refinements, these functions must be declared in the program as ghost functions, that are only relevant for the specification of the program properties. These functions work as uninterpreted functions, which means that only their signature is needed and not their implementation. +To invoke functions inside the Refinements, these functions must be declared in the program as ghost functions, that are only relevant for the specification of the program properties. These functions work as uninterpreted functions, which means that only their signature is needed and not their implementation. In this section we present possible syntaxes for the declaration and usage of ghost functions inside the class MyList. @@ -256,10 +256,10 @@ Analyse the following syntax examples. @Refinement("ghost int len(List xs)") class MyList{ static final int MAX_VALUE = 50; - + @Refinement("len(\\v) == 0") public List createList(){...} - + @Refinement("len(\\v) == 1 + len(xs)") public List append(List xs, int k){...} } @@ -270,11 +270,11 @@ class MyList{ ```java class MyList{ static final int MAX_VALUE = 50; - + @Refinement("ghost int len(List xs)") @Refinement("len(\\v) == 0") public List createList(){...} - + @Refinement("len(\\v) == 1 + len(xs)") public List append(List xs, int k){...} } @@ -287,10 +287,10 @@ class MyList{ class MyList{ @Refinement("ghost int len(List xs)") static final int MAX_VALUE = 50; - + @Refinement("len(\\v) == 0") public List createList(){...} - + @Refinement("len(\\v) == 1 + len(xs)") public List append(List xs, int k){...} } diff --git a/docs/design/syntax_survey/analysis.html b/docs/design/syntax_survey/analysis.html index 46685e72..da6f5bf9 100644 --- a/docs/design/syntax_survey/analysis.html +++ b/docs/design/syntax_survey/analysis.html @@ -11398,15 +11398,15 @@ /* Flexible box model classes */ /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */ - /* This file is a compatability layer. It allows the usage of flexible box + /* This file is a compatability layer. It allows the usage of flexible box model layouts accross multiple browsers, including older browsers. The newest, universal implementation of the flexible box model is used when available (see -`Modern browsers` comments below). Browsers that are known to implement this +`Modern browsers` comments below). Browsers that are known to implement this new spec completely include: Firefox 28.0+ Chrome 29.0+ - Internet Explorer 11+ + Internet Explorer 11+ Opera 17.0+ Browsers not listed, including Safari, are supported via the styling under the @@ -15411,7 +15411,7 @@ background: #f7f7f7; border-top: 1px solid #cfcfcf; border-bottom: 1px solid #cfcfcf; - /* This injects handle bars (a short, wide = symbol) for + /* This injects handle bars (a short, wide = symbol) for the resize handle. */ } @@ -16518,7 +16518,7 @@

Refinements in Java - Syntaxans = l.split(",") #only get answers and not lines with the final comment - if(ans != [] and ans[0]!= "" and + if(ans != [] and ans[0]!= "" and (ans[0][1:5] == "2020" or ans[0][1:5] == "2021")): ans = ans[1:18] #remove timestamp, comments and email for i in range(len(ans)) : @@ -16546,7 +16546,7 @@

Refinements in Java - Syntax -
Number of answers: 53 
+                
Number of answers: 53
 
 
@@ -16789,28 +16789,28 @@

1. Background Inform fig.suptitle(title, fontsize=18, fontweight='bold') # Set aspect ratio to be equal so that pie is drawn as a circle. plt.axis('equal') - -def horizontalBarsPlot(title, pd, colName, palette="rocket", percentage=True): + +def horizontalBarsPlot(title, pd, colName, palette="rocket", percentage=True): lSize = getFamiliaritySize(pd, colName) maxY = max(lSize) x = 8 if maxY > 10 else 4 f, axs = plt.subplots(1, 1, figsize=(x, 6), sharex=True) f.suptitle(title, fontsize=16) sns.set_theme(style="white", context="talk") - + x = np.array(["Not Familiar", "Vaguely Familiar","Familiar","Very Familiar"][::-1]) y1 = np.array(lSize) splot = sns.barplot(x=y1, y=x, palette=palette, ax=axs) - - + + i = 0 for p in splot.patches: height = int(lSize[i]) if not percentage else'{:.1f}'.format((lSize[i]/sum(lSize))*100)+"%" - splot.annotate(height, - (p.get_x()+lSize[i]+1 , p.get_height()+i-0.7), - ha = 'left', va = 'center', - xytext = (0, 9), + splot.annotate(height, + (p.get_x()+lSize[i]+1 , p.get_height()+i-0.7), + ha = 'left', va = 'center', + xytext = (0, 9), textcoords = 'offset points') i+=1 axs.set_xlim([0, maxY+5]) @@ -17214,7 +17214,7 @@

1.4 Familiarity with Refinement T
refinements_pd = pd.concat([answers_pd.loc[answers_pd[fRefs]== veryFamiliar], answers_pd.loc[answers_pd[fRefs]== familiar]])
-horizontalBarsPlot("Familiar with Functional Languages given Familiarity with Refinements", 
+horizontalBarsPlot("Familiar with Functional Languages given Familiarity with Refinements",
                    refinements_pd, fFun, palette="tab10", percentage=True)
 #trocar titulo
 
@@ -17271,7 +17271,7 @@

2. Preferences on the Syntaxdef barsPlot(title, labelNames, pd, column_prefix, indexes, palette="rocket", zoomX=0, zoomY=0, percentage=False): size = len(indexes) - figXsize = 7*size if size < 3 else 6*size; + figXsize = 7*size if size < 3 else 6*size; f, axs = plt.subplots(1, size, figsize=(figXsize+zoomX, 5+zoomY), sharex=True) f.suptitle(title, fontsize=16) sns.set_theme(style="white", context="talk") @@ -17285,16 +17285,16 @@

2. Preferences on the Syntaxaxs[i].set_xlabel(labelNames[i], fontsize=15+zoomX) maxY = max(lSize) if max(lSize) > maxY else maxY for p in splot.patches: - height = int(p.get_height()) if not percentage else '{:.1f}'.format((p.get_height()/sum(lSize))*100)+"%" - splot.annotate(height, - (p.get_x() + p.get_width() / 2., p.get_height()), - ha = 'center', va = 'center', - xytext = (0, 9), + height = int(p.get_height()) if not percentage else '{:.1f}'.format((p.get_height()/sum(lSize))*100)+"%" + splot.annotate(height, + (p.get_x() + p.get_width() / 2., p.get_height()), + ha = 'center', va = 'center', + xytext = (0, 9), textcoords = 'offset points') - + for i in range(size): axs[i].set_ylim([0, maxY+4]) - +

@@ -17376,7 +17376,7 @@

2.1 Wildcard Variable
-
answers_pd2 = answers_pd.copy() 
+                
answers_pd2 = answers_pd.copy()
 answers_pd2.drop(answers_pd2 .loc[answers_pd2["wildcard_0"] == pref].index, inplace=True)
 labelNames = labelNames[1:]
 barsPlot('Wildcard Variables excluding marked as "Preferable" in 1st', labelNames, answers_pd2, wildC, [1,2])
@@ -17437,7 +17437,7 @@ 

2.2 Variable Refinements
-
labelNames = ['@Refinement("negativeGrade < 10")\nint negativeGrade = 8;', 
+                
labelNames = ['@Refinement("negativeGrade < 10")\nint negativeGrade = 8;',
               ""'@Refinement("{x | x < 10}")\nint negativeGrade = 8;']
 barsPlot("Variable Refinements", labelNames, answers_pd, var, range(2), palette="viridis")
 
@@ -17499,7 +17499,7 @@

2.3 Refinements in Methods
-
labelNames = ['@Refinement("\\v >= 0 && \\v <= 100") \n static int percentageFromGrade(        \n           @Refinement("grade >= 0") int grade,\n              @Refinement("scale > 0")  int scale){...}', 
+                
labelNames = ['@Refinement("\\v >= 0 && \\v <= 100") \n static int percentageFromGrade(        \n           @Refinement("grade >= 0") int grade,\n              @Refinement("scale > 0")  int scale){...}',
               '@Refinement("{grade >= 0} -> {scale > 0} -> {\\v >= 0 && \\v <= 100}")\n static int percentageFromGrade(int grade, int scale){...}']
 barsPlot("Refinements in Methods", labelNames, answers_pd, mets, range(2))
 
@@ -17620,8 +17620,8 @@

2.5 Ghost/Uninterpreted Functions
-
labelNames = ['Above the class', 
-              'Above any method', 
+                
labelNames = ['Above the class',
+              'Above any method',
               'Above class attributes']
 barsPlot("Ghost Functions", labelNames, answers_pd, alias, range(3))
 
@@ -17743,7 +17743,7 @@

colorBot = '#e35430' colorUp = "#ff8630" sns.set_theme(style="white", context="talk") - + #Plot 1 - background - "total" (top) series lSize = getListSizes(pd1, colName) x = np.array(["Not Accept.", "Acceptable","Preferable"]) @@ -17949,7 +17949,7 @@

3.1.2 Refinements in Methods
-
labelNames = ['@Refinement("\\v >= 0") \n static int percentageFromGrade(        \n           @Refinement("grade >= 0") int grade,\n              @Refinement("scale > 0")  int scale){...}', 
+                
labelNames = ['@Refinement("\\v >= 0") \n static int percentageFromGrade(        \n           @Refinement("grade >= 0") int grade,\n              @Refinement("scale > 0")  int scale){...}',
               '@Refinement("{grade >= 0} -> {scale > 0} -> {\\v >= 0 && \\v <= 100}")\n static int percentageFromGrade(int grade, int scale){...}']
 stackPlot(answers_pd, functional_pd, mets+"0", "Refinements in Methods - option 1", labelNames[0])
 plt.figure().clear()
@@ -18044,11 +18044,11 @@ 

3.2 Further Compa listPreferenceCat = [notAccept, accept, pref] def setCategorical(df, column_names, cats, jitter=False): - df = df.copy() + df = df.copy() for cat in column_names: df[cat] = df[cat].astype(pd.api.types.CategoricalDtype(categories = cats, ordered=True)) cat_columns = df.select_dtypes(['category']).columns - + df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes if not jitter else np.random.uniform(x.cat.codes-0.15, x.cat.codes+0.15)) return df @@ -18259,7 +18259,7 @@

3.2.1 Pair Plot - F
-
allCat_pd = setCategorical(answersCat_pd, [fFun, fJML, fRefs], 
+                
allCat_pd = setCategorical(answersCat_pd, [fFun, fJML, fRefs],
                                    [notFamiliar, vagFamiliar, familiar, veryFamiliar], jitter=True)
 pairPlot(allCat_pd, fJava, column_names[1:4])
 
@@ -18350,7 +18350,7 @@
3.2
-
all_pd = setCategorical(answersCat_pd, [fJava, fJML, fRefs], 
+                
all_pd = setCategorical(answersCat_pd, [fJava, fJML, fRefs],
                                    [notFamiliar, vagFamiliar, familiar, veryFamiliar], jitter=True)
 pairPlot(all_pd, fFun, [column_names[0]]+column_names[2:4])
 
@@ -18440,7 +18440,7 @@
3.2.3 Pair Plot - Fa
-
all_pd = setCategorical(answersCat_pd, [fJava, fFun, fRefs], 
+                
all_pd = setCategorical(answersCat_pd, [fJava, fFun, fRefs],
                                    [notFamiliar, vagFamiliar, familiar, veryFamiliar], jitter=True)
 pairPlot(all_pd, fJML, column_names[:2]+[column_names[3]])
 
@@ -18531,7 +18531,7 @@
3.2.4 Pair P
-
all_pd = setCategorical(answersCat_pd, [fJava, fFun, fJML], 
+                
all_pd = setCategorical(answersCat_pd, [fJava, fFun, fJML],
                                    [notFamiliar, vagFamiliar, familiar, veryFamiliar], jitter=True)
 pairPlot(all_pd, fRefs, column_names[:3])
 
@@ -18636,7 +18636,7 @@

4. Final Comments
-
 
+                

 
@@ -18652,4 +18652,4 @@

4. Final Comments= 0 && r <= 255") int r; @Refinement("g >= 0 && g <= 255") int g; @@ -46,4 +46,4 @@ public static void name() { tl.transitionToAmber(); tl.transitionToRed(); } -} \ No newline at end of file +} diff --git a/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java b/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java index 9daf2986..b9df5283 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java @@ -5,7 +5,7 @@ import liquidjava.specification.StateSet; @StateSet({"green", "amber", "red"}) public class ErrorTrafficLightRGB { - + @Refinement("r >= 0 && r <= 255") int r; @Refinement("g >= 0 && g <= 255") int g; @@ -47,4 +47,4 @@ public static void name() { tl.transitionToRed(); tl.transitionToAmber(); } -} \ No newline at end of file +} diff --git a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java index c724ffb2..6b675c88 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java @@ -21,4 +21,4 @@ public static void main(String[] args) { @Refinement("_ > 2020") int k = getYear(); } -} \ No newline at end of file +} diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java index 71f4d909..8b2925b0 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java @@ -8,7 +8,7 @@ public class Test { public static void main(String[] args) throws Exception { // Arrays are not well supported in LiquidJava - + // InputStreamReader isr = new InputStreamReader(new FileInputStream("test1.txt")); // @Refinement("_ > -9") // int a = isr.read(); diff --git a/liquidjava-example/test1.txt b/liquidjava-example/test1.txt index 39f484b4..9407374d 100644 --- a/liquidjava-example/test1.txt +++ b/liquidjava-example/test1.txt @@ -2,4 +2,4 @@ akbadoasfnncnksa pspifdlnksac apsfdnlckx laigdknz.m,cxieakfsdmcx -aipfsdlzkn.cmx \ No newline at end of file +aipfsdlzkn.cmx diff --git a/liquidjava-verifier/checkstyle.xml b/liquidjava-verifier/checkstyle.xml index 5aee448c..2a92a37c 100644 --- a/liquidjava-verifier/checkstyle.xml +++ b/liquidjava-verifier/checkstyle.xml @@ -231,4 +231,4 @@ --> - \ No newline at end of file + diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml index 3b1ef1d4..6041be89 100644 --- a/liquidjava-verifier/pom.xml +++ b/liquidjava-verifier/pom.xml @@ -169,4 +169,4 @@ - \ No newline at end of file + diff --git a/liquidjava-verifier/src/main/antlr4/rj/grammar/RJ.g4 b/liquidjava-verifier/src/main/antlr4/rj/grammar/RJ.g4 index 692aee33..e34f40ad 100644 --- a/liquidjava-verifier/src/main/antlr4/rj/grammar/RJ.g4 +++ b/liquidjava-verifier/src/main/antlr4/rj/grammar/RJ.g4 @@ -5,7 +5,7 @@ prog: start | ; start: pred #startPred | alias #startAlias - | ghost #startGhost + | ghost #startGhost ; @@ -16,23 +16,23 @@ pred: | pred '?' pred ':' pred #ite | exp #predExp ; - -exp: + +exp: '(' exp ')' #expGroup | exp BOOLOP exp #expBool | operand #expOperand ; - + operand: literalExpression #opLiteral | operand ARITHOP operand #opArith - | operand '-' operand #opSub + | operand '-' operand #opSub | '-' operand #opMinus | '!' operand #opNot | '(' operand ')' #opGroup ; - + literalExpression: '(' literalExpression ')' #litGroup | literal #lit @@ -40,43 +40,43 @@ literalExpression: | ID '.' functionCall #targetInvocation | functionCall #invocation ; - + functionCall: ghostCall | aliasCall; - + ghostCall: ID '(' args? ')'; - + aliasCall: ID_UPPER '(' args? ')'; -args: pred (',' pred)* ; +args: pred (',' pred)* ; + - -literal: +literal: BOOL | STRING | INT | REAL; - -//----------------------- Declarations ----------------------- + +//----------------------- Declarations ----------------------- alias: 'type'? ID_UPPER '(' argDeclID ')' '{' pred '}'; -ghost: +ghost: 'ghost'? type ID ('(' argDecl? ')')?; argDecl: - type ID? (',' argDecl)?; - + type ID? (',' argDecl)?; + argDeclID: type ID (',' argDeclID)?; type: 'int' - | 'double' + | 'double' | 'float' | 'boolean' | ID_UPPER @@ -90,11 +90,11 @@ ARITHOP : '+'|'*'|'/'|'%';//|'-'; BOOL : 'true' | 'false'; ID_UPPER: ([A-Z][a-zA-Z0-9]*); -OBJECT_TYPE: +OBJECT_TYPE: (([a-zA-Z][a-zA-Z0-9]+) ('.' [a-zA-Z][a-zA-Z0-9]*)+); ID : '#'*[a-zA-Z_][a-zA-Z0-9_#]*; STRING : '"'(~["])*'"'; INT : (([0-9]+) | ([0-9]+('_'[0-9]+)*)); REAL : (([0-9]+('.'[0-9]+)?) | '.'[0-9]+); - + WS : (' '|'\t'|'\n'|'\r')+ -> channel(HIDDEN); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java index b7d6b07c..7b70f473 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java @@ -79,7 +79,7 @@ public Predicate getAllRefinements() { * Gives the Predicate for a certain parameter index and regards all the previous parameters' Predicates * * @param index - * + * * @return */ public Predicate getRefinementsForParamIndex(int index) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java index 4c167d5f..ff616db9 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java @@ -137,7 +137,7 @@ void saveInstanceElse() { * @param counter * A number to create a new variable name * @param cond - * + * * @return A new VariableInfo created by the combination of refinements or an empty Optional */ Optional getIfInstanceCombination(int counter, Predicate cond) { @@ -181,7 +181,7 @@ private VariableInstance get(int index) { * @param nName * @param cond * @param ifThen - * + * * @return */ private Predicate createITEConstraint(String nName, Predicate cond, VariableInstance then) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java index 75ca4b94..0711807d 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java @@ -224,7 +224,7 @@ public boolean smtChecks(Predicate cSMT, Predicate expectedType, SourcePosition * * @param cSMT * @param expectedType - * + * * @throws Exception * @throws GhostFunctionError * @throws TypeCheckError @@ -239,7 +239,7 @@ private void smtChecking(Predicate cSMT, Predicate expectedType) * * @param c * @param map - * + * * @return */ @SuppressWarnings("unused") diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java index d14efa15..93ae6503 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java @@ -135,9 +135,9 @@ private void auxGetMethodRefinements(CtMethod method, RefinedFunction rf) * @param f * @param methodRef * @param params - * + * * @return Conjunction of all - * + * * @throws ParsingException */ private Predicate handleFunctionRefinements(RefinedFunction f, CtElement method, List> params) diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java index 0ce0f318..2d0ab168 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java @@ -55,7 +55,7 @@ public OperationsChecker(TypeChecker rtc) { * * @param * @param operator - * + * * @throws ParsingException */ public void getBinaryOpRefinements(CtBinaryOperator operator) throws ParsingException { @@ -100,7 +100,7 @@ public void getBinaryOpRefinements(CtBinaryOperator operator) throws Pars * * @param * @param operator - * + * * @throws ParsingException */ @SuppressWarnings({ "unchecked" }) @@ -162,9 +162,9 @@ public void getUnaryOpRefinements(CtUnaryOperator operator) throws Parsin * * @param operator * @param element - * + * * @return String with the operation refinements - * + * * @throws ParsingException */ private Predicate getOperationRefinements(CtBinaryOperator operator, CtExpression element) @@ -181,9 +181,9 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtExpres * Parent of Binary Operator, usually a CtAssignment or CtLocalVariable * @param element * CtExpression that represent an Binary Operation or one of the operands - * + * * @return Predicate with the operation refinements - * + * * @throws ParsingException */ private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariableWrite parentVar, @@ -305,9 +305,9 @@ private Predicate getOperationRefinementFromExternalLib(CtInvocation inv, CtB * @param operator * @param w * @param name - * + * * @return String with the refinements - * + * * @throws ParsingException */ private Predicate getRefinementUnaryVariableWrite(CtExpression ex, CtUnaryOperator operator, @@ -332,7 +332,7 @@ private Predicate getRefinementUnaryVariableWrite(CtExpression ex, CtUnar * Get the String value of the operator from the enum * * @param kind - * + * * @return */ private String getOperatorFromKind(BinaryOperatorKind kind) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java index 1202f303..ead19e39 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java @@ -185,7 +185,7 @@ private static void createVariableInContext(String thisName, TypeChecker tc, Ref * @param superFunction * @param subFunction * @param c - * + * * @return */ private static Predicate matchVariableNames(String fromName, String thisName, RefinedFunction superFunction, diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java index b64537cd..972c8c99 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java @@ -26,7 +26,7 @@ public class AuxStateHandler { * @param c * @param f * @param tc - * + * * @throws ParsingException */ @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -55,7 +55,7 @@ public static void handleConstructorState(CtConstructor c, RefinedFunction f, * @param anns * @param tc * @param element - * + * * @throws ParsingException */ @SuppressWarnings({ "rawtypes" }) @@ -119,7 +119,7 @@ private static List getDifferentSets(TypeChecker tc, String klass * @param method * @param f * @param tc - * + * * @throws ParsingException */ public static void handleMethodState(CtMethod method, RefinedFunction f, TypeChecker tc) @@ -139,7 +139,7 @@ public static void handleMethodState(CtMethod method, RefinedFunction f, Type * @param anns * @param tc * @param element - * + * * @throws ParsingException */ private static void setFunctionStates(RefinedFunction f, List> anns, @@ -224,7 +224,7 @@ private static Predicate getMissingStates(String t, TypeChecker tc, Predicate p) * @param th * @param sets * @param tc - * + * * @return */ private static Predicate addOldStates(Predicate p, Predicate th, List sets, TypeChecker tc) { @@ -401,7 +401,7 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { * @param name * @param map * @param invocation - * + * * @return */ private static Predicate changeState(TypeChecker tc, VariableInstance vi, @@ -463,10 +463,10 @@ private static Predicate changeState(TypeChecker tc, VariableInstance vi, /** * Method prepared to change all old vars in a predicate, however it has not been needed yet - * + * * @param pred * @param tc - * + * * @return */ private static Predicate changeVarsFields(Predicate pred, TypeChecker tc) { @@ -492,7 +492,7 @@ private static Predicate checkOldMentions(Predicate transitionedState, String in * @param variableInstance * @param name * @param invocation - * + * * @return */ private static Predicate sameState(TypeChecker tc, VariableInstance variableInstance, String name, @@ -521,7 +521,7 @@ private static Predicate sameState(TypeChecker tc, VariableInstance variableInst * @param prevInstance * @param transitionedState * @param invocation - * + * * @return */ private static String addInstanceWithState(TypeChecker tc, String superName, String name2, @@ -552,7 +552,7 @@ private static String addInstanceWithState(TypeChecker tc, String superName, Str * Gets the name of the parent target and adds the closest target to the elem TARGET metadata * * @param invocation - * + * * @return */ static String searchFistVariableTarget(TypeChecker tc, CtElement target2, CtElement invocation) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java index de738fa6..54dceaa7 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java @@ -47,7 +47,7 @@ public Predicate() { * @param ref * @param element * @param e - * + * * @throws ParsingException */ public Predicate(String ref, CtElement element, ErrorEmitter e) throws ParsingException { diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java index ae88693a..49426ca2 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java @@ -51,7 +51,7 @@ public void setChild(int index, Expression element) { * * @param from * @param to - * + * * @return */ public Expression substitute(Expression from, Expression to) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java index 47497094..55daed4a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java @@ -26,9 +26,9 @@ public static Expression createAST(String toParse) throws ParsingException { * The triple information of the ghost declaration in the order > * * @param s - * + * * @return - * + * * @throws ParsingException */ public static GhostDTO getGhostDeclaration(String s) throws ParsingException { @@ -86,7 +86,7 @@ private static ParseTree compile(String toParse) throws ParsingException { * First passage to check if there are syntax errors * * @param toParse - * + * * @return */ private static Optional getErrors(String toParse) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java index 4a16f36b..f0937af2 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java @@ -26,9 +26,9 @@ public AliasVisitor(CodePointCharStream input) { * Gets information about the alias * * @param rc - * + * * @return - * + * * @throws ParsingException */ public AliasDTO getAlias(ParseTree rc) throws ParsingException { @@ -55,7 +55,7 @@ public AliasDTO getAlias(ParseTree rc) throws ParsingException { * Returns text with whitespaces * * @param pred - * + * * @return */ private String getText(PredContext pred) { diff --git a/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java b/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java index dde5a751..b6bea536 100644 --- a/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java +++ b/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java @@ -19,7 +19,7 @@ public class TestExamples { /** * Test the file at the given path by launching the verifier and checking for errors. The file/directory is expected * to be either correct or contain an error based on its name. - * + * * @param filePath * path to the file to test */ @@ -48,9 +48,9 @@ public void testFile(final Path filePath) { /** * Returns a Stream of paths to test files in the testSuite directory. These include files with names starting with * "Correct" or "Error", and directories containing "correct" or "error". - * + * * @return Stream of paths to test files - * + * * @throws IOException * if an I/O error occurs or the path does not exist */ diff --git a/pom.xml b/pom.xml index 256318d9..0facf1ca 100644 --- a/pom.xml +++ b/pom.xml @@ -21,4 +21,4 @@ 1.8 1.8 - \ No newline at end of file + From b11fd2401f06f8f4e21f39d62a9466d014f6d7ed Mon Sep 17 00:00:00 2001 From: Guilherme Espada Date: Sun, 1 Dec 2024 18:11:09 +0000 Subject: [PATCH 2/4] Enable autofixing for future commits --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 58488d19..6740a032 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,4 +12,4 @@ repos: rev: v2.14.0 hooks: - id: pretty-format-java - args: [--palantir] + args: [--palantir, --autofix] From 012a81397062e33d44d9dbc5974c44483ca4763b Mon Sep 17 00:00:00 2001 From: Guilherme Espada Date: Thu, 12 Dec 2024 14:03:12 +0000 Subject: [PATCH 3/4] [chore] reformat everything --- .../src/main/java/example/NumericExample.java | 18 +- .../src/main/java/example/Simple.java | 16 +- .../src/main/java/example/ToSimple.java | 2 +- .../src/main/java/liquidjava/Main.java | 26 +- .../infer/InducedRefinementsParser.java | 59 ++-- .../specification/ExternalRefinementsFor.java | 12 +- .../java/liquidjava/specification/Ghost.java | 4 +- .../specification/GhostMultiple.java | 2 +- .../liquidjava/specification/Refinement.java | 10 +- .../specification/RefinementAlias.java | 2 +- .../RefinementAliasMultiple.java | 2 +- .../specification/RefinementPredicate.java | 2 +- .../RefinementPredicateMultiple.java | 2 +- .../specification/StateRefinement.java | 4 +- .../StateRefinementMultiple.java | 2 +- .../liquidjava/specification/StateSet.java | 2 +- .../liquidjava/specification/StateSets.java | 2 +- .../main/java/liquidjava/utils/Processor.java | 20 +- .../java/test/currentlyTesting/Account.java | 30 +- .../test/currentlyTesting/AccountClient.java | 14 +- .../test/currentlyTesting/SimpleTest.java | 8 +- .../testSuite/CorrectAfterIfUsingScope.java | 46 +-- .../src/main/java/testSuite/CorrectAlias.java | 16 +- .../testSuite/CorrectAliasExpressions.java | 18 +- .../java/testSuite/CorrectAliasMultiple.java | 12 +- .../CorrectArithmeticBinaryOperations.java | 30 +- .../CorrectAssignementAfterDeclaration.java | 30 +- .../CorrectBooleanLitAndInvocations.java | 28 +- .../CorrectChainedVariableReferences.java | 28 +- .../CorrectDependentRefinements.java | 64 ++-- .../java/testSuite/CorrectFPArithmetic.java | 52 ++-- .../CorrectFunctionCallSameVariableName.java | 32 +- .../CorrectFunctionDeclarations.java | 50 +-- .../CorrectFunctionInInvocation.java | 62 ++-- .../testSuite/CorrectFunctionInvocation.java | 24 +- .../testSuite/CorrectFunctionsTutorial.java | 54 ++-- .../main/java/testSuite/CorrectIfThen.java | 68 ++--- .../main/java/testSuite/CorrectImplies.java | 36 +-- .../main/java/testSuite/CorrectLongUsage.java | 54 ++-- .../testSuite/CorrectMethodInvocation.java | 42 +-- .../java/testSuite/CorrectNoRefinements.java | 28 +- .../CorrectPrimitiveNumbersTypes.java | 82 ++--- .../CorrectReadSpecificAssignment.java | 108 +++---- .../main/java/testSuite/CorrectRecursion.java | 10 +- .../testSuite/CorrectSearchIndexIntArray.java | 15 +- .../CorrectSearchValueIndexArray.java | 24 +- .../testSuite/CorrectSimpleAssignment.java | 16 +- .../java/testSuite/CorrectSimpleIfElse.java | 64 ++-- .../CorrectSpecificFunctionInvocation.java | 18 +- .../testSuite/CorrectTernaryExpression.java | 32 +- .../testSuite/CorrectTrafficLightRGB.java | 83 ++--- .../java/testSuite/CorrectUnaryOperators.java | 40 +-- .../java/testSuite/CorrectUsingAfterIf.java | 128 ++++---- .../src/main/java/testSuite/ErrorAfterIf.java | 20 +- .../main/java/testSuite/ErrorAfterIf2.java | 18 +- .../src/main/java/testSuite/ErrorAlias.java | 16 +- .../testSuite/ErrorAliasArgumentSize.java | 8 +- .../main/java/testSuite/ErrorAliasSimple.java | 8 +- .../testSuite/ErrorAliasTypeMismatch.java | 14 +- .../ErrorArithmeticBinaryOperations.java | 12 +- .../java/testSuite/ErrorArithmeticFP1.java | 8 +- .../java/testSuite/ErrorArithmeticFP2.java | 12 +- .../java/testSuite/ErrorArithmeticFP3.java | 12 +- .../java/testSuite/ErrorArithmeticFP4.java | 12 +- .../ErrorAssignementAfterDeclaration.java | 20 +- .../testSuite/ErrorBooleanFunInvocation.java | 28 +- .../java/testSuite/ErrorBooleanLiteral.java | 16 +- .../testSuite/ErrorDependentRefinement.java | 16 +- .../testSuite/ErrorFunctionDeclarations.java | 8 +- .../testSuite/ErrorFunctionInvocation.java | 22 +- .../testSuite/ErrorFunctionInvocation1.java | 42 +-- .../ErrorFunctionInvocationParams.java | 22 +- .../java/testSuite/ErrorGhostArgsTypes.java | 10 +- .../java/testSuite/ErrorGhostNumberArgs.java | 10 +- .../java/testSuite/ErrorIfAssignment.java | 18 +- .../java/testSuite/ErrorIfAssignment2.java | 10 +- ...rrorImplementationSearchValueIntArray.java | 18 +- .../java/testSuite/ErrorLenZeroIntArray.java | 22 +- .../main/java/testSuite/ErrorLongUsage1.java | 14 +- .../main/java/testSuite/ErrorLongUsage2.java | 20 +- .../testSuite/ErrorNoRefinementsInVar.java | 10 +- .../main/java/testSuite/ErrorRecursion1.java | 10 +- .../java/testSuite/ErrorSearchIntArray.java | 10 +- .../testSuite/ErrorSearchValueIntArray1.java | 24 +- .../testSuite/ErrorSearchValueIntArray2.java | 24 +- .../java/testSuite/ErrorSimpleAssignment.java | 8 +- .../testSuite/ErrorSpecificArithmetic.java | 20 +- .../java/testSuite/ErrorSpecificValuesIf.java | 26 +- .../testSuite/ErrorSpecificValuesIf2.java | 16 +- .../ErrorSpecificVarInRefinement.java | 12 +- .../ErrorSpecificVarInRefinementIf.java | 16 +- .../src/main/java/testSuite/ErrorSyntax1.java | 8 +- .../testSuite/ErrorTernaryExpression.java | 18 +- .../java/testSuite/ErrorTrafficLightRGB.java | 85 +++--- .../testSuite/ErrorTypeInRefinements.java | 10 +- .../java/testSuite/ErrorUnaryOpMinus.java | 10 +- .../java/testSuite/ErrorUnaryOperators.java | 16 +- .../src/main/java/testSuite/SimpleTest.java | 14 +- .../testSuite/classes/ErrorGhostState.java | 4 +- .../ArrayListRefinements.java | 14 +- .../classes/arraylist_correct/SimpleTest.java | 94 +++--- .../testSuite/classes/car_correct/Car.java | 30 +- .../testSuite/classes/car_correct/Test.java | 26 +- .../classes/email_correct/Email.java | 70 ++--- .../classes/email_correct/TestEmail.java | 20 +- .../testSuite/classes/email_error/Email.java | 70 ++--- .../classes/email_error/TestEmail.java | 16 +- .../InputStreamReaderRefs.java | 40 +-- .../classes/input_reader_correct/Test.java | 24 +- .../InputStreamReaderRefinements.java | 20 +- .../classes/input_reader_error/Test.java | 16 +- .../InputStreamReaderRefinements.java | 14 +- .../classes/input_reader_error2/Test.java | 14 +- .../classes/iterator_correct/Iterator.java | 24 +- .../classes/iterator_correct/Test.java | 14 +- .../classes/iterator_error/Iterator.java | 24 +- .../classes/iterator_error/Test.java | 10 +- .../classes/order_gift_correct/Order.java | 72 +++-- .../order_gift_correct/SimpleTest.java | 12 +- .../classes/order_gift_error/Order.java | 68 ++--- .../classes/order_gift_error/SimpleTest.java | 12 +- .../refs_from_interface_error/Bus.java | 8 +- .../refs_from_interface_error/ICar.java | 2 +- .../refs_from_interface_error/SimpleTest.java | 8 +- .../refs_from_superclass_error/Bus.java | 10 +- .../refs_from_superclass_error/Car.java | 4 +- .../SimpleTest.java | 8 +- .../refs_from_superclasses_correct/Bus.java | 46 +-- .../refs_from_superclasses_correct/Car.java | 6 +- .../socket_error/SocketRefinements.java | 20 +- .../testSuite/classes/socket_error/Test.java | 18 +- .../state_from_superclass_correct/Bus.java | 15 +- .../state_from_superclass_correct/Car.java | 10 +- .../SimpleTest.java | 68 ++--- .../InputStreamReaderRefinements.java | 14 +- .../SimpleTest.java | 72 ++--- .../InputStreamReaderRefinements.java | 16 +- .../state_multiple_error/SimpleTest.java | 12 +- .../traffic_light_correct/SimpleTest.java | 76 ++--- .../traffic_light_correct/TrafficLight.java | 90 +++--- .../field_updates/CorrectFieldUpdate.java | 16 +- .../field_updates/ErrorFieldUpdate.java | 16 +- .../InvocationFromMathLibrary.java | 288 +++++++++--------- .../correctInvocation/MathRefinements.java | 76 ++--- .../java/testSuite/math/errorAbs/MathAbs.java | 12 +- .../math/errorAbs/MathRefinements.java | 76 ++--- .../java/testSuite/math/errorMax/MathAbs.java | 12 +- .../math/errorMax/MathRefinements.java | 76 ++--- .../errorMultiplyExact/MathMultiplyExact.java | 16 +- .../errorMultiplyExact/MathRefinements.java | 76 ++--- .../main/java/testingInProgress/Account.java | 61 ++-- .../ArrayListRefinements.java | 20 +- .../src/main/java/testingInProgress/Car.java | 99 +++--- .../main/java/testingInProgress/Email.java | 71 ++--- .../InputStreamReaderRefinements.java | 17 +- .../main/java/testingInProgress/MyList.java | 19 +- .../main/java/testingInProgress/Order.java | 68 ++--- .../java/testingInProgress/OrderSimple.java | 62 ++-- .../java/testingInProgress/SimpleTest.java | 64 ++-- .../StringBuilderRefinements.java | 11 +- .../java/testingInProgress/TrafficLight.java | 73 ++--- .../liquidjava/api/CommandLineLauncher.java | 8 +- .../java/liquidjava/errors/ErrorEmitter.java | 7 +- .../java/liquidjava/errors/ErrorHandler.java | 73 +++-- .../processor/RefinementProcessor.java | 3 +- .../liquidjava/processor/VCImplication.java | 17 +- .../ann_generation/FieldGhostsGeneration.java | 3 +- .../processor/context/AliasWrapper.java | 7 +- .../liquidjava/processor/context/Context.java | 118 +++---- .../processor/context/GhostFunction.java | 9 +- .../processor/context/GhostParentState.java | 9 +- .../processor/context/ObjectState.java | 3 +- .../liquidjava/processor/context/Refined.java | 27 +- .../processor/context/RefinedFunction.java | 30 +- .../processor/context/RefinedVariable.java | 25 +- .../processor/context/Variable.java | 22 +- .../ExternalRefinementTypeChecker.java | 17 +- .../MethodsFirstChecker.java | 33 +- .../RefinementTypeChecker.java | 73 +++-- .../refinement_checker/TypeChecker.java | 65 ++-- .../refinement_checker/TypeCheckingUtils.java | 3 +- .../refinement_checker/VCChecker.java | 104 ++++--- .../MethodsFunctionsChecker.java | 106 ++++--- .../general_checkers/OperationsChecker.java | 178 +++++------ .../AuxHierarchyRefinememtsPassage.java | 114 ++++--- .../object_checkers/AuxStateHandler.java | 150 +++++---- .../rj_language/BuiltinFunctionPredicate.java | 7 +- .../liquidjava/rj_language/Predicate.java | 39 +-- .../rj_language/ast/AliasInvocation.java | 33 +- .../rj_language/ast/BinaryExpression.java | 125 ++++---- .../rj_language/ast/Expression.java | 18 +- .../rj_language/ast/FunctionInvocation.java | 42 +-- .../rj_language/ast/GroupExpression.java | 18 +- .../java/liquidjava/rj_language/ast/Ite.java | 37 +-- .../rj_language/ast/LiteralBoolean.java | 12 +- .../rj_language/ast/LiteralInt.java | 12 +- .../rj_language/ast/LiteralReal.java | 12 +- .../rj_language/ast/LiteralString.java | 15 +- .../rj_language/ast/UnaryExpression.java | 32 +- .../java/liquidjava/rj_language/ast/Var.java | 18 +- .../rj_language/ast/typing/TypeInfer.java | 56 ++-- .../rj_language/parsing/RJErrorListener.java | 36 ++- .../parsing/RefinementsParser.java | 12 +- .../rj_language/visitors/AliasVisitor.java | 3 +- .../visitors/CreateASTVisitor.java | 79 +++-- .../rj_language/visitors/GhostVisitor.java | 12 +- .../java/liquidjava/smt/SMTEvaluator.java | 3 +- .../liquidjava/smt/TranslatorContextToZ3.java | 84 ++--- .../java/liquidjava/smt/TranslatorToZ3.java | 79 ++--- .../src/main/java/liquidjava/utils/Utils.java | 30 +- .../liquidjava/api/tests/TestExamples.java | 21 +- 211 files changed, 3418 insertions(+), 3467 deletions(-) diff --git a/liquidjava-api/src/main/java/example/NumericExample.java b/liquidjava-api/src/main/java/example/NumericExample.java index fcf66de1..bb371388 100644 --- a/liquidjava-api/src/main/java/example/NumericExample.java +++ b/liquidjava-api/src/main/java/example/NumericExample.java @@ -20,15 +20,15 @@ public class NumericExample { - public static int test(int a, int b) { - int c = a / (b + a - 2); - if (c > 0) System.out.println(">0"); - else System.out.println("<=0"); + public static int test(int a, int b) { + int c = a / (b + a - 2); + if (c > 0) System.out.println(">0"); + else System.out.println("<=0"); - return c; - } + return c; + } - public static void main(String[] args) { - test(0, 0); - } + public static void main(String[] args) { + test(0, 0); + } } diff --git a/liquidjava-api/src/main/java/example/Simple.java b/liquidjava-api/src/main/java/example/Simple.java index 16501c3a..5fc93adb 100644 --- a/liquidjava-api/src/main/java/example/Simple.java +++ b/liquidjava-api/src/main/java/example/Simple.java @@ -5,15 +5,15 @@ @Refinement("super.x > 10") public class Simple extends ToSimple { - @Refinement("z > 0 && z > super.x") - private int z; + @Refinement("z > 0 && z > super.x") + private int z; - @Refinement("\\return == x + 1") - public static int function1(@Refinement("x > 0") final int x) { + @Refinement("\\return == x + 1") + public static int function1(@Refinement("x > 0") final int x) { - @Refinement("y > 0") - int y = x + 1; + @Refinement("y > 0") + int y = x + 1; - return y; - } + return y; + } } diff --git a/liquidjava-api/src/main/java/example/ToSimple.java b/liquidjava-api/src/main/java/example/ToSimple.java index 64632f2b..2881619d 100644 --- a/liquidjava-api/src/main/java/example/ToSimple.java +++ b/liquidjava-api/src/main/java/example/ToSimple.java @@ -2,5 +2,5 @@ public class ToSimple { - protected int x; + protected int x; } diff --git a/liquidjava-api/src/main/java/liquidjava/Main.java b/liquidjava-api/src/main/java/liquidjava/Main.java index 3fee297d..54579f95 100644 --- a/liquidjava-api/src/main/java/liquidjava/Main.java +++ b/liquidjava-api/src/main/java/liquidjava/Main.java @@ -8,25 +8,23 @@ /** Main class for the Repair system */ public class Main { - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { - List refinements = (new Processor()).getRefinement(new Simple()); + List refinements = (new Processor()).getRefinement(new Simple()); - List inducedRefinements = InducedRefinementsParser.parseRefinements("output3"); + List inducedRefinements = InducedRefinementsParser.parseRefinements("output3"); - System.out.println(refinements); - System.out.println(inducedRefinements); + System.out.println(refinements); + System.out.println(inducedRefinements); - String finalRefinement = ""; + String finalRefinement = ""; - if (!refinements.isEmpty()) { - finalRefinement += String.join(" && ", refinements); + if (!refinements.isEmpty()) { + finalRefinement += String.join(" && ", refinements); - if (!refinements.isEmpty()) - finalRefinement += " && " + String.join(" && ", inducedRefinements); - } else if (!inducedRefinements.isEmpty()) - finalRefinement = String.join(" && ", inducedRefinements); + if (!refinements.isEmpty()) finalRefinement += " && " + String.join(" && ", inducedRefinements); + } else if (!inducedRefinements.isEmpty()) finalRefinement = String.join(" && ", inducedRefinements); - System.out.println(finalRefinement); - } + System.out.println(finalRefinement); + } } diff --git a/liquidjava-api/src/main/java/liquidjava/infer/InducedRefinementsParser.java b/liquidjava-api/src/main/java/liquidjava/infer/InducedRefinementsParser.java index ac919ff3..913362f1 100644 --- a/liquidjava-api/src/main/java/liquidjava/infer/InducedRefinementsParser.java +++ b/liquidjava-api/src/main/java/liquidjava/infer/InducedRefinementsParser.java @@ -8,48 +8,47 @@ public class InducedRefinementsParser { - private static final String STARTER = - "====================================================== search started:"; - private static final String ENDER = "*************Summary***************"; + private static final String STARTER = "====================================================== search started:"; + private static final String ENDER = "*************Summary***************"; - public InducedRefinementsParser() { - // Does nothing - } + public InducedRefinementsParser() { + // Does nothing + } - public static List parseRefinements(String file) throws IOException { + public static List parseRefinements(String file) throws IOException { - List result = new ArrayList<>(); + List result = new ArrayList<>(); - try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { - String line = reader.readLine(); + String line = reader.readLine(); - boolean start = false; - boolean end = false; + boolean start = false; + boolean end = false; - while ((line = reader.readLine()) != null && !end) { - if (!start) { - start = line.startsWith(STARTER); - continue; - } else end = line.startsWith(ENDER); + while ((line = reader.readLine()) != null && !end) { + if (!start) { + start = line.startsWith(STARTER); + continue; + } else end = line.startsWith(ENDER); - if (start && !end) - if (line.contains("NPC constraint")) { + if (start && !end) + if (line.contains("NPC constraint")) { - line = reader.readLine(); + line = reader.readLine(); - while (line.endsWith("&&") || line.endsWith("||")) line += reader.readLine(); + while (line.endsWith("&&") || line.endsWith("||")) line += reader.readLine(); - if (line.startsWith("%")) line = line.substring(line.indexOf("%", 2) + 1); + if (line.startsWith("%")) line = line.substring(line.indexOf("%", 2) + 1); - result.add(line); - } - } + result.add(line); + } + } - } catch (IOException e) { - e.printStackTrace(); - } + } catch (IOException e) { + e.printStackTrace(); + } - return result; - } + return result; + } } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/ExternalRefinementsFor.java b/liquidjava-api/src/main/java/liquidjava/specification/ExternalRefinementsFor.java index 7f5ed24d..1ed03d84 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/ExternalRefinementsFor.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/ExternalRefinementsFor.java @@ -14,10 +14,10 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface ExternalRefinementsFor { - /** - * The prefix of the external method - * - * @return - */ - public String value(); + /** + * The prefix of the external method + * + * @return + */ + public String value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/Ghost.java b/liquidjava-api/src/main/java/liquidjava/specification/Ghost.java index 2449182b..7fb600e4 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/Ghost.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/Ghost.java @@ -14,8 +14,8 @@ * @author catarina gamboa */ @Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.TYPE }) +@Target({ElementType.TYPE}) @Repeatable(GhostMultiple.class) public @interface Ghost { - public String value(); + public String value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/GhostMultiple.java b/liquidjava-api/src/main/java/liquidjava/specification/GhostMultiple.java index 921b702e..8b42d74a 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/GhostMultiple.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/GhostMultiple.java @@ -13,5 +13,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface GhostMultiple { - Ghost[] value(); + Ghost[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/Refinement.java b/liquidjava-api/src/main/java/liquidjava/specification/Refinement.java index e0ddffee..ce3dc20a 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/Refinement.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/Refinement.java @@ -12,14 +12,8 @@ * @author catarina gamboa */ @Retention(RetentionPolicy.RUNTIME) -@Target({ - ElementType.METHOD, - ElementType.FIELD, - ElementType.LOCAL_VARIABLE, - ElementType.PARAMETER, - ElementType.TYPE -}) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.PARAMETER, ElementType.TYPE}) public @interface Refinement { - public String value(); + public String value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/RefinementAlias.java b/liquidjava-api/src/main/java/liquidjava/specification/RefinementAlias.java index 7760116b..5274514a 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/RefinementAlias.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/RefinementAlias.java @@ -16,5 +16,5 @@ @Target({ElementType.TYPE}) @Repeatable(RefinementAliasMultiple.class) public @interface RefinementAlias { - public String value(); + public String value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/RefinementAliasMultiple.java b/liquidjava-api/src/main/java/liquidjava/specification/RefinementAliasMultiple.java index b21214eb..a4b2256e 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/RefinementAliasMultiple.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/RefinementAliasMultiple.java @@ -13,5 +13,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface RefinementAliasMultiple { - RefinementAlias[] value(); + RefinementAlias[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicate.java b/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicate.java index 11763c34..aabea663 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicate.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicate.java @@ -10,5 +10,5 @@ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) @Repeatable(RefinementPredicateMultiple.class) public @interface RefinementPredicate { - public String value(); + public String value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicateMultiple.java b/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicateMultiple.java index 70e0cb29..3af7267b 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicateMultiple.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/RefinementPredicateMultiple.java @@ -8,5 +8,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) public @interface RefinementPredicateMultiple { - RefinementPredicate[] value(); + RefinementPredicate[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/StateRefinement.java b/liquidjava-api/src/main/java/liquidjava/specification/StateRefinement.java index 18b9f7bb..b652944b 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/StateRefinement.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/StateRefinement.java @@ -18,7 +18,7 @@ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) @Repeatable(StateRefinementMultiple.class) public @interface StateRefinement { - public String from() default ""; + public String from() default ""; - public String to() default ""; + public String to() default ""; } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/StateRefinementMultiple.java b/liquidjava-api/src/main/java/liquidjava/specification/StateRefinementMultiple.java index ae39c903..0280fcbe 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/StateRefinementMultiple.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/StateRefinementMultiple.java @@ -14,5 +14,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) public @interface StateRefinementMultiple { - StateRefinement[] value(); + StateRefinement[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/StateSet.java b/liquidjava-api/src/main/java/liquidjava/specification/StateSet.java index d16235e7..71549eca 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/StateSet.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/StateSet.java @@ -17,5 +17,5 @@ @Target({ElementType.TYPE}) @Repeatable(StateSets.class) public @interface StateSet { - public String[] value(); + public String[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/specification/StateSets.java b/liquidjava-api/src/main/java/liquidjava/specification/StateSets.java index 1af5a847..ecd10fdf 100644 --- a/liquidjava-api/src/main/java/liquidjava/specification/StateSets.java +++ b/liquidjava-api/src/main/java/liquidjava/specification/StateSets.java @@ -13,5 +13,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface StateSets { - StateSet[] value(); + StateSet[] value(); } diff --git a/liquidjava-api/src/main/java/liquidjava/utils/Processor.java b/liquidjava-api/src/main/java/liquidjava/utils/Processor.java index ef894f39..90f89d16 100644 --- a/liquidjava-api/src/main/java/liquidjava/utils/Processor.java +++ b/liquidjava-api/src/main/java/liquidjava/utils/Processor.java @@ -7,19 +7,19 @@ public class Processor { - public List getRefinement(Object object) throws Exception { + public List getRefinement(Object object) throws Exception { - List result = new ArrayList<>(); + List result = new ArrayList<>(); - Class clazz = object.getClass(); + Class clazz = object.getClass(); - for (Method method : clazz.getDeclaredMethods()) { - method.setAccessible(true); + for (Method method : clazz.getDeclaredMethods()) { + method.setAccessible(true); - if (method.isAnnotationPresent(Refinement.class)) - result.add(method.getAnnotation(Refinement.class).value().toString()); - } + if (method.isAnnotationPresent(Refinement.class)) + result.add(method.getAnnotation(Refinement.class).value().toString()); + } - return result; - } + return result; + } } diff --git a/liquidjava-example/src/main/java/test/currentlyTesting/Account.java b/liquidjava-example/src/main/java/test/currentlyTesting/Account.java index 3fa8a637..9a693d90 100644 --- a/liquidjava-example/src/main/java/test/currentlyTesting/Account.java +++ b/liquidjava-example/src/main/java/test/currentlyTesting/Account.java @@ -7,20 +7,20 @@ // @Ghost("int amount") // @StateSet({"positive", "negative"}) public class Account { - // int qnt; - // - // @StateRefinement(from="positive(this)", - // to="(amount(this) == amount(old(this)) - x) && " + - // "(amount(this) < 0? negative(this):positive(this))") - //// @StateRefinement(to="(amount(this) == amount(old(this)) - x)") - // public int withdraw(int x) { - // qnt -= x; - // return qnt; - // } - // - // @StateRefinement(to="amount(this) == amount(old(this)) + x") - // public void add(int x) { - // qnt += x; - // } + // int qnt; + // + // @StateRefinement(from="positive(this)", + // to="(amount(this) == amount(old(this)) - x) && " + + // "(amount(this) < 0? negative(this):positive(this))") + //// @StateRefinement(to="(amount(this) == amount(old(this)) - x)") + // public int withdraw(int x) { + // qnt -= x; + // return qnt; + // } + // + // @StateRefinement(to="amount(this) == amount(old(this)) + x") + // public void add(int x) { + // qnt += x; + // } } diff --git a/liquidjava-example/src/main/java/test/currentlyTesting/AccountClient.java b/liquidjava-example/src/main/java/test/currentlyTesting/AccountClient.java index 9c7d88a8..ebc73ae2 100644 --- a/liquidjava-example/src/main/java/test/currentlyTesting/AccountClient.java +++ b/liquidjava-example/src/main/java/test/currentlyTesting/AccountClient.java @@ -3,12 +3,12 @@ // @StateSet({"active", "inactive"}) public class AccountClient { - // @StateRefinement(from="active(this)", to="active(this)") - // public boolean transfer(Account from, Account to, @Refinement("amount(from) >= value") int - // value) { - // from.withdraw(value); - // to.add(value); - // return true; - // } + // @StateRefinement(from="active(this)", to="active(this)") + // public boolean transfer(Account from, Account to, @Refinement("amount(from) >= value") int + // value) { + // from.withdraw(value); + // to.add(value); + // return true; + // } } diff --git a/liquidjava-example/src/main/java/test/currentlyTesting/SimpleTest.java b/liquidjava-example/src/main/java/test/currentlyTesting/SimpleTest.java index fc8d6c5d..48999074 100644 --- a/liquidjava-example/src/main/java/test/currentlyTesting/SimpleTest.java +++ b/liquidjava-example/src/main/java/test/currentlyTesting/SimpleTest.java @@ -4,10 +4,10 @@ class SimpleTest { - @Refinement("return > 0") - public int test() { - return 10; - } + @Refinement("return > 0") + public int test() { + return 10; + } } // @RefinementAlias("Percentage(int x) { 0 <= x && x <= 100 }") diff --git a/liquidjava-example/src/main/java/testSuite/CorrectAfterIfUsingScope.java b/liquidjava-example/src/main/java/testSuite/CorrectAfterIfUsingScope.java index c0622ec1..1568d95b 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectAfterIfUsingScope.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectAfterIfUsingScope.java @@ -4,32 +4,32 @@ @SuppressWarnings("unused") public class CorrectAfterIfUsingScope { - public static void main(String[] args) { - // Example 1 - @Refinement("_ < 100") - int ielse = 90; + public static void main(String[] args) { + // Example 1 + @Refinement("_ < 100") + int ielse = 90; - @Refinement("_ < 10") - int then = 7; - if (then > 6) then = then - 2; - else ielse = 5; + @Refinement("_ < 10") + int then = 7; + if (then > 6) then = then - 2; + else ielse = 5; - @Refinement("_ == 7 || _ == 5") - int some = then; - @Refinement("_ == 5 || _==90") - int thing = ielse; + @Refinement("_ == 7 || _ == 5") + int some = then; + @Refinement("_ == 5 || _==90") + int thing = ielse; - // EXAMPLE 2 - @Refinement("_ < 100") - int value = 90; + // EXAMPLE 2 + @Refinement("_ < 100") + int value = 90; - if (value > 6) { - @Refinement("_ > 10") - int innerScope = 30; - value = innerScope; - } + if (value > 6) { + @Refinement("_ > 10") + int innerScope = 30; + value = innerScope; + } - @Refinement("_ == 30 || _ == 90") - int some2 = value; - } + @Refinement("_ == 30 || _ == 90") + int some2 = value; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectAlias.java b/liquidjava-example/src/main/java/testSuite/CorrectAlias.java index 65fbd266..b71289cc 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectAlias.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectAlias.java @@ -7,13 +7,13 @@ @RefinementAlias("type PtGrade(int x) { x >= 0 && x <= 20}") public class CorrectAlias { - public static void main(String[] args) { - @Refinement("PtGrade(_) && _ >= 10") - int positiveGrade = 15; + public static void main(String[] args) { + @Refinement("PtGrade(_) && _ >= 10") + int positiveGrade = 15; - @Refinement("_ > 5 && _ < 18") - int nGrade = 10; - @Refinement("PtGrade(_) && PtGrade(nGrade)") - int positiveGrade2 = 15; - } + @Refinement("_ > 5 && _ < 18") + int nGrade = 10; + @Refinement("PtGrade(_) && PtGrade(nGrade)") + int positiveGrade2 = 15; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectAliasExpressions.java b/liquidjava-example/src/main/java/testSuite/CorrectAliasExpressions.java index bc0e1dc4..92763e59 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectAliasExpressions.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectAliasExpressions.java @@ -6,15 +6,15 @@ @RefinementAlias("InRange(int val, int low, int up) {low < val && val < up}") public class CorrectAliasExpressions { - @Refinement("InRange( _, 10, 16)") - public static int getNum() { - return 15; - } + @Refinement("InRange( _, 10, 16)") + public static int getNum() { + return 15; + } - @SuppressWarnings("unused") - public static void main(String[] args) { + @SuppressWarnings("unused") + public static void main(String[] args) { - @Refinement("InRange( _, 10, 122+5)") - int j = getNum(); - } + @Refinement("InRange( _, 10, 122+5)") + int j = getNum(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectAliasMultiple.java b/liquidjava-example/src/main/java/testSuite/CorrectAliasMultiple.java index 719de863..0cd83807 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectAliasMultiple.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectAliasMultiple.java @@ -8,11 +8,11 @@ @RefinementAlias("type PtGrade(double x) { x >= 0 && x <= 20}") public class CorrectAliasMultiple { - public static void main(String[] args) { - @Refinement("PtGrade(_)") - double positiveGrade2 = 20 * 0.5 + 20 * 0.5; + public static void main(String[] args) { + @Refinement("PtGrade(_)") + double positiveGrade2 = 20 * 0.5 + 20 * 0.5; - @Refinement("Positive(_)") - double positive = positiveGrade2; - } + @Refinement("Positive(_)") + double positive = positiveGrade2; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectArithmeticBinaryOperations.java b/liquidjava-example/src/main/java/testSuite/CorrectArithmeticBinaryOperations.java index f3276865..5e2d9c2a 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectArithmeticBinaryOperations.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectArithmeticBinaryOperations.java @@ -4,19 +4,19 @@ @SuppressWarnings("unused") public class CorrectArithmeticBinaryOperations { - public static void main(String[] args) { - // Arithmetic Binary Operations - @Refinement("a == 10") - int a = 10; - @Refinement("b != 10") - int b = 5; - @Refinement("t > 0") - int t = a + 1; - @Refinement("_ >= 9") - int k = a - 1; - @Refinement("_ >= 5") - int l = k * t; - @Refinement("_ > 0") - int m = l / 2; - } + public static void main(String[] args) { + // Arithmetic Binary Operations + @Refinement("a == 10") + int a = 10; + @Refinement("b != 10") + int b = 5; + @Refinement("t > 0") + int t = a + 1; + @Refinement("_ >= 9") + int k = a - 1; + @Refinement("_ >= 5") + int l = k * t; + @Refinement("_ > 0") + int m = l / 2; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectAssignementAfterDeclaration.java b/liquidjava-example/src/main/java/testSuite/CorrectAssignementAfterDeclaration.java index 202e5f60..6c9c7aa7 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectAssignementAfterDeclaration.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectAssignementAfterDeclaration.java @@ -4,19 +4,19 @@ @SuppressWarnings("unused") public class CorrectAssignementAfterDeclaration { - public static void main(String[] args) { - @Refinement("(z > 0) && (z < 50)") - int z = 1; - @Refinement("u < 100") - int u = 10; - u = 11 + z; - u = z * 2; - u = 30 + z; - @Refinement("_ > 0") - int n = 1; - n = z + n + 1 * n; - @Refinement("y > 0") - int y = 15; - y = y * y; - } + public static void main(String[] args) { + @Refinement("(z > 0) && (z < 50)") + int z = 1; + @Refinement("u < 100") + int u = 10; + u = 11 + z; + u = z * 2; + u = 30 + z; + @Refinement("_ > 0") + int n = 1; + n = z + n + 1 * n; + @Refinement("y > 0") + int y = 15; + y = y * y; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectBooleanLitAndInvocations.java b/liquidjava-example/src/main/java/testSuite/CorrectBooleanLitAndInvocations.java index 22d337cc..ab50b19b 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectBooleanLitAndInvocations.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectBooleanLitAndInvocations.java @@ -4,23 +4,23 @@ @SuppressWarnings("unused") public class CorrectBooleanLitAndInvocations { - @Refinement("_ == (n > 10)") - public static boolean greaterThanTen(int n) { - return n > 10; - } + @Refinement("_ == (n > 10)") + public static boolean greaterThanTen(int n) { + return n > 10; + } - public static void main(String[] args) { + public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + @Refinement("_ < 10") + int a = 5; - @Refinement("_ == true") - boolean k = (a < 11); + @Refinement("_ == true") + boolean k = (a < 11); - @Refinement("_ == true") - boolean o = !(a == 12); + @Refinement("_ == true") + boolean o = !(a == 12); - @Refinement("_ == false") - boolean m = greaterThanTen(a); - } + @Refinement("_ == false") + boolean m = greaterThanTen(a); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectChainedVariableReferences.java b/liquidjava-example/src/main/java/testSuite/CorrectChainedVariableReferences.java index c368c2d2..04e51f64 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectChainedVariableReferences.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectChainedVariableReferences.java @@ -4,23 +4,23 @@ @SuppressWarnings("unused") public class CorrectChainedVariableReferences { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - @Refinement("_ > a && _ < 20") - int b = 18; + @Refinement("_ > a && _ < 20") + int b = 18; - @Refinement("_ > b && _ < 60") - int c = 40; + @Refinement("_ > b && _ < 60") + int c = 40; - @Refinement("true") - int d = c; + @Refinement("true") + int d = c; - @Refinement("_ > c") - int e = 80; + @Refinement("_ > c") + int e = 80; - @Refinement("_ > (c+c)") - int f = 8000; - } + @Refinement("_ > (c+c)") + int f = 8000; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectDependentRefinements.java b/liquidjava-example/src/main/java/testSuite/CorrectDependentRefinements.java index 1cfecc7a..82cd8bdd 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectDependentRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectDependentRefinements.java @@ -4,40 +4,40 @@ @SuppressWarnings("unused") public class CorrectDependentRefinements { - public static void main(String[] args) { + public static void main(String[] args) { - @Refinement("_ < 10") - int smaller = 5; - @Refinement("bigger > 20") - int bigger = 50; - @Refinement("_ > smaller && _ < bigger") - int middle = 15; + @Refinement("_ < 10") + int smaller = 5; + @Refinement("bigger > 20") + int bigger = 50; + @Refinement("_ > smaller && _ < bigger") + int middle = 15; - @Refinement("_ >= smaller") - int k = 10; - @Refinement("_ <= bigger") - int y = 10; + @Refinement("_ >= smaller") + int k = 10; + @Refinement("_ <= bigger") + int y = 10; - @Refinement("_ == 20") - int x1 = 20; - @Refinement("_ == x1 + 1") - int x2 = 21; - @Refinement("_ == x1 - 1") - int x3 = 19; - @Refinement("_ == x1 * 5") - int x4 = x1 * 5; - @Refinement("_ == x1 / 2") - int x5 = 10; - @Refinement("_ == x1 % 2") - int x6 = 0; - @Refinement("(-x7) < x1") - int x7 = 0; - @Refinement("_ != x1") - int x8 = 0; + @Refinement("_ == 20") + int x1 = 20; + @Refinement("_ == x1 + 1") + int x2 = 21; + @Refinement("_ == x1 - 1") + int x3 = 19; + @Refinement("_ == x1 * 5") + int x4 = x1 * 5; + @Refinement("_ == x1 / 2") + int x5 = 10; + @Refinement("_ == x1 % 2") + int x6 = 0; + @Refinement("(-x7) < x1") + int x7 = 0; + @Refinement("_ != x1") + int x8 = 0; - @Refinement("_ == 30") - int o = 30; - @Refinement("_ == x1 || _ == o ") - int x9 = 20; - } + @Refinement("_ == 30") + int o = 30; + @Refinement("_ == x1 || _ == o ") + int x9 = 20; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFPArithmetic.java b/liquidjava-example/src/main/java/testSuite/CorrectFPArithmetic.java index c0be3eff..27978e82 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFPArithmetic.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFPArithmetic.java @@ -4,41 +4,41 @@ @SuppressWarnings("unused") public class CorrectFPArithmetic { - public static void main(String[] args) { - @Refinement("_ > 5.0") - double a = 5.5; + public static void main(String[] args) { + @Refinement("_ > 5.0") + double a = 5.5; - @Refinement("_ == 10.0") - double b = 10.0; + @Refinement("_ == 10.0") + double b = 10.0; - @Refinement("_ != 10.0") - double c = 5.0; + @Refinement("_ != 10.0") + double c = 5.0; - @Refinement("t > 0.0") - double t = a + 1.0; + @Refinement("t > 0.0") + double t = a + 1.0; - @Refinement("_ >= 3.0") - double k = a - 1.0; + @Refinement("_ >= 3.0") + double k = a - 1.0; - @Refinement("_ > 0.0") - double l = k * t; + @Refinement("_ > 0.0") + double l = k * t; - @Refinement("_ > 0.0") - double m = l / 2.0; + @Refinement("_ > 0.0") + double m = l / 2.0; - @Refinement("_ < 4.0") - double n = 6.0 % 4.0; + @Refinement("_ < 4.0") + double n = 6.0 % 4.0; - @Refinement("_ < 0.0") - double p = -5.0; + @Refinement("_ < 0.0") + double p = -5.0; - @Refinement("_ <= 0.0") - double p1 = -a; + @Refinement("_ <= 0.0") + double p1 = -a; - @Refinement("_ < -1.0") - double p3 = p; + @Refinement("_ < -1.0") + double p3 = p; - @Refinement("_ < -5.5") - double d = (-a) - 2.0; - } + @Refinement("_ < -5.5") + double d = (-a) - 2.0; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFunctionCallSameVariableName.java b/liquidjava-example/src/main/java/testSuite/CorrectFunctionCallSameVariableName.java index 39d5262b..97d46c94 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFunctionCallSameVariableName.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFunctionCallSameVariableName.java @@ -4,25 +4,25 @@ @SuppressWarnings("unused") public class CorrectFunctionCallSameVariableName { - @Refinement(" _ == a + 1") - private static int addOnes(@Refinement("a > 20") int a) { - return a + 1; - } + @Refinement(" _ == a + 1") + private static int addOnes(@Refinement("a > 20") int a) { + return a + 1; + } - public static void main(String[] args) { - @Refinement("_ > 0") - int a = 6; + public static void main(String[] args) { + @Refinement("_ > 0") + int a = 6; - @Refinement("_ > 20") - int b = addOnes(50) + a; + @Refinement("_ > 20") + int b = addOnes(50) + a; - @Refinement("_ > 10") - int c = addOnes(a + 90); + @Refinement("_ > 10") + int c = addOnes(a + 90); - @Refinement("_ < 0") - int d = -addOnes(a + 90); + @Refinement("_ < 0") + int d = -addOnes(a + 90); - @Refinement("_ > 0") - int e = addOnes(a + 100); - } + @Refinement("_ > 0") + int e = addOnes(a + 100); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFunctionDeclarations.java b/liquidjava-example/src/main/java/testSuite/CorrectFunctionDeclarations.java index 9766a117..d015e357 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFunctionDeclarations.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFunctionDeclarations.java @@ -4,33 +4,33 @@ public class CorrectFunctionDeclarations { - @Refinement("_ >= a") - public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { - @Refinement("y > 30") - int y = 50; - return y - 10; - } + @Refinement("_ >= a") + public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { + @Refinement("y > 30") + int y = 50; + return y - 10; + } - @Refinement("_ > 10") - public static int positive() { - return 100; - } + @Refinement("_ > 10") + public static int positive() { + return 100; + } - @Refinement("_ >= d && _ < i") - private static int range(@Refinement("d >= 0") int d, @Refinement("i > d") int i) { - return d; - } + @Refinement("_ >= d && _ < i") + private static int range(@Refinement("d >= 0") int d, @Refinement("i > d") int i) { + return d; + } - @Refinement("_ == 3 * x") - private static int triplePositives(@Refinement("x > 0") int x) { - return x + x + x; - } + @Refinement("_ == 3 * x") + private static int triplePositives(@Refinement("x > 0") int x) { + return x + x + x; + } - @Refinement("(_ == -1) || (_ == a*b)") - public int getPositiveMult(int a, int b) { - int result; - if (a > 0 && b > 0) result = a * b; - else result = -1; - return result; - } + @Refinement("(_ == -1) || (_ == a*b)") + public int getPositiveMult(int a, int b) { + int result; + if (a > 0 && b > 0) result = a * b; + else result = -1; + return result; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFunctionInInvocation.java b/liquidjava-example/src/main/java/testSuite/CorrectFunctionInInvocation.java index 803c4125..dd966cd7 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFunctionInInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFunctionInInvocation.java @@ -4,35 +4,35 @@ @SuppressWarnings("unused") public class CorrectFunctionInInvocation { - @Refinement("_ >= a") - public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { - @Refinement("y > 30") - int y = 50; - return y - 10; - } - - @Refinement("_ == 10") - public static int ten() { - return 10; - } - - @Refinement("_ == b*2") - private static int multTwo(int b) { - return b * 2; - } - - public static void main(String[] args) { - @Refinement("_ >= 0") - int p = 10; - p = posMult(ten(), 4); - - @Refinement("_ < 6") - int z = 5; - - @Refinement("_ > 6") - int x = multTwo(z); - - @Refinement("_ == 20") - int y = multTwo(x); - } + @Refinement("_ >= a") + public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { + @Refinement("y > 30") + int y = 50; + return y - 10; + } + + @Refinement("_ == 10") + public static int ten() { + return 10; + } + + @Refinement("_ == b*2") + private static int multTwo(int b) { + return b * 2; + } + + public static void main(String[] args) { + @Refinement("_ >= 0") + int p = 10; + p = posMult(ten(), 4); + + @Refinement("_ < 6") + int z = 5; + + @Refinement("_ > 6") + int x = multTwo(z); + + @Refinement("_ == 20") + int y = multTwo(x); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFunctionInvocation.java b/liquidjava-example/src/main/java/testSuite/CorrectFunctionInvocation.java index 7336be49..c13859b7 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFunctionInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFunctionInvocation.java @@ -4,17 +4,17 @@ @SuppressWarnings("unused") public class CorrectFunctionInvocation { - @Refinement("_ >= a") - public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { - @Refinement("y > 30") - int y = 50; - return y - 10; - } + @Refinement("_ >= a") + public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { + @Refinement("y > 30") + int y = 50; + return y - 10; + } - public static void main(String[] args) { - @Refinement("_ >= 0") - int p = 10; - p = posMult(10, 3); - p = posMult(10, 15 - 6); - } + public static void main(String[] args) { + @Refinement("_ >= 0") + int p = 10; + p = posMult(10, 3); + p = posMult(10, 15 - 6); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectFunctionsTutorial.java b/liquidjava-example/src/main/java/testSuite/CorrectFunctionsTutorial.java index c5bcb6fc..7afab433 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectFunctionsTutorial.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectFunctionsTutorial.java @@ -4,35 +4,35 @@ public class CorrectFunctionsTutorial { - @Refinement("_ >= 0 && _ >= n") - public static int sum(int n) { - if (n <= 0) return 0; - else { - int t1 = sum(n - 1); - return n + t1; + @Refinement("_ >= 0 && _ >= n") + public static int sum(int n) { + if (n <= 0) return 0; + else { + int t1 = sum(n - 1); + return n + t1; + } } - } - @Refinement("_ >= 0 && _ >= n") - public static int absolute(int n) { - if (0 <= n) return n; - else return 0 - n; - } + @Refinement("_ >= 0 && _ >= n") + public static int absolute(int n) { + if (0 <= n) return n; + else return 0 - n; + } - // From LiquidHaskell tutorial - @Refinement("length(_) == length(vec1)") - static int[] sumVectors(int[] vec1, @Refinement("length(vec1) == length(vec2)") int[] vec2) { - int[] add = new int[vec1.length]; - if (vec1.length > 0) auxSum(add, vec1, vec2, 0); - return add; - } + // From LiquidHaskell tutorial + @Refinement("length(_) == length(vec1)") + static int[] sumVectors(int[] vec1, @Refinement("length(vec1) == length(vec2)") int[] vec2) { + int[] add = new int[vec1.length]; + if (vec1.length > 0) auxSum(add, vec1, vec2, 0); + return add; + } - private static void auxSum( - int[] add, - int[] vec1, - @Refinement("length(vec1) == length(vec2) && length(_) == length(add)") int[] vec2, - @Refinement("_ >= 0 && _ < length(vec2)") int i) { - add[i] = vec1[i] + vec2[i]; - if (i < add.length - 1) auxSum(add, vec1, vec2, i + 1); - } + private static void auxSum( + int[] add, + int[] vec1, + @Refinement("length(vec1) == length(vec2) && length(_) == length(add)") int[] vec2, + @Refinement("_ >= 0 && _ < length(vec2)") int i) { + add[i] = vec1[i] + vec2[i]; + if (i < add.length - 1) auxSum(add, vec1, vec2, i + 1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectIfThen.java b/liquidjava-example/src/main/java/testSuite/CorrectIfThen.java index fc155dd7..c7fa9119 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectIfThen.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectIfThen.java @@ -5,44 +5,44 @@ @SuppressWarnings("unused") public class CorrectIfThen { - public void have2(int a, int b) { - @Refinement("pos > 0") - int pos = 10; - if (a > 0) { - if (a > b) pos = a - b; + public void have2(int a, int b) { + @Refinement("pos > 0") + int pos = 10; + if (a > 0) { + if (a > b) pos = a - b; + } } - } - public void have1(int a) { - @Refinement("pos > 0") - int pos = 10; - if (a > 0) { - pos = 5; - pos = 8; - pos = 30; + public void have1(int a) { + @Refinement("pos > 0") + int pos = 10; + if (a > 0) { + pos = 5; + pos = 8; + pos = 30; + } + @Refinement("_ == 30 || _ == 10") + int u = pos; } - @Refinement("_ == 30 || _ == 10") - int u = pos; - } - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - if (a > 0) { - @Refinement("b > 0") - int b = a; - b++; - if (b > 10) { - @Refinement("_ > 0") - int c = a; - @Refinement("_ > 11") - int d = b + 1; - } - if (a > b) { - @Refinement("_ > b") - int c = a; - } + if (a > 0) { + @Refinement("b > 0") + int b = a; + b++; + if (b > 10) { + @Refinement("_ > 0") + int c = a; + @Refinement("_ > 11") + int d = b + 1; + } + if (a > b) { + @Refinement("_ > b") + int c = a; + } + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectImplies.java b/liquidjava-example/src/main/java/testSuite/CorrectImplies.java index 1745a73c..996bfd0a 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectImplies.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectImplies.java @@ -4,27 +4,27 @@ @SuppressWarnings("unused") public class CorrectImplies { - @Refinement("((arg0 < 0) --> (_ == (-arg0*2))) && ((arg0 >= 0) --> (_ == arg0*2))") - private static int getPositiveDouble(int arg0) { - if (arg0 < 0) return -arg0 * 2; - else return arg0 * 2; - } + @Refinement("((arg0 < 0) --> (_ == (-arg0*2))) && ((arg0 >= 0) --> (_ == arg0*2))") + private static int getPositiveDouble(int arg0) { + if (arg0 < 0) return -arg0 * 2; + else return arg0 * 2; + } - public static void main(String[] args) { - @Refinement("_ > 5") - int x = 10; + public static void main(String[] args) { + @Refinement("_ > 5") + int x = 10; - // @Refinement("(x > 50) --> (y > 50)") - // int y = x; - // - // @Refinement("y > 1 --> z > 2") - // int z = y*2; + // @Refinement("(x > 50) --> (y > 50)") + // int y = x; + // + // @Refinement("y > 1 --> z > 2") + // int z = y*2; - @Refinement("_ == 12") - int z0 = getPositiveDouble(6); + @Refinement("_ == 12") + int z0 = getPositiveDouble(6); - // @Refinement("z > 0 --> _ > 0") //works but takes 1min to run - // int z1 = getPositiveDouble(z); + // @Refinement("z > 0 --> _ > 0") //works but takes 1min to run + // int z1 = getPositiveDouble(z); - } + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectLongUsage.java b/liquidjava-example/src/main/java/testSuite/CorrectLongUsage.java index 6d890530..30ac3840 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectLongUsage.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectLongUsage.java @@ -5,35 +5,35 @@ @SuppressWarnings("unused") public class CorrectLongUsage { - @Refinement("_ > 10") - public static long doubleBiggerThanTen(@Refinement("a > 10") int a) { - return a * 2; - } - - @Refinement("_ > 40") - public static long doubleBiggerThanTwenty(@Refinement("a > 20") long a) { - return a * 2; - } - - public static void main(String[] args) { - @Refinement("a > 5") - long a = 9L; - - if (a > 5) { - @Refinement("b > 50") - long b = a * 10; - - @Refinement("c < 0") - long c = -a; + @Refinement("_ > 10") + public static long doubleBiggerThanTen(@Refinement("a > 10") int a) { + return a * 2; + } + + @Refinement("_ > 40") + public static long doubleBiggerThanTwenty(@Refinement("a > 20") long a) { + return a * 2; } - @Refinement("d > 10") - long d = doubleBiggerThanTen(100); + public static void main(String[] args) { + @Refinement("a > 5") + long a = 9L; - @Refinement("e > 10") - long e = doubleBiggerThanTwenty(d * 2); + if (a > 5) { + @Refinement("b > 50") + long b = a * 10; - @Refinement("_ > 10") - long f = doubleBiggerThanTwenty(2 * 80); - } + @Refinement("c < 0") + long c = -a; + } + + @Refinement("d > 10") + long d = doubleBiggerThanTen(100); + + @Refinement("e > 10") + long e = doubleBiggerThanTwenty(d * 2); + + @Refinement("_ > 10") + long f = doubleBiggerThanTwenty(2 * 80); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectMethodInvocation.java b/liquidjava-example/src/main/java/testSuite/CorrectMethodInvocation.java index f11c1f1e..0af99e34 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectMethodInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectMethodInvocation.java @@ -5,29 +5,29 @@ @SuppressWarnings("unused") public class CorrectMethodInvocation { - @Refinement("_ == 2") - private static int getTwo() { - return 1 + 1; - } + @Refinement("_ == 2") + private static int getTwo() { + return 1 + 1; + } - @Refinement("_ == 0") - private static int getZero() { - return 0; - } - - @Refinement("_ == 1") - private static int getOne() { @Refinement("_ == 0") - int a = getZero(); - return a + 1; - } + private static int getZero() { + return 0; + } + + @Refinement("_ == 1") + private static int getOne() { + @Refinement("_ == 0") + int a = getZero(); + return a + 1; + } - public static void main(String[] args) { - @Refinement("_ < 1") - int b = getZero(); + public static void main(String[] args) { + @Refinement("_ < 1") + int b = getZero(); - @Refinement("_ > 0") - int c = getOne(); - c = getTwo(); - } + @Refinement("_ > 0") + int c = getOne(); + c = getTwo(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectNoRefinements.java b/liquidjava-example/src/main/java/testSuite/CorrectNoRefinements.java index df341f2d..209564ea 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectNoRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectNoRefinements.java @@ -2,21 +2,21 @@ @SuppressWarnings("unused") public class CorrectNoRefinements { - private static int addOne(int i) { - return i + 1; - } + private static int addOne(int i) { + return i + 1; + } - private static int one() { - return 1; - } + private static int one() { + return 1; + } - public static void main(String[] args) { + public static void main(String[] args) { - int a = one(); - int b = a; - int c = a * b + 50 + addOne(5); - b = 5; - int s = a + 10; - s++; - } + int a = one(); + int b = a; + int c = a * b + 50 + addOne(5); + b = 5; + int s = a + 10; + s++; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectPrimitiveNumbersTypes.java b/liquidjava-example/src/main/java/testSuite/CorrectPrimitiveNumbersTypes.java index 7d40b2f5..87685b08 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectPrimitiveNumbersTypes.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectPrimitiveNumbersTypes.java @@ -4,45 +4,45 @@ @SuppressWarnings("unused") public class CorrectPrimitiveNumbersTypes { - @Refinement("_ < i && _ > 0") - private static double fromType(@Refinement("_ > 0") int i) { - return i * 0.1; - } - - @Refinement(" _ < i && _ > 0") - private static double fromType(@Refinement("_ > 0") long i) { - return i * 0.1; - } - - @Refinement(" _ < i && _ > 0") - private static double fromType(@Refinement("_ > 0") short i) { - return i * 0.1; - } - - @Refinement("_ > i") - private static float twice(@Refinement("i > 0") short i) { - return i * 2f; - } - - public static void main(String[] args) { - @Refinement("_ > 5") - int a = 10; - - @Refinement("_ > 5") - long b = 100; - - @Refinement("_ > 5") - short c = 10; - - @Refinement("_ > 5") - float d = 7.4f; - - @Refinement("_ > 0") - double e = fromType(a); - e = fromType(b); - e = fromType(c); - - @Refinement("f > 0") - float f = twice(c); - } + @Refinement("_ < i && _ > 0") + private static double fromType(@Refinement("_ > 0") int i) { + return i * 0.1; + } + + @Refinement(" _ < i && _ > 0") + private static double fromType(@Refinement("_ > 0") long i) { + return i * 0.1; + } + + @Refinement(" _ < i && _ > 0") + private static double fromType(@Refinement("_ > 0") short i) { + return i * 0.1; + } + + @Refinement("_ > i") + private static float twice(@Refinement("i > 0") short i) { + return i * 2f; + } + + public static void main(String[] args) { + @Refinement("_ > 5") + int a = 10; + + @Refinement("_ > 5") + long b = 100; + + @Refinement("_ > 5") + short c = 10; + + @Refinement("_ > 5") + float d = 7.4f; + + @Refinement("_ > 0") + double e = fromType(a); + e = fromType(b); + e = fromType(c); + + @Refinement("f > 0") + float f = twice(c); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectReadSpecificAssignment.java b/liquidjava-example/src/main/java/testSuite/CorrectReadSpecificAssignment.java index edad3114..5749760d 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectReadSpecificAssignment.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectReadSpecificAssignment.java @@ -4,60 +4,60 @@ @SuppressWarnings("unused") public class CorrectReadSpecificAssignment { - public void testAssignements() { - @Refinement("_ > 10") - int a = 15; - - @Refinement("_ > 14") - int b = a; - - a = 12; - - @Refinement("_ >= 15") - int c = b; - b = 16; - - @Refinement("_ > 14") - int d = c; - } - - public void testIfs() { - @Refinement("_ > 10") - int a = 15; - if (a > 14) { - @Refinement("_ > 14") - int b = a; - a = 12; - @Refinement("_ < 14") - int c = a; + public void testAssignements() { + @Refinement("_ > 10") + int a = 15; + + @Refinement("_ > 14") + int b = a; + + a = 12; + + @Refinement("_ >= 15") + int c = b; + b = 16; + + @Refinement("_ > 14") + int d = c; + } + + public void testIfs() { + @Refinement("_ > 10") + int a = 15; + if (a > 14) { + @Refinement("_ > 14") + int b = a; + a = 12; + @Refinement("_ < 14") + int c = a; + } } - } - - public static void addZ(@Refinement("a > 0") int a) { - @Refinement("_ > 0") - int d = a; - if (d > 5) { - @Refinement("b > 5") - int b = d; - } else { - @Refinement("_ <= 5") - int c = d; - d = 10; - @Refinement("b > 9") - int b = d; + + public static void addZ(@Refinement("a > 0") int a) { + @Refinement("_ > 0") + int d = a; + if (d > 5) { + @Refinement("b > 5") + int b = d; + } else { + @Refinement("_ <= 5") + int c = d; + d = 10; + @Refinement("b > 9") + int b = d; + } } - } - - public void testWithBinOperations() { - @Refinement("_ > 5") - int a = 10; - @Refinement("_ > 10") - int b = a + 1; - a = 6; - b = a * 2; - @Refinement("_ > 20") - int c = b * 2; - } - - public static void main(String[] args) {} + + public void testWithBinOperations() { + @Refinement("_ > 5") + int a = 10; + @Refinement("_ > 10") + int b = a + 1; + a = 6; + b = a * 2; + @Refinement("_ > 20") + int c = b * 2; + } + + public static void main(String[] args) {} } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectRecursion.java b/liquidjava-example/src/main/java/testSuite/CorrectRecursion.java index 9be145b8..423af50a 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectRecursion.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectRecursion.java @@ -3,9 +3,9 @@ import liquidjava.specification.Refinement; public class CorrectRecursion { - @Refinement("_ == 0") - public static int untilZero(@Refinement("k >= 0") int k) { - if (k == 0) return 0; - else return untilZero(k - 1); - } + @Refinement("_ == 0") + public static int untilZero(@Refinement("k >= 0") int k) { + if (k == 0) return 0; + else return untilZero(k - 1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectSearchIndexIntArray.java b/liquidjava-example/src/main/java/testSuite/CorrectSearchIndexIntArray.java index 02fdd56e..519971bb 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectSearchIndexIntArray.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectSearchIndexIntArray.java @@ -4,13 +4,12 @@ public class CorrectSearchIndexIntArray { - public static void searchIndex( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0") int i) { - if (i >= l.length) return; - else { - @Refinement(" _ <= length(l)") - int p = i + 1; - searchIndex(l, p); + public static void searchIndex(@Refinement("length(l) > 0") int[] l, @Refinement("i >= 0") int i) { + if (i >= l.length) return; + else { + @Refinement(" _ <= length(l)") + int p = i + 1; + searchIndex(l, p); + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectSearchValueIndexArray.java b/liquidjava-example/src/main/java/testSuite/CorrectSearchValueIndexArray.java index b8432f09..c724d3ab 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectSearchValueIndexArray.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectSearchValueIndexArray.java @@ -5,17 +5,17 @@ public class CorrectSearchValueIndexArray { - @RefinementPredicate("ghost int length(int[])") - @Refinement("(_ >= -1) && (_ < length(l))") - public static int getIndexWithValue( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { - if (l[i] == val) return i; - if (i >= l.length - 1) return -1; - else return getIndexWithValue(l, i + 1, val); - } + @RefinementPredicate("ghost int length(int[])") + @Refinement("(_ >= -1) && (_ < length(l))") + public static int getIndexWithValue( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { + if (l[i] == val) return i; + if (i >= l.length - 1) return -1; + else return getIndexWithValue(l, i + 1, val); + } - public static void main(String[] args) { - int[] arr = new int[10]; - getIndexWithValue(arr, 0, 1000); - } + public static void main(String[] args) { + int[] arr = new int[10]; + getIndexWithValue(arr, 0, 1000); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectSimpleAssignment.java b/liquidjava-example/src/main/java/testSuite/CorrectSimpleAssignment.java index ade8b7a5..740393a8 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectSimpleAssignment.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectSimpleAssignment.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class CorrectSimpleAssignment { - public static void main(String[] args) { - @Refinement("a > 0") - int a = 1; + public static void main(String[] args) { + @Refinement("a > 0") + int a = 1; - @Refinement("b == 2 || b == 3 || b == 4") - int b = 2; + @Refinement("b == 2 || b == 3 || b == 4") + int b = 2; - @Refinement("d >= 2") - int d = b; // should be okay - } + @Refinement("d >= 2") + int d = b; // should be okay + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectSimpleIfElse.java b/liquidjava-example/src/main/java/testSuite/CorrectSimpleIfElse.java index f668bc69..cc93f1df 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectSimpleIfElse.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectSimpleIfElse.java @@ -5,41 +5,41 @@ @SuppressWarnings("unused") public class CorrectSimpleIfElse { - @Refinement("_ > 0") - public static int toPositive(@Refinement("a < 0") int a) { - return -a; - } + @Refinement("_ > 0") + public static int toPositive(@Refinement("a < 0") int a) { + return -a; + } - @Refinement("_ < 0") - public static int toNegative(@Refinement("a > 0") int a) { - return -a; - } + @Refinement("_ < 0") + public static int toNegative(@Refinement("a > 0") int a) { + return -a; + } - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - if (a < 0) { - @Refinement("b < 0") - int b = a; - } else { - @Refinement("b >= 0") - int b = a; - } + if (a < 0) { + @Refinement("b < 0") + int b = a; + } else { + @Refinement("b >= 0") + int b = a; + } - // EXAMPLE 2 - @Refinement("_ < 10") - int ex_a = 5; - if (ex_a < 0) { - @Refinement("_ >= 10") - int ex_b = toPositive(ex_a) * 10; - } else { - if (ex_a != 0) { - @Refinement("_ < 0") - int ex_d = toNegative(ex_a); - } - @Refinement("_ < ex_a") - int ex_c = -10; + // EXAMPLE 2 + @Refinement("_ < 10") + int ex_a = 5; + if (ex_a < 0) { + @Refinement("_ >= 10") + int ex_b = toPositive(ex_a) * 10; + } else { + if (ex_a != 0) { + @Refinement("_ < 0") + int ex_d = toNegative(ex_a); + } + @Refinement("_ < ex_a") + int ex_c = -10; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectSpecificFunctionInvocation.java b/liquidjava-example/src/main/java/testSuite/CorrectSpecificFunctionInvocation.java index 60eb49dd..0bfdb291 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectSpecificFunctionInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectSpecificFunctionInvocation.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class CorrectSpecificFunctionInvocation { - @Refinement(" _ > 0") - public static int doubleBiggerThanTen(@Refinement("a > 10") int a) { - return a * 2; - } + @Refinement(" _ > 0") + public static int doubleBiggerThanTen(@Refinement("a > 10") int a) { + return a * 2; + } - public static void main(String[] args) { - @Refinement("a > 0") - int a = 50; - int b = doubleBiggerThanTen(a); - } + public static void main(String[] args) { + @Refinement("a > 0") + int a = 50; + int b = doubleBiggerThanTen(a); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectTernaryExpression.java b/liquidjava-example/src/main/java/testSuite/CorrectTernaryExpression.java index 0450920c..e4baf5eb 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectTernaryExpression.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectTernaryExpression.java @@ -4,21 +4,21 @@ @SuppressWarnings("unused") public class CorrectTernaryExpression { - @Refinement("_ == 3") - public static int three() { - return 3; - } + @Refinement("_ == 3") + public static int three() { + return 3; + } - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; - @Refinement("_ > 0") - int b = 3; - a = (a == 2) ? 6 : 9; - a = (b > 2) ? 8 : -1; - b = (a < 100) ? three() : three() - 1; - @Refinement("c < 100") - int c = (a < 100) ? three() : a; - c = (a < 100) ? three() * 3 : a * 5; - } + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; + @Refinement("_ > 0") + int b = 3; + a = (a == 2) ? 6 : 9; + a = (b > 2) ? 8 : -1; + b = (a < 100) ? three() : three() - 1; + @Refinement("c < 100") + int c = (a < 100) ? three() : a; + c = (a < 100) ? three() * 3 : a * 5; + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectTrafficLightRGB.java b/liquidjava-example/src/main/java/testSuite/CorrectTrafficLightRGB.java index 653ebfd6..2a9b1773 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectTrafficLightRGB.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectTrafficLightRGB.java @@ -3,47 +3,50 @@ import liquidjava.specification.Refinement; import liquidjava.specification.StateRefinement; import liquidjava.specification.StateSet; + @StateSet({"green", "amber", "red"}) public class CorrectTrafficLightRGB { - @Refinement("r >= 0 && r <= 255") int r; - - @Refinement("g >= 0 && g <= 255") int g; - - @Refinement("b >= 0 && b <= 255") int b; - - @StateRefinement(to = "green(this)") - public CorrectTrafficLightRGB() { - r = 255; - g = 0; - b = 0; - } - - @StateRefinement(from = "green(this)", to = "amber(this)") - public void transitionToAmber() { - r = 255; - g = 120; - b = 0; - } - - @StateRefinement(from = "red(this)", to = "green(this)") - public void transitionToGreen() { - r = 76; - g = 187; - b = 23; - } - - @StateRefinement(from = "amber(this)", to = "red(this)") - public void transitionToRed() { - r = 230; - g = 0; - b = 1; - } - - - public static void name() { - CorrectTrafficLightRGB tl = new CorrectTrafficLightRGB(); - tl.transitionToAmber(); - tl.transitionToRed(); - } + @Refinement("r >= 0 && r <= 255") + int r; + + @Refinement("g >= 0 && g <= 255") + int g; + + @Refinement("b >= 0 && b <= 255") + int b; + + @StateRefinement(to = "green(this)") + public CorrectTrafficLightRGB() { + r = 255; + g = 0; + b = 0; + } + + @StateRefinement(from = "green(this)", to = "amber(this)") + public void transitionToAmber() { + r = 255; + g = 120; + b = 0; + } + + @StateRefinement(from = "red(this)", to = "green(this)") + public void transitionToGreen() { + r = 76; + g = 187; + b = 23; + } + + @StateRefinement(from = "amber(this)", to = "red(this)") + public void transitionToRed() { + r = 230; + g = 0; + b = 1; + } + + public static void name() { + CorrectTrafficLightRGB tl = new CorrectTrafficLightRGB(); + tl.transitionToAmber(); + tl.transitionToRed(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectUnaryOperators.java b/liquidjava-example/src/main/java/testSuite/CorrectUnaryOperators.java index c05f5c44..1c41ce7c 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectUnaryOperators.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectUnaryOperators.java @@ -4,27 +4,27 @@ @SuppressWarnings("unused") public class CorrectUnaryOperators { - public static void main(String[] args) { - @Refinement("_ < 10") - int v = 3; - v--; - @Refinement("_ >= 10") - int s = 100; - s++; + public static void main(String[] args) { + @Refinement("_ < 10") + int v = 3; + v--; + @Refinement("_ >= 10") + int s = 100; + s++; - @Refinement("_ < 0") - int a = -6; - @Refinement("b > 0") - int b = 8; + @Refinement("_ < 0") + int a = -6; + @Refinement("b > 0") + int b = 8; - a = -3; - a = -(6 + 5); - b = -a; - b = -(-10); - b = +3; - b = +s; + a = -3; + a = -(6 + 5); + b = -a; + b = -(-10); + b = +3; + b = +s; - @Refinement("_ <= 0") - int c = 5 * (-10); - } + @Refinement("_ <= 0") + int c = 5 * (-10); + } } diff --git a/liquidjava-example/src/main/java/testSuite/CorrectUsingAfterIf.java b/liquidjava-example/src/main/java/testSuite/CorrectUsingAfterIf.java index 5efef9dc..71196ef4 100644 --- a/liquidjava-example/src/main/java/testSuite/CorrectUsingAfterIf.java +++ b/liquidjava-example/src/main/java/testSuite/CorrectUsingAfterIf.java @@ -4,78 +4,78 @@ @SuppressWarnings("unused") public class CorrectUsingAfterIf { - public void have2(int a, int b) { - @Refinement("pos > 0") - int pos = 10; + public void have2(int a, int b) { + @Refinement("pos > 0") + int pos = 10; - if (a > 0 && b > 0) { - pos = a; - } else if (b > 0) pos = b; + if (a > 0 && b > 0) { + pos = a; + } else if (b > 0) pos = b; - @Refinement("_ == a || _ == b || _ == 10") - int r = pos; - } + @Refinement("_ == a || _ == b || _ == 10") + int r = pos; + } - public static void main(String[] args) { - // Example 1 - @Refinement("_ > 5") - int a = 6; - if (a > 8) a = 20; - else a = 30; - @Refinement("_ == 30") - int b = a; + public static void main(String[] args) { + // Example 1 + @Refinement("_ > 5") + int a = 6; + if (a > 8) a = 20; + else a = 30; + @Refinement("_ == 30") + int b = a; - // Example 2 - @Refinement("y < 100") - int y = 50; - if (y > 2) y = 3; - else y = 6; + // Example 2 + @Refinement("y < 100") + int y = 50; + if (y > 2) y = 3; + else y = 6; - @Refinement("z < 7") - int z = y; + @Refinement("z < 7") + int z = y; - // Example 3 - @Refinement("_ < 100") - int changedInThenAndElse = 10; - @Refinement("_ > 6") - int changeOnlyInThen = 7; - if (changedInThenAndElse > 2) { - changedInThenAndElse = 3; - changeOnlyInThen = 8; - } else { - changedInThenAndElse = 6; - } - @Refinement("_ < 7") - int ze1 = changedInThenAndElse; - @Refinement("_ < 9") - int ze2 = changeOnlyInThen; + // Example 3 + @Refinement("_ < 100") + int changedInThenAndElse = 10; + @Refinement("_ > 6") + int changeOnlyInThen = 7; + if (changedInThenAndElse > 2) { + changedInThenAndElse = 3; + changeOnlyInThen = 8; + } else { + changedInThenAndElse = 6; + } + @Refinement("_ < 7") + int ze1 = changedInThenAndElse; + @Refinement("_ < 9") + int ze2 = changeOnlyInThen; - // Example 4 - @Refinement("_ < 100") - int initializedInThen; - if (true) initializedInThen = 7; - @Refinement("_ == 35") - int hello = initializedInThen * 5; + // Example 4 + @Refinement("_ < 100") + int initializedInThen; + if (true) initializedInThen = 7; + @Refinement("_ == 35") + int hello = initializedInThen * 5; - // Example 5 - @Refinement("_ < 100") - int initializedInElse; - int asds; - if (false) asds = 5; - else initializedInElse = 8; - @Refinement("_ == 40") - int world = initializedInElse * 5; + // Example 5 + @Refinement("_ < 100") + int initializedInElse; + int asds; + if (false) asds = 5; + else initializedInElse = 8; + @Refinement("_ == 40") + int world = initializedInElse * 5; - // Example 7 - @Refinement("k > 0 && k < 100") - int k = 5; - if (k > 7) { - k = 9; + // Example 7 + @Refinement("k > 0 && k < 100") + int k = 5; + if (k > 7) { + k = 9; + } + @Refinement("_ < 10") + int m = k; + k = 50; + @Refinement("_ == 50") + int m2 = k; } - @Refinement("_ < 10") - int m = k; - k = 50; - @Refinement("_ == 50") - int m2 = k; - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAfterIf.java b/liquidjava-example/src/main/java/testSuite/ErrorAfterIf.java index 313d8612..130434f9 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAfterIf.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAfterIf.java @@ -4,16 +4,16 @@ @SuppressWarnings("unused") public class ErrorAfterIf { - public void have2(int a, int b) { - @Refinement("pos > 0") - int pos = 10; + public void have2(int a, int b) { + @Refinement("pos > 0") + int pos = 10; - if (a > 0 && b > 0) { - pos = a; - } else { - if (b > 0) pos = b; + if (a > 0 && b > 0) { + pos = a; + } else { + if (b > 0) pos = b; + } + @Refinement("_ == a || _ == b") + int r = pos; } - @Refinement("_ == a || _ == b") - int r = pos; - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAfterIf2.java b/liquidjava-example/src/main/java/testSuite/ErrorAfterIf2.java index 044f7799..b6a0816f 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAfterIf2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAfterIf2.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class ErrorAfterIf2 { - public static void main(String[] args) { - @Refinement("k > 0 && k < 100") - int k = 5; - if (k > 7) { - k = 9; + public static void main(String[] args) { + @Refinement("k > 0 && k < 100") + int k = 5; + if (k > 7) { + k = 9; + } + k = 50; + @Refinement("_ < 10") + int m = k; } - k = 50; - @Refinement("_ < 10") - int m = k; - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAlias.java b/liquidjava-example/src/main/java/testSuite/ErrorAlias.java index de6d7655..4cc2b496 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAlias.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAlias.java @@ -7,13 +7,13 @@ @RefinementAlias("InRange(int val, int low, int up) {low < val && val < up}") public class ErrorAlias { - @Refinement("InRange( _, 10, 16)") - public static int getNum() { - return 14; - } + @Refinement("InRange( _, 10, 16)") + public static int getNum() { + return 14; + } - public static void main(String[] args) { - @Refinement("InRange( _, 10, 15)") - int j = getNum(); - } + public static void main(String[] args) { + @Refinement("InRange( _, 10, 15)") + int j = getNum(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAliasArgumentSize.java b/liquidjava-example/src/main/java/testSuite/ErrorAliasArgumentSize.java index 65c5bed1..6e3682cd 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAliasArgumentSize.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAliasArgumentSize.java @@ -7,8 +7,8 @@ @RefinementAlias("InRange(int val, int low, int up) {low < val && val < up}") public class ErrorAliasArgumentSize { - public static void main(String[] args) { - @Refinement("InRange( _, 10)") - int j = 15; - } + public static void main(String[] args) { + @Refinement("InRange( _, 10)") + int j = 15; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAliasSimple.java b/liquidjava-example/src/main/java/testSuite/ErrorAliasSimple.java index 6a4f1a58..ce751d5c 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAliasSimple.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAliasSimple.java @@ -7,8 +7,8 @@ @RefinementAlias("type PtGrade(double x) { x >= 0 && x <= 20}") public class ErrorAliasSimple { - public static void main(String[] args) { - @Refinement("PtGrade(_)") - double positiveGrade2 = 20 * 0.5 + 20 * 0.6; - } + public static void main(String[] args) { + @Refinement("PtGrade(_)") + double positiveGrade2 = 20 * 0.5 + 20 * 0.6; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAliasTypeMismatch.java b/liquidjava-example/src/main/java/testSuite/ErrorAliasTypeMismatch.java index 429ad3f9..074765a0 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAliasTypeMismatch.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAliasTypeMismatch.java @@ -8,12 +8,12 @@ @RefinementAlias("type PtGrade(double x) { x >= 0 && x <= 20}") public class ErrorAliasTypeMismatch { - public static void main(String[] args) { - @Refinement("PtGrade(_)") - double positiveGrade2 = 20 * 0.5 + 20 * 0.5; + public static void main(String[] args) { + @Refinement("PtGrade(_)") + double positiveGrade2 = 20 * 0.5 + 20 * 0.5; - @Refinement("Positive(_)") - double positive = positiveGrade2; - // Positive(_) fica positive > 0 - } + @Refinement("Positive(_)") + double positive = positiveGrade2; + // Positive(_) fica positive > 0 + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticBinaryOperations.java b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticBinaryOperations.java index 53191302..9556fea0 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticBinaryOperations.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticBinaryOperations.java @@ -4,10 +4,10 @@ @SuppressWarnings("unused") public class ErrorArithmeticBinaryOperations { - public static void main(String[] args) { - @Refinement("_ < 100") - int y = 50; - @Refinement("_ > 0") - int z = y - 51; - } + public static void main(String[] args) { + @Refinement("_ < 100") + int y = 50; + @Refinement("_ > 0") + int z = y - 51; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP1.java b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP1.java index 96531284..b5798484 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP1.java @@ -5,8 +5,8 @@ @SuppressWarnings("unused") public class ErrorArithmeticFP1 { - public static void main(String[] args) { - @Refinement("_ > 5.0") - double a = 5.0; - } + public static void main(String[] args) { + @Refinement("_ > 5.0") + double a = 5.0; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP2.java b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP2.java index 7713711c..ab60cb9b 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP2.java @@ -5,11 +5,11 @@ @SuppressWarnings("unused") public class ErrorArithmeticFP2 { - public static void main(String[] args) { - @Refinement("_ > 5.0") - double a = 5.5; + public static void main(String[] args) { + @Refinement("_ > 5.0") + double a = 5.5; - @Refinement("_ == 10.0") - double c = a * 2.0; - } + @Refinement("_ == 10.0") + double c = a * 2.0; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP3.java b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP3.java index 248c559b..0e96412d 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP3.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP3.java @@ -4,10 +4,10 @@ @SuppressWarnings("unused") public class ErrorArithmeticFP3 { - public static void main(String[] args) { - @Refinement("_ > 5.0") - double a = 5.5; - @Refinement("_ < -5.5") - double d = -a; - } + public static void main(String[] args) { + @Refinement("_ > 5.0") + double a = 5.5; + @Refinement("_ < -5.5") + double d = -a; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP4.java b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP4.java index 0a518c9f..51706603 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP4.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorArithmeticFP4.java @@ -4,11 +4,11 @@ @SuppressWarnings("unused") public class ErrorArithmeticFP4 { - public static void main(String[] args) { - @Refinement("_ > 5.0") - double a = 5.5; + public static void main(String[] args) { + @Refinement("_ > 5.0") + double a = 5.5; - @Refinement("_ < -5.5") - double d = -(a - 2.0); - } + @Refinement("_ < -5.5") + double d = -(a - 2.0); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorAssignementAfterDeclaration.java b/liquidjava-example/src/main/java/testSuite/ErrorAssignementAfterDeclaration.java index 75345387..83b31147 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorAssignementAfterDeclaration.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorAssignementAfterDeclaration.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class ErrorAssignementAfterDeclaration { - public static void main(String[] args) { - @Refinement("(z > 0) && (z < 50)") - int z = 1; - @Refinement("u < 100") - int u = 10; - u = 11 + z; - u = z * 2; - u = 30 + z; - u = 500; // error - } + public static void main(String[] args) { + @Refinement("(z > 0) && (z < 50)") + int z = 1; + @Refinement("u < 100") + int u = 10; + u = 11 + z; + u = z * 2; + u = 30 + z; + u = 500; // error + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorBooleanFunInvocation.java b/liquidjava-example/src/main/java/testSuite/ErrorBooleanFunInvocation.java index 8f9fc7dc..029fd4dc 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorBooleanFunInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorBooleanFunInvocation.java @@ -5,22 +5,22 @@ @SuppressWarnings("unused") public class ErrorBooleanFunInvocation { - @Refinement("_ == (n > 10)") - public static boolean greaterThanTen(int n) { - return n > 10; - } + @Refinement("_ == (n > 10)") + public static boolean greaterThanTen(int n) { + return n > 10; + } - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - @Refinement("_ == true") - boolean k = (a < 11); + @Refinement("_ == true") + boolean k = (a < 11); - @Refinement("_ == true") - boolean o = !(a == 12); + @Refinement("_ == true") + boolean o = !(a == 12); - @Refinement("_ == true") - boolean m = greaterThanTen(a); - } + @Refinement("_ == true") + boolean m = greaterThanTen(a); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorBooleanLiteral.java b/liquidjava-example/src/main/java/testSuite/ErrorBooleanLiteral.java index 3926d10a..0ad3ded1 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorBooleanLiteral.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorBooleanLiteral.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class ErrorBooleanLiteral { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - @Refinement("_ == true") - boolean k = (a < 11); + @Refinement("_ == true") + boolean k = (a < 11); - @Refinement("_ == false") - boolean t = !(a == 12); - } + @Refinement("_ == false") + boolean t = !(a == 12); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorDependentRefinement.java b/liquidjava-example/src/main/java/testSuite/ErrorDependentRefinement.java index 108348b9..d8d5715d 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorDependentRefinement.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorDependentRefinement.java @@ -4,12 +4,12 @@ @SuppressWarnings("unused") public class ErrorDependentRefinement { - public static void main(String[] args) { - @Refinement("_ < 10") - int smaller = 5; - @Refinement("bigger > 20") - int bigger = 50; - @Refinement("_ > smaller && _ < bigger") - int middle = 21; - } + public static void main(String[] args) { + @Refinement("_ < 10") + int smaller = 5; + @Refinement("bigger > 20") + int bigger = 50; + @Refinement("_ > smaller && _ < bigger") + int middle = 21; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorFunctionDeclarations.java b/liquidjava-example/src/main/java/testSuite/ErrorFunctionDeclarations.java index 8faf3c8d..99f6f435 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorFunctionDeclarations.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorFunctionDeclarations.java @@ -3,8 +3,8 @@ import liquidjava.specification.Refinement; public class ErrorFunctionDeclarations { - @Refinement("_ >= d && _ < i") - private static int range(@Refinement("d >= 0") int d, @Refinement("i > d") int i) { - return i + 1; - } + @Refinement("_ >= d && _ < i") + private static int range(@Refinement("d >= 0") int d, @Refinement("i > d") int i) { + return i + 1; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation.java b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation.java index 75b204fe..a8439044 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation.java @@ -4,16 +4,16 @@ @SuppressWarnings("unused") public class ErrorFunctionInvocation { - @Refinement(" _ >= a") - public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { - @Refinement("y > 30") - int y = 50; - return y - 10; - } + @Refinement(" _ >= a") + public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { + @Refinement("y > 30") + int y = 50; + return y - 10; + } - public static void main(String[] args) { - @Refinement("_ > 10") - int p = 10; - p = posMult(10, 4); - } + public static void main(String[] args) { + @Refinement("_ > 10") + int p = 10; + p = posMult(10, 4); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation1.java b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation1.java index 73f29a27..26119616 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocation1.java @@ -4,29 +4,29 @@ @SuppressWarnings("unused") public class ErrorFunctionInvocation1 { - @Refinement("_ == 2") - private static int getTwo() { - return 1 + 1; - } + @Refinement("_ == 2") + private static int getTwo() { + return 1 + 1; + } - @Refinement(" _ == 0") - private static int getZero() { - return 0; - } + @Refinement(" _ == 0") + private static int getZero() { + return 0; + } - @Refinement("_ == 1") - private static int getOne() { - @Refinement("_ == 0") - int a = getZero(); - return a + 1; - } + @Refinement("_ == 1") + private static int getOne() { + @Refinement("_ == 0") + int a = getZero(); + return a + 1; + } - public static void main(String[] args) { - @Refinement("_ < 1") - int b = getZero(); + public static void main(String[] args) { + @Refinement("_ < 1") + int b = getZero(); - @Refinement("_ > 0") - int c = getOne(); - c = getZero(); - } + @Refinement("_ > 0") + int c = getOne(); + c = getZero(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocationParams.java b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocationParams.java index 11a4e9f4..ba398c67 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocationParams.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorFunctionInvocationParams.java @@ -4,16 +4,16 @@ @SuppressWarnings("unused") public class ErrorFunctionInvocationParams { - @Refinement("_ >= a") - public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { - @Refinement("y > 30") - int y = 50; - return y - 10; - } + @Refinement("_ >= a") + public static int posMult(@Refinement("a == 10") int a, @Refinement("_ < a && _ > 0") int b) { + @Refinement("y > 30") + int y = 50; + return y - 10; + } - public static void main(String[] args) { - @Refinement("_ >= 0") - int p = 10; - p = posMult(10, 12); - } + public static void main(String[] args) { + @Refinement("_ >= 0") + int p = 10; + p = posMult(10, 12); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorGhostArgsTypes.java b/liquidjava-example/src/main/java/testSuite/ErrorGhostArgsTypes.java index 325fe831..5fce2f7d 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorGhostArgsTypes.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorGhostArgsTypes.java @@ -4,9 +4,9 @@ import liquidjava.specification.RefinementPredicate; public class ErrorGhostArgsTypes { - @RefinementPredicate("ghost boolean open(int)") - @Refinement("open(4.5) == true") - public int one() { - return 1; - } + @RefinementPredicate("ghost boolean open(int)") + @Refinement("open(4.5) == true") + public int one() { + return 1; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorGhostNumberArgs.java b/liquidjava-example/src/main/java/testSuite/ErrorGhostNumberArgs.java index 492054eb..f080428c 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorGhostNumberArgs.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorGhostNumberArgs.java @@ -5,9 +5,9 @@ public class ErrorGhostNumberArgs { - @RefinementPredicate("ghost boolean open(int)") - @Refinement("open(1,2) == true") - public int one() { - return 1; - } + @RefinementPredicate("ghost boolean open(int)") + @Refinement("open(1,2) == true") + public int one() { + return 1; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment.java b/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment.java index 7a56b483..90c225c5 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment.java @@ -4,15 +4,15 @@ @SuppressWarnings("unused") public class ErrorIfAssignment { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; - if (a > 0) { - @Refinement("b > 0") - int b = a; - b++; - a = 10; + if (a > 0) { + @Refinement("b > 0") + int b = a; + b++; + a = 10; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment2.java b/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment2.java index e40ba835..c66c4b71 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorIfAssignment2.java @@ -3,9 +3,9 @@ import liquidjava.specification.Refinement; public class ErrorIfAssignment2 { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; - if (a < 0) a = 100; - } + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; + if (a < 0) a = 100; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorImplementationSearchValueIntArray.java b/liquidjava-example/src/main/java/testSuite/ErrorImplementationSearchValueIntArray.java index b15d16da..e34f2c4d 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorImplementationSearchValueIntArray.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorImplementationSearchValueIntArray.java @@ -5,13 +5,13 @@ public class ErrorImplementationSearchValueIntArray { - @RefinementPredicate("ghost int length(int[])") - @Refinement("(_ >= -1) && (_ < length(l))") - public static int getIndexWithValue( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { - if (l[i] == val) return i; - if (i >= l.length) // with or without -1 - return -1; - else return getIndexWithValue(l, i + 1, val); - } + @RefinementPredicate("ghost int length(int[])") + @Refinement("(_ >= -1) && (_ < length(l))") + public static int getIndexWithValue( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { + if (l[i] == val) return i; + if (i >= l.length) // with or without -1 + return -1; + else return getIndexWithValue(l, i + 1, val); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorLenZeroIntArray.java b/liquidjava-example/src/main/java/testSuite/ErrorLenZeroIntArray.java index 5bd65a6b..04e2f523 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorLenZeroIntArray.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorLenZeroIntArray.java @@ -4,17 +4,15 @@ public class ErrorLenZeroIntArray { - public static int getIndexWithVal( - @Refinement("length(l) > 0") int[] l, - @Refinement("i >= 0 && i <= length(l)") int i, - int val) { - if (l[i] == val) return i; - if (i >= l.length) return -1; - else return getIndexWithVal(l, i + 1, val); - } + public static int getIndexWithVal( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i <= length(l)") int i, int val) { + if (l[i] == val) return i; + if (i >= l.length) return -1; + else return getIndexWithVal(l, i + 1, val); + } - public static void main(String[] args) { - int[] a = new int[0]; - getIndexWithVal(a, 0, 6); - } + public static void main(String[] args) { + int[] a = new int[0]; + getIndexWithVal(a, 0, 6); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorLongUsage1.java b/liquidjava-example/src/main/java/testSuite/ErrorLongUsage1.java index dad945f6..aef298bb 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorLongUsage1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorLongUsage1.java @@ -4,13 +4,13 @@ @SuppressWarnings("unused") public class ErrorLongUsage1 { - public static void main(String[] args) { - @Refinement("a > 5") - long a = 9L; + public static void main(String[] args) { + @Refinement("a > 5") + long a = 9L; - if (a > 5) { - @Refinement("b < 50") - long b = a * 10; + if (a > 5) { + @Refinement("b < 50") + long b = a * 10; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorLongUsage2.java b/liquidjava-example/src/main/java/testSuite/ErrorLongUsage2.java index bb7d1146..61a482d3 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorLongUsage2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorLongUsage2.java @@ -5,16 +5,16 @@ @SuppressWarnings("unused") public class ErrorLongUsage2 { - @Refinement(" _ > 40") - public static long doubleBiggerThanTwenty(@Refinement("a > 20") long a) { - return a * 2; - } + @Refinement(" _ > 40") + public static long doubleBiggerThanTwenty(@Refinement("a > 20") long a) { + return a * 2; + } - public static void main(String[] args) { - @Refinement("a > 5") - long a = 9L; + public static void main(String[] args) { + @Refinement("a > 5") + long a = 9L; - @Refinement("c > 40") - long c = doubleBiggerThanTwenty(a * 2); - } + @Refinement("c > 40") + long c = doubleBiggerThanTwenty(a * 2); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorNoRefinementsInVar.java b/liquidjava-example/src/main/java/testSuite/ErrorNoRefinementsInVar.java index 9f4e600e..2db74f88 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorNoRefinementsInVar.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorNoRefinementsInVar.java @@ -4,9 +4,9 @@ @SuppressWarnings("unused") public class ErrorNoRefinementsInVar { - public static void main(String[] args) { - int a = 11; - @Refinement("b < 10") - int b = a; - } + public static void main(String[] args) { + int a = 11; + @Refinement("b < 10") + int b = a; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorRecursion1.java b/liquidjava-example/src/main/java/testSuite/ErrorRecursion1.java index 110a5cd7..7b5b9fe6 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorRecursion1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorRecursion1.java @@ -4,9 +4,9 @@ public class ErrorRecursion1 { - @Refinement(" _ == 0") - public static int untilZero(@Refinement("k >= 0") int k) { - if (k == 1) return 0; - else return untilZero(k - 1); - } + @Refinement(" _ == 0") + public static int untilZero(@Refinement("k >= 0") int k) { + if (k == 1) return 0; + else return untilZero(k - 1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSearchIntArray.java b/liquidjava-example/src/main/java/testSuite/ErrorSearchIntArray.java index 509bcfb1..e25c2c13 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSearchIntArray.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSearchIntArray.java @@ -4,9 +4,9 @@ public class ErrorSearchIntArray { - public static void searchIndex( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i <= length(l)") int i) { - if (i > l.length) return; - else searchIndex(l, i + 1); - } + public static void searchIndex( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i <= length(l)") int i) { + if (i > l.length) return; + else searchIndex(l, i + 1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray1.java b/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray1.java index 278fd088..ad63b279 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray1.java @@ -5,17 +5,17 @@ public class ErrorSearchValueIntArray1 { - @RefinementPredicate("ghost int length(int[])") - @Refinement("(_ >= -1) && (_ < length(l))") - public static int getIndexWithValue( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { - if (l[i] == val) return i; - if (i >= l.length - 1) return -1; - else return getIndexWithValue(l, i + 1, val); - } + @RefinementPredicate("ghost int length(int[])") + @Refinement("(_ >= -1) && (_ < length(l))") + public static int getIndexWithValue( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { + if (l[i] == val) return i; + if (i >= l.length - 1) return -1; + else return getIndexWithValue(l, i + 1, val); + } - public static void main(String[] args) { - int[] arr = new int[0]; - getIndexWithValue(arr, 0, 1000); - } + public static void main(String[] args) { + int[] arr = new int[0]; + getIndexWithValue(arr, 0, 1000); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray2.java b/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray2.java index 60d9946a..d9f482ea 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSearchValueIntArray2.java @@ -5,17 +5,17 @@ public class ErrorSearchValueIntArray2 { - @RefinementPredicate("ghost int length(int[])") - @Refinement("(_ >= -1) && (_ < length(l))") - public static int getIndexWithValue( - @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { - if (l[i] == val) return i; - if (i >= l.length - 1) return -1; - else return getIndexWithValue(l, i + 1, val); - } + @RefinementPredicate("ghost int length(int[])") + @Refinement("(_ >= -1) && (_ < length(l))") + public static int getIndexWithValue( + @Refinement("length(l) > 0") int[] l, @Refinement("i >= 0 && i < length(l)") int i, int val) { + if (l[i] == val) return i; + if (i >= l.length - 1) return -1; + else return getIndexWithValue(l, i + 1, val); + } - public static void main(String[] args) { - int[] arr = new int[10]; - getIndexWithValue(arr, arr.length, 1000); - } + public static void main(String[] args) { + int[] arr = new int[10]; + getIndexWithValue(arr, arr.length, 1000); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSimpleAssignment.java b/liquidjava-example/src/main/java/testSuite/ErrorSimpleAssignment.java index 0e675e41..a00d4069 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSimpleAssignment.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSimpleAssignment.java @@ -4,8 +4,8 @@ @SuppressWarnings("unused") public class ErrorSimpleAssignment { - public static void main(String[] args) { - @Refinement("c > 2") - int c = 2; // should emit error - } + public static void main(String[] args) { + @Refinement("c > 2") + int c = 2; // should emit error + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSpecificArithmetic.java b/liquidjava-example/src/main/java/testSuite/ErrorSpecificArithmetic.java index 5b69d6a7..1a63afc4 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSpecificArithmetic.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSpecificArithmetic.java @@ -4,14 +4,14 @@ @SuppressWarnings("unused") public class ErrorSpecificArithmetic { - public static void main(String[] args) { - @Refinement("_ > 5") - int a = 10; - @Refinement("_ > 10") - int b = a + 1; - a = 6; - b = a * 2; - @Refinement("_ > 20") - int c = b * -1; - } + public static void main(String[] args) { + @Refinement("_ > 5") + int a = 10; + @Refinement("_ > 10") + int b = a + 1; + a = 6; + b = a * 2; + @Refinement("_ > 20") + int c = b * -1; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf.java b/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf.java index 83eb58c5..b15b633e 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf.java @@ -5,18 +5,18 @@ @SuppressWarnings("unused") public class ErrorSpecificValuesIf { - public static void addZ(@Refinement("a > 0") int a) { - @Refinement("_ > 0") - int d = a; - if (d > 5) { - @Refinement("b > 5") - int b = d; - } else { - @Refinement("_ <= 5") - int c = d; - d = 10; - @Refinement("b > 10") - int b = d; + public static void addZ(@Refinement("a > 0") int a) { + @Refinement("_ > 0") + int d = a; + if (d > 5) { + @Refinement("b > 5") + int b = d; + } else { + @Refinement("_ <= 5") + int c = d; + d = 10; + @Refinement("b > 10") + int b = d; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf2.java b/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf2.java index f5ec9668..c1e373c3 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf2.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSpecificValuesIf2.java @@ -4,13 +4,13 @@ @SuppressWarnings("unused") public class ErrorSpecificValuesIf2 { - public static void main(String[] args) { - @Refinement("_ > 10") - int a = 15; - if (a > 14) { - a = 12; - @Refinement("_ < 11") - int c = a; + public static void main(String[] args) { + @Refinement("_ > 10") + int a = 15; + if (a > 14) { + a = 12; + @Refinement("_ < 11") + int c = a; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinement.java b/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinement.java index 29fe603e..6ec09838 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinement.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinement.java @@ -4,11 +4,11 @@ @SuppressWarnings("unused") public class ErrorSpecificVarInRefinement { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 6; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 6; - @Refinement("_ > a") - int b = 9; - } + @Refinement("_ > a") + int b = 9; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinementIf.java b/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinementIf.java index ad1283fb..7e1d1c22 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinementIf.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSpecificVarInRefinementIf.java @@ -4,13 +4,13 @@ @SuppressWarnings("unused") public class ErrorSpecificVarInRefinementIf { - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 6; - if (a > 0) { - a = -2; - @Refinement("b < a") - int b = -3; + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 6; + if (a > 0) { + a = -2; + @Refinement("b < a") + int b = -3; + } } - } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorSyntax1.java b/liquidjava-example/src/main/java/testSuite/ErrorSyntax1.java index a0ec1dd4..bdf498ae 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorSyntax1.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorSyntax1.java @@ -4,8 +4,8 @@ @SuppressWarnings("unused") public class ErrorSyntax1 { - public static void main(String[] args) { - @Refinement("_ < 100 +") - int value = 90 + 4; - } + public static void main(String[] args) { + @Refinement("_ < 100 +") + int value = 90 + 4; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorTernaryExpression.java b/liquidjava-example/src/main/java/testSuite/ErrorTernaryExpression.java index 3aea3abf..4543463b 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorTernaryExpression.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorTernaryExpression.java @@ -3,14 +3,14 @@ import liquidjava.specification.Refinement; public class ErrorTernaryExpression { - @Refinement(" _ == 3") - public static int three() { - return 3; - } + @Refinement(" _ == 3") + public static int three() { + return 3; + } - public static void main(String[] args) { - @Refinement("_ < 10") - int a = 5; - a = (a == 2) ? 6 + three() : 4 * three(); - } + public static void main(String[] args) { + @Refinement("_ < 10") + int a = 5; + a = (a == 2) ? 6 + three() : 4 * three(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java b/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java index b9df5283..018db95a 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorTrafficLightRGB.java @@ -3,48 +3,51 @@ import liquidjava.specification.Refinement; import liquidjava.specification.StateRefinement; import liquidjava.specification.StateSet; + @StateSet({"green", "amber", "red"}) public class ErrorTrafficLightRGB { - @Refinement("r >= 0 && r <= 255") int r; - - @Refinement("g >= 0 && g <= 255") int g; - - @Refinement("b >= 0 && b <= 255") int b; - - @StateRefinement(to = "green(this)") - public ErrorTrafficLightRGB() { - r = 255; - g = 0; - b = 0; - } - - @StateRefinement(from = "green(this)", to = "amber(this)") - public void transitionToAmber() { - r = 255; - g = 120; - b = 0; - } - - @StateRefinement(from = "red(this)", to = "green(this)") - public void transitionToGreen() { - r = 76; - g = 187; - b = 23; - } - - @StateRefinement(from = "amber(this)", to = "red(this)") - public void transitionToRed() { - r = 230; - g = 0; - b = 1; - } - - - public static void name() { - ErrorTrafficLightRGB tl = new ErrorTrafficLightRGB(); - tl.transitionToAmber(); - tl.transitionToRed(); - tl.transitionToAmber(); - } + @Refinement("r >= 0 && r <= 255") + int r; + + @Refinement("g >= 0 && g <= 255") + int g; + + @Refinement("b >= 0 && b <= 255") + int b; + + @StateRefinement(to = "green(this)") + public ErrorTrafficLightRGB() { + r = 255; + g = 0; + b = 0; + } + + @StateRefinement(from = "green(this)", to = "amber(this)") + public void transitionToAmber() { + r = 255; + g = 120; + b = 0; + } + + @StateRefinement(from = "red(this)", to = "green(this)") + public void transitionToGreen() { + r = 76; + g = 187; + b = 23; + } + + @StateRefinement(from = "amber(this)", to = "red(this)") + public void transitionToRed() { + r = 230; + g = 0; + b = 1; + } + + public static void name() { + ErrorTrafficLightRGB tl = new ErrorTrafficLightRGB(); + tl.transitionToAmber(); + tl.transitionToRed(); + tl.transitionToAmber(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorTypeInRefinements.java b/liquidjava-example/src/main/java/testSuite/ErrorTypeInRefinements.java index 90255e74..6583832f 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorTypeInRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorTypeInRefinements.java @@ -5,10 +5,10 @@ @SuppressWarnings("unused") public class ErrorTypeInRefinements { - public static void main(String[] args) { - int a = 10; + public static void main(String[] args) { + int a = 10; - @Refinement("(b == 6)") - boolean b = true; - } + @Refinement("(b == 6)") + boolean b = true; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorUnaryOpMinus.java b/liquidjava-example/src/main/java/testSuite/ErrorUnaryOpMinus.java index 0faac59e..85149333 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorUnaryOpMinus.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorUnaryOpMinus.java @@ -3,9 +3,9 @@ import liquidjava.specification.Refinement; public class ErrorUnaryOpMinus { - public static void main(String[] args) { - @Refinement("b > 0") - int b = 8; - b = -b; - } + public static void main(String[] args) { + @Refinement("b > 0") + int b = 8; + b = -b; + } } diff --git a/liquidjava-example/src/main/java/testSuite/ErrorUnaryOperators.java b/liquidjava-example/src/main/java/testSuite/ErrorUnaryOperators.java index 928a5f08..dbc59590 100644 --- a/liquidjava-example/src/main/java/testSuite/ErrorUnaryOperators.java +++ b/liquidjava-example/src/main/java/testSuite/ErrorUnaryOperators.java @@ -4,12 +4,12 @@ @SuppressWarnings("unused") public class ErrorUnaryOperators { - public static void main(String[] args) { - @Refinement("_ < 10") - int v = 3; - v--; - @Refinement("_ >= 10") - int s = 10; - s--; - } + public static void main(String[] args) { + @Refinement("_ < 10") + int v = 3; + v--; + @Refinement("_ >= 10") + int s = 10; + s--; + } } diff --git a/liquidjava-example/src/main/java/testSuite/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/SimpleTest.java index 182255ac..8821c0c9 100644 --- a/liquidjava-example/src/main/java/testSuite/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/SimpleTest.java @@ -4,11 +4,11 @@ @SuppressWarnings("unused") public class SimpleTest { - public static void main(String[] args) { - // Arithmetic Binary Operations - @Refinement("a >= 10") - int a = 10; - @Refinement("t > 0") - int t = a + 1; - } + public static void main(String[] args) { + // Arithmetic Binary Operations + @Refinement("a >= 10") + int a = 10; + @Refinement("t > 0") + int t = a + 1; + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/ErrorGhostState.java b/liquidjava-example/src/main/java/testSuite/classes/ErrorGhostState.java index d120e3f2..6580fab7 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/ErrorGhostState.java +++ b/liquidjava-example/src/main/java/testSuite/classes/ErrorGhostState.java @@ -8,6 +8,6 @@ @Ghost("int totalPrice(int x)") // Should have no parameters public class ErrorGhostState { - @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") - public ErrorGhostState() {} + @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") + public ErrorGhostState() {} } diff --git a/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/ArrayListRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/ArrayListRefinements.java index ce5cf677..fc094999 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/ArrayListRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/ArrayListRefinements.java @@ -7,14 +7,14 @@ @ExternalRefinementsFor("java.util.ArrayList") public interface ArrayListRefinements { - @RefinementPredicate("int size(ArrayList l)") - @StateRefinement(to = "size(this) == 0") - public void ArrayList(); + @RefinementPredicate("int size(ArrayList l)") + @StateRefinement(to = "size(this) == 0") + public void ArrayList(); - @StateRefinement(to = "size(this) == (size(old(this)) + 1)") - public void add(E e); + @StateRefinement(to = "size(this) == (size(old(this)) + 1)") + public void add(E e); - // @Refinement("size(_) == size(this)") - // public Object clone(); + // @Refinement("size(_) == size(this)") + // public Object clone(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/SimpleTest.java index 6cac99f4..95dab95b 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/SimpleTest.java @@ -7,52 +7,52 @@ @SuppressWarnings("unused") public class SimpleTest { - public static void main(String[] args) throws IOException { - - @Refinement("size(al) < 4") - ArrayList al = new ArrayList(); - al.add(1); - al.add(1); - al.add(1); - - @Refinement("size(t) == 3") - ArrayList t = al; - - // Order o = new Order(); - // o.addItem("shirt", 5) - // .addItem("shirt", 10) - // .addItem("h", 20) - // .hasThree(); - // .addItem("h", 6); - - } - - // InputStreamReader isr = new InputStreamReader(System.in); - // isr.read(); - // isr.read(); - // isr.read(); - // isr.close(); - // - // //... - // isr.read(); - - // @Refinement("_ > 0") - // public int fun (int[] arr) { - // return max(arr[0], 1); - // } - // - - // //@Refinement("_.length(x) >= 0") == - //// @Refinement("length(_, x) >= 0") - //// int[] a1 = new int[5]; - // K(.., ..) - - // } - - // See error NaN - // @Refinement("true") - // double b = 0/0; - // @Refinement("_ > 5") - // double c = b; + public static void main(String[] args) throws IOException { + + @Refinement("size(al) < 4") + ArrayList al = new ArrayList(); + al.add(1); + al.add(1); + al.add(1); + + @Refinement("size(t) == 3") + ArrayList t = al; + + // Order o = new Order(); + // o.addItem("shirt", 5) + // .addItem("shirt", 10) + // .addItem("h", 20) + // .hasThree(); + // .addItem("h", 6); + + } + + // InputStreamReader isr = new InputStreamReader(System.in); + // isr.read(); + // isr.read(); + // isr.read(); + // isr.close(); + // + // //... + // isr.read(); + + // @Refinement("_ > 0") + // public int fun (int[] arr) { + // return max(arr[0], 1); + // } + // + + // //@Refinement("_.length(x) >= 0") == + //// @Refinement("length(_, x) >= 0") + //// int[] a1 = new int[5]; + // K(.., ..) + + // } + + // See error NaN + // @Refinement("true") + // double b = 0/0; + // @Refinement("_ > 5") + // double c = b; } diff --git a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Car.java b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Car.java index 4298b3d1..b059dfe7 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Car.java +++ b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Car.java @@ -8,24 +8,24 @@ @RefinementAlias("GreaterThan(int x, int y) {x > y}") public class Car { - @Refinement("CarAcceptableYears(year)") - private int year; + @Refinement("CarAcceptableYears(year)") + private int year; - @Refinement("Positive(_)") - private int seats; + @Refinement("Positive(_)") + private int seats; - public void setYear(@Refinement("CarAcceptableYears(_)") int year) { - this.year = year; - } + public void setYear(@Refinement("CarAcceptableYears(_)") int year) { + this.year = year; + } - @Refinement("CarAcceptableYears(_)") - public int getYear() { - return year; - } + @Refinement("CarAcceptableYears(_)") + public int getYear() { + return year; + } - // @Refinement("_ == GreaterThan(year, y)") - // public boolean isOlderThan(int y) { - // return this.year > y; - // } + // @Refinement("_ == GreaterThan(year, y)") + // public boolean isOlderThan(int y) { + // return this.year > y; + // } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java index 6b675c88..e5d65856 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/car_correct/Test.java @@ -5,20 +5,20 @@ @SuppressWarnings("unused") public class Test { - @Refinement("_ > 2020") - public static int getYear() { - return 2024; - } + @Refinement("_ > 2020") + public static int getYear() { + return 2024; + } - public static void main(String[] args) { - int a = 1998; - Car c = new Car(); - c.setYear(a); + public static void main(String[] args) { + int a = 1998; + Car c = new Car(); + c.setYear(a); - @Refinement("_ > 1800") - int j = c.getYear(); + @Refinement("_ > 1800") + int j = c.getYear(); - @Refinement("_ > 2020") - int k = getYear(); - } + @Refinement("_ > 2020") + int k = getYear(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/email_correct/Email.java b/liquidjava-example/src/main/java/testSuite/classes/email_correct/Email.java index 3d4fedd6..b989be80 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/email_correct/Email.java +++ b/liquidjava-example/src/main/java/testSuite/classes/email_correct/Email.java @@ -15,39 +15,39 @@ @RefinementAlias("ReceiverSet(Email e) { state(e) == 3}") @RefinementAlias("BodySet (Email e) { state(e) == 4}") public class Email { - private String sender; - private List receiver; - private String subject; - private String body; - - @RefinementPredicate("int state(Email e)") - @StateRefinement(to = "EmptyEmail(this)") - public Email() { - receiver = new ArrayList<>(); - } - - @StateRefinement(from = "EmptyEmail(this)", to = "SenderSet(this)") - public void from(String s) { - sender = s; - } - - @StateRefinement(from = "(SenderSet(this)) || (ReceiverSet(this))", to = "ReceiverSet(this)") - public void to(String s) { - receiver.add(s); - } - - @StateRefinement(from = "ReceiverSet(this)", to = "ReceiverSet(this)") - public void subject(String s) { // optional - subject = s; - } - - @StateRefinement(from = "ReceiverSet(this)", to = "BodySet(this)") - public void body(String s) { - body = s; - } - - @StateRefinement(from = "BodySet(this)", to = "BodySet(this)") - public String build() { - return "email..."; // string with all the email - } + private String sender; + private List receiver; + private String subject; + private String body; + + @RefinementPredicate("int state(Email e)") + @StateRefinement(to = "EmptyEmail(this)") + public Email() { + receiver = new ArrayList<>(); + } + + @StateRefinement(from = "EmptyEmail(this)", to = "SenderSet(this)") + public void from(String s) { + sender = s; + } + + @StateRefinement(from = "(SenderSet(this)) || (ReceiverSet(this))", to = "ReceiverSet(this)") + public void to(String s) { + receiver.add(s); + } + + @StateRefinement(from = "ReceiverSet(this)", to = "ReceiverSet(this)") + public void subject(String s) { // optional + subject = s; + } + + @StateRefinement(from = "ReceiverSet(this)", to = "BodySet(this)") + public void body(String s) { + body = s; + } + + @StateRefinement(from = "BodySet(this)", to = "BodySet(this)") + public String build() { + return "email..."; // string with all the email + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/email_correct/TestEmail.java b/liquidjava-example/src/main/java/testSuite/classes/email_correct/TestEmail.java index ffa0dd6e..6563184d 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/email_correct/TestEmail.java +++ b/liquidjava-example/src/main/java/testSuite/classes/email_correct/TestEmail.java @@ -2,15 +2,15 @@ public class TestEmail { - public static void main(String[] args) { + public static void main(String[] args) { - Email e = new Email(); - e.from("me"); - e.to("you"); - e.to("you2"); - e.to("you3"); - e.subject("not important"); - e.body("body"); - e.build(); - } + Email e = new Email(); + e.from("me"); + e.to("you"); + e.to("you2"); + e.to("you3"); + e.subject("not important"); + e.body("body"); + e.build(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/email_error/Email.java b/liquidjava-example/src/main/java/testSuite/classes/email_error/Email.java index 8dfac4ce..99ebd50e 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/email_error/Email.java +++ b/liquidjava-example/src/main/java/testSuite/classes/email_error/Email.java @@ -11,39 +11,39 @@ // @RefinementAlias("EmptyEmail(Email e) { state(e) == 1}") @SuppressWarnings("unused") public class Email { - private String sender; - private List receiver; - private String subject; - private String body; - - @RefinementPredicate("int state(Email e)") - @StateRefinement(to = "state(this) == 1") - public Email() { - receiver = new ArrayList<>(); - } - - @StateRefinement(from = "state(this) == 1", to = "state(this) == 2") - public void from(String s) { - sender = s; - } - - @StateRefinement(from = "(state(this) == 2) || (state(this) == 3)", to = "state(this) == 3") - public void to(String s) { - receiver.add(s); - } - - @StateRefinement(from = "state(this) == 3", to = "state(this) == 3") - public void subject(String s) { // optional - subject = s; - } - - @StateRefinement(from = "state(this) == 3", to = "state(this) == 4") - public void body(String s) { - body = s; - } - - @StateRefinement(from = "state(this) == 4", to = "state(this) == 4") - public String build() { - return "email..."; // string with all the email - } + private String sender; + private List receiver; + private String subject; + private String body; + + @RefinementPredicate("int state(Email e)") + @StateRefinement(to = "state(this) == 1") + public Email() { + receiver = new ArrayList<>(); + } + + @StateRefinement(from = "state(this) == 1", to = "state(this) == 2") + public void from(String s) { + sender = s; + } + + @StateRefinement(from = "(state(this) == 2) || (state(this) == 3)", to = "state(this) == 3") + public void to(String s) { + receiver.add(s); + } + + @StateRefinement(from = "state(this) == 3", to = "state(this) == 3") + public void subject(String s) { // optional + subject = s; + } + + @StateRefinement(from = "state(this) == 3", to = "state(this) == 4") + public void body(String s) { + body = s; + } + + @StateRefinement(from = "state(this) == 4", to = "state(this) == 4") + public String build() { + return "email..."; // string with all the email + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/email_error/TestEmail.java b/liquidjava-example/src/main/java/testSuite/classes/email_error/TestEmail.java index 170c16b2..1756e6ea 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/email_error/TestEmail.java +++ b/liquidjava-example/src/main/java/testSuite/classes/email_error/TestEmail.java @@ -2,13 +2,13 @@ public class TestEmail { - public static void main(String[] args) { + public static void main(String[] args) { - Email e = new Email(); - e.from("me"); - // missing to - e.subject("not important"); - e.body("body"); - e.build(); - } + Email e = new Email(); + e.from("me"); + // missing to + e.subject("not important"); + e.body("body"); + e.build(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/InputStreamReaderRefs.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/InputStreamReaderRefs.java index dd336c23..61f28559 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/InputStreamReaderRefs.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/InputStreamReaderRefs.java @@ -10,28 +10,28 @@ @ExternalRefinementsFor("java.io.InputStreamReader") public interface InputStreamReaderRefs { - @RefinementPredicate("boolean open(InputStreamReader i)") - @StateRefinement(to = "open(this)") - public void InputStreamReader(InputStream in); + @RefinementPredicate("boolean open(InputStreamReader i)") + @StateRefinement(to = "open(this)") + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this)") - @Refinement("(_ >= -1) && (_ <= 127)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this)") + @Refinement("(_ >= -1) && (_ <= 127)") + public int read(); - @StateRefinement(from = "open(this)", to = "!open(this)") - public void close(); + @StateRefinement(from = "open(this)", to = "!open(this)") + public void close(); - @StateRefinement(from = "open(this)", to = "open(this)") - @Refinement("_ >= -1") - public int read( - @Refinement("length(cbuf) > 0") char[] cbuf, - @Refinement("_ >= 0") int offset, - @Refinement("(_ >= 0) && (_ + offset) <= length(cbuf)") int length); - // - // @StateRefinement(from="open(this)", to="open(this)") - // public int ready(); - // - // @StateRefinement(from="open(this)", to="open(this)") - // public String getEncoding(); + @StateRefinement(from = "open(this)", to = "open(this)") + @Refinement("_ >= -1") + public int read( + @Refinement("length(cbuf) > 0") char[] cbuf, + @Refinement("_ >= 0") int offset, + @Refinement("(_ >= 0) && (_ + offset) <= length(cbuf)") int length); + // + // @StateRefinement(from="open(this)", to="open(this)") + // public int ready(); + // + // @StateRefinement(from="open(this)", to="open(this)") + // public String getEncoding(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java index 8b2925b0..b0cff58d 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_correct/Test.java @@ -1,20 +1,16 @@ package testSuite.classes.input_reader_correct; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import liquidjava.specification.Refinement; - @SuppressWarnings("unused") public class Test { - public static void main(String[] args) throws Exception { - // Arrays are not well supported in LiquidJava + public static void main(String[] args) throws Exception { + // Arrays are not well supported in LiquidJava - // InputStreamReader isr = new InputStreamReader(new FileInputStream("test1.txt")); - // @Refinement("_ > -9") - // int a = isr.read(); - // char[] arr = new char[20]; - // int b = isr.read(arr, 10, 5); - // System.out.println(arr); - // isr.close(); - } + // InputStreamReader isr = new InputStreamReader(new FileInputStream("test1.txt")); + // @Refinement("_ > -9") + // int a = isr.read(); + // char[] arr = new char[20]; + // int b = isr.read(arr, 10, 5); + // System.out.println(arr); + // isr.close(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/InputStreamReaderRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/InputStreamReaderRefinements.java index 3abb207a..fcfdb8df 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/InputStreamReaderRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/InputStreamReaderRefinements.java @@ -8,18 +8,18 @@ // https://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html @ExternalRefinementsFor("java.io.InputStreamReader") public interface InputStreamReaderRefinements { - @RefinementPredicate("boolean open(InputStreamReader i)") - @StateRefinement(to = "open(this)") - public void InputStreamReader(InputStream in); + @RefinementPredicate("boolean open(InputStreamReader i)") + @StateRefinement(to = "open(this)") + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this)") + public int read(); - @StateRefinement(from = "open(this)", to = "!open(this)") - public void close(); + @StateRefinement(from = "open(this)", to = "!open(this)") + public void close(); - // faster - // @StateRefinement(from="open(this)", to="open(this)") - // public int read(char[] cbuf, int offset, int length); + // faster + // @StateRefinement(from="open(this)", to="open(this)") + // public int read(char[] cbuf, int offset, int length); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/Test.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/Test.java index 21a1b20b..85d7dc67 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error/Test.java @@ -5,12 +5,12 @@ public class Test { - public static void main(String[] args) throws IOException { - // java.io.InputStreamReader.InputStreamReader - InputStreamReader is = new InputStreamReader(System.in); - is.read(); - is.read(); - is.close(); - is.read(); // should not be able to read - } + public static void main(String[] args) throws IOException { + // java.io.InputStreamReader.InputStreamReader + InputStreamReader is = new InputStreamReader(System.in); + is.read(); + is.read(); + is.close(); + is.read(); // should not be able to read + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/InputStreamReaderRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/InputStreamReaderRefinements.java index 0ee6f0ac..428531bb 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/InputStreamReaderRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/InputStreamReaderRefinements.java @@ -8,13 +8,13 @@ // https://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html @ExternalRefinementsFor("java.io.InputStreamReader") public interface InputStreamReaderRefinements { - @RefinementPredicate("boolean open(InputStreamReader i)") - @StateRefinement(to = "open(this)") - public void InputStreamReader(InputStream in); + @RefinementPredicate("boolean open(InputStreamReader i)") + @StateRefinement(to = "open(this)") + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this)") + public int read(); - @StateRefinement(from = "open(this)", to = "!open(this)") - public void close(); + @StateRefinement(from = "open(this)", to = "!open(this)") + public void close(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/Test.java b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/Test.java index ab1fd528..d3093679 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/input_reader_error2/Test.java @@ -4,11 +4,11 @@ import java.io.InputStreamReader; public class Test { - public static void main(String[] args) throws IOException { - InputStreamReader isr = new InputStreamReader(System.in); - isr.read(); - isr.close(); - isr.getEncoding(); - isr.read(); - } + public static void main(String[] args) throws IOException { + InputStreamReader isr = new InputStreamReader(System.in); + isr.read(); + isr.close(); + isr.getEncoding(); + isr.read(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Iterator.java b/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Iterator.java index e01d274f..5b2aa228 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Iterator.java +++ b/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Iterator.java @@ -6,18 +6,18 @@ @StateSet({"notready", "ready", "finished"}) public class Iterator { - boolean hn; + boolean hn; - @StateRefinement(from = "notready(this)", to = "ready(this)") - boolean hasNext(boolean hn) { - return hn; - } + @StateRefinement(from = "notready(this)", to = "ready(this)") + boolean hasNext(boolean hn) { + return hn; + } - @StateRefinement(from = "ready(this)", to = "finished(this)") - int next(boolean hn) { - int r; - if (hn) r = 1; - else r = -1; - return r; - } + @StateRefinement(from = "ready(this)", to = "finished(this)") + int next(boolean hn) { + int r; + if (hn) r = 1; + else r = -1; + return r; + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Test.java b/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Test.java index 09b4872d..e4247c86 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/iterator_correct/Test.java @@ -2,11 +2,11 @@ public class Test { - @SuppressWarnings("unused") - public static void main(String[] args) { - Iterator i = new Iterator(); - boolean hn = true; - i.hasNext(true); - int x = i.next(hn); - } + @SuppressWarnings("unused") + public static void main(String[] args) { + Iterator i = new Iterator(); + boolean hn = true; + i.hasNext(true); + int x = i.next(hn); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Iterator.java b/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Iterator.java index 534fb09b..bc378917 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Iterator.java +++ b/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Iterator.java @@ -6,18 +6,18 @@ @StateSet({"notready", "ready", "finished"}) public class Iterator { - boolean hn; + boolean hn; - @StateRefinement(from = "notready(this)", to = "ready(this)") - boolean hasNext(boolean hn) { - return hn; - } + @StateRefinement(from = "notready(this)", to = "ready(this)") + boolean hasNext(boolean hn) { + return hn; + } - @StateRefinement(from = "ready(this)", to = "finished(this)") - int next(boolean hn) { - int r; - if (hn) r = 1; - else r = -1; - return r; - } + @StateRefinement(from = "ready(this)", to = "finished(this)") + int next(boolean hn) { + int r; + if (hn) r = 1; + else r = -1; + return r; + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Test.java b/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Test.java index 9b142d2d..9e039952 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/iterator_error/Test.java @@ -2,9 +2,9 @@ public class Test { - @SuppressWarnings("unused") - public static void main(String[] args) { - Iterator i = new Iterator(); - int x = i.next(true); - } + @SuppressWarnings("unused") + public static void main(String[] args) { + Iterator i = new Iterator(); + int x = i.next(true); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/Order.java b/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/Order.java index f6bfee6b..e554614a 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/Order.java +++ b/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/Order.java @@ -8,41 +8,39 @@ @StateSet({"empty", "addingItems", "checkout", "closed"}) public class Order { - @RefinementPredicate("int totalPrice(Order o)") - @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") - public Order() {} - - @StateRefinement( - from = "(empty(this) || addingItems(this))", - to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") - @Refinement("_ == this") - public Order addItem(String itemName, @Refinement("_ > 0") int price) { - return this; - } - - @StateRefinement( - from = "addingItems(this)", - to = "checkout(this) && (totalPrice(this) == totalPrice(old(this)))") - @Refinement("_ == this") - public Order pay(int cardNumber) { - return this; - } - - @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") - @Refinement("_ == this") - public Order addGift() { - return this; - } - - @StateRefinement(from = "checkout(this)", to = "closed(this)") - @Refinement("_ == this") - public Order sendToAddress(String a) { - return this; - } - - @StateRefinement(to = "checkout(this) && (totalPrice(this) == totalPrice(old(this)))") - @Refinement("(totalPrice(_) == 0) && empty(_)") - public Order getNewOrderPayThis() { - return new Order(); - } + @RefinementPredicate("int totalPrice(Order o)") + @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") + public Order() {} + + @StateRefinement( + from = "(empty(this) || addingItems(this))", + to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") + @Refinement("_ == this") + public Order addItem(String itemName, @Refinement("_ > 0") int price) { + return this; + } + + @StateRefinement(from = "addingItems(this)", to = "checkout(this) && (totalPrice(this) == totalPrice(old(this)))") + @Refinement("_ == this") + public Order pay(int cardNumber) { + return this; + } + + @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") + @Refinement("_ == this") + public Order addGift() { + return this; + } + + @StateRefinement(from = "checkout(this)", to = "closed(this)") + @Refinement("_ == this") + public Order sendToAddress(String a) { + return this; + } + + @StateRefinement(to = "checkout(this) && (totalPrice(this) == totalPrice(old(this)))") + @Refinement("(totalPrice(_) == 0) && empty(_)") + public Order getNewOrderPayThis() { + return new Order(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/SimpleTest.java index 4117799c..c7d1371e 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/order_gift_correct/SimpleTest.java @@ -4,10 +4,10 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - Order o = new Order(); - Order f = o.addItem("shirt", 60).getNewOrderPayThis().addItem("t", 6).addItem("t", 1); - o.addGift(); - f.addItem("l", 1); - } + public static void main(String[] args) throws IOException { + Order o = new Order(); + Order f = o.addItem("shirt", 60).getNewOrderPayThis().addItem("t", 6).addItem("t", 1); + o.addGift(); + f.addItem("l", 1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/Order.java b/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/Order.java index 0d31b0db..e73f6d66 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/Order.java +++ b/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/Order.java @@ -9,38 +9,38 @@ @Ghost("int totalPrice") public class Order { - @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") - public Order() {} - - @StateRefinement( - from = "(empty(this) || addingItems(this))", - to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") - @Refinement("_ == this") - public Order addItem(String itemName, @Refinement("_ > 0") int price) { - return this; - } - - @StateRefinement(from = "addingItems(this)", to = "checkout(this)") - @Refinement("_ == this") - public Order pay(int cardNumber) { - return this; - } - - @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") - @Refinement("_ == this") - public Order addGift() { - return this; - } - - @StateRefinement(from = "checkout(this)", to = "closed(this)") - @Refinement("_ == this") - public Order sendToAddress(String a) { - return this; - } - - @StateRefinement(to = "checkout(this)") - @Refinement("(totalPrice(_) == 0) && empty(_)") - public Order getNewOrderPayThis() { - return new Order(); - } + @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") + public Order() {} + + @StateRefinement( + from = "(empty(this) || addingItems(this))", + to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") + @Refinement("_ == this") + public Order addItem(String itemName, @Refinement("_ > 0") int price) { + return this; + } + + @StateRefinement(from = "addingItems(this)", to = "checkout(this)") + @Refinement("_ == this") + public Order pay(int cardNumber) { + return this; + } + + @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") + @Refinement("_ == this") + public Order addGift() { + return this; + } + + @StateRefinement(from = "checkout(this)", to = "closed(this)") + @Refinement("_ == this") + public Order sendToAddress(String a) { + return this; + } + + @StateRefinement(to = "checkout(this)") + @Refinement("(totalPrice(_) == 0) && empty(_)") + public Order getNewOrderPayThis() { + return new Order(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/SimpleTest.java index a6e9098a..17a5d3c1 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/order_gift_error/SimpleTest.java @@ -4,10 +4,10 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - Order o = new Order(); - Order f = o.addItem("shirt", 60).getNewOrderPayThis().addItem("t", 6).addItem("t", 1); - o.addGift(); - f.addItem("l", 1).addGift(); - } + public static void main(String[] args) throws IOException { + Order o = new Order(); + Order f = o.addItem("shirt", 60).getNewOrderPayThis().addItem("t", 6).addItem("t", 1); + o.addGift(); + f.addItem("l", 1).addGift(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/Bus.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/Bus.java index d6c0fa4b..7ef41fcf 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/Bus.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/Bus.java @@ -1,9 +1,9 @@ package testSuite.classes.refs_from_interface_error; public class Bus implements ICar { - int year; + int year; - public void setYear(int x) { - year = x; - } + public void setYear(int x) { + year = x; + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/ICar.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/ICar.java index e8a84079..247cb69f 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/ICar.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/ICar.java @@ -5,5 +5,5 @@ @RefinementAlias("IntBetween(int val, int lo, int hi) { lo <= val && val <= hi}") public interface ICar { - public void setYear(@Refinement("IntBetween(_, 1600, 2050)") int y); + public void setYear(@Refinement("IntBetween(_, 1600, 2050)") int y); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/SimpleTest.java index 28c41e9d..1bfc3694 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_interface_error/SimpleTest.java @@ -4,8 +4,8 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - Bus b = new Bus(); - b.setYear(1500); - } + public static void main(String[] args) throws IOException { + Bus b = new Bus(); + b.setYear(1500); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Bus.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Bus.java index d647d0ef..648b00a5 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Bus.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Bus.java @@ -1,10 +1,10 @@ package testSuite.classes.refs_from_superclass_error; public class Bus extends Car { - int year; + int year; - @Override - public void setYear(int x) { - year = x; - } + @Override + public void setYear(int x) { + year = x; + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Car.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Car.java index 22a93824..673fb252 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Car.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/Car.java @@ -6,6 +6,6 @@ @RefinementAlias("IntBetween(int val, int lo, int hi) { lo <= val && val <= hi}") public class Car { - public void setYear(@Refinement("IntBetween(_, 1600, 2050)") int x) {} - ; + public void setYear(@Refinement("IntBetween(_, 1600, 2050)") int x) {} + ; } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/SimpleTest.java index b63b4dcb..bf27a38e 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclass_error/SimpleTest.java @@ -4,8 +4,8 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - Bus b = new Bus(); - b.setYear(1400); - } + public static void main(String[] args) throws IOException { + Bus b = new Bus(); + b.setYear(1400); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Bus.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Bus.java index 7313af18..bfd170b6 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Bus.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Bus.java @@ -5,28 +5,28 @@ @SuppressWarnings("unused") public class Bus extends Car { - private int year; - - @Refinement("_ > 20") - private int seats; - - @Override - public void setYear(@Refinement("IntBetween(x, 1000, 2100)") int x) { - year = x; - } - - @Refinement(" _ > 20 && _ < h") - @Override - public int getSeats(int h) { - if (seats < h) return seats; - else return 21; // dummy - } - - // @PrivateRefinement("this.year == k")//verified in visitCtReturn after - // @Refinement(" _ >= 50") - // public void setSeats(int k) { - // seats = k; - // } - // + private int year; + + @Refinement("_ > 20") + private int seats; + + @Override + public void setYear(@Refinement("IntBetween(x, 1000, 2100)") int x) { + year = x; + } + + @Refinement(" _ > 20 && _ < h") + @Override + public int getSeats(int h) { + if (seats < h) return seats; + else return 21; // dummy + } + + // @PrivateRefinement("this.year == k")//verified in visitCtReturn after + // @Refinement(" _ >= 50") + // public void setSeats(int k) { + // seats = k; + // } + // } diff --git a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Car.java b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Car.java index 362eeb61..24626302 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Car.java +++ b/liquidjava-example/src/main/java/testSuite/classes/refs_from_superclasses_correct/Car.java @@ -6,8 +6,8 @@ @RefinementAlias("IntBetween(int val, int lo, int hi) { lo <= val && val <= hi}") public abstract class Car { - public abstract void setYear(@Refinement("IntBetween(y, 1600, 2050)") int y); + public abstract void setYear(@Refinement("IntBetween(y, 1600, 2050)") int y); - @Refinement("_ >= 1 && _ < ceil") - public abstract int getSeats(@Refinement("_ == 50") int ceil); + @Refinement("_ >= 1 && _ < ceil") + public abstract int getSeats(@Refinement("_ == 50") int ceil); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/socket_error/SocketRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/socket_error/SocketRefinements.java index 2dfd06f4..4c31fcf2 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/socket_error/SocketRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/socket_error/SocketRefinements.java @@ -9,18 +9,18 @@ @StateSet({"unconnected", "binded", "connected", "closed"}) public interface SocketRefinements { - @StateRefinement(to = "unconnected(this)") - public void Socket(); + @StateRefinement(to = "unconnected(this)") + public void Socket(); - @StateRefinement(from = "unconnected(this)", to = "binded(this)") - public void bind(SocketAddress add); + @StateRefinement(from = "unconnected(this)", to = "binded(this)") + public void bind(SocketAddress add); - @StateRefinement(from = "binded(this)", to = "connected(this)") - public void connect(SocketAddress add); + @StateRefinement(from = "binded(this)", to = "connected(this)") + public void connect(SocketAddress add); - @StateRefinement(from = "connected(this)") - public void sendUrgentData(int n); + @StateRefinement(from = "connected(this)") + public void sendUrgentData(int n); - @StateRefinement(to = "closed(this)") - public void close(); + @StateRefinement(to = "closed(this)") + public void close(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/socket_error/Test.java b/liquidjava-example/src/main/java/testSuite/classes/socket_error/Test.java index 95cd4a51..cc2ebbf1 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/socket_error/Test.java +++ b/liquidjava-example/src/main/java/testSuite/classes/socket_error/Test.java @@ -7,15 +7,15 @@ public class Test { - public static void main(String[] args) throws IOException { + public static void main(String[] args) throws IOException { - int port = 5000; - InetAddress inetAddress = InetAddress.getByName("localhost"); + int port = 5000; + InetAddress inetAddress = InetAddress.getByName("localhost"); - Socket socket = new Socket(); - socket.bind(new InetSocketAddress(inetAddress, port)); - // socket.connect(new InetSocketAddress(inetAddress, port)); - socket.sendUrgentData(90); - socket.close(); - } + Socket socket = new Socket(); + socket.bind(new InetSocketAddress(inetAddress, port)); + // socket.connect(new InetSocketAddress(inetAddress, port)); + socket.sendUrgentData(90); + socket.close(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Bus.java b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Bus.java index f63d2507..fa21cd7b 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Bus.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Bus.java @@ -4,15 +4,12 @@ public class Bus extends Car { - @StateRefinement(to = "close(this)") - public Bus() { - } + @StateRefinement(to = "close(this)") + public Bus() {} - @Override - public void open() { - } + @Override + public void open() {} - @Override - public void close() { - } + @Override + public void close() {} } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Car.java b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Car.java index 5387ee30..a64e8613 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Car.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/Car.java @@ -6,10 +6,10 @@ @StateSet({"open", "close"}) public abstract class Car { - // @RefinementPredicate("boolean isOpen(Car c)") - @StateRefinement(from = "close(this)", to = "open(this)") - public abstract void open(); + // @RefinementPredicate("boolean isOpen(Car c)") + @StateRefinement(from = "close(this)", to = "open(this)") + public abstract void open(); - @StateRefinement(from = "open(this)", to = "close(this)") - public abstract void close(); + @StateRefinement(from = "open(this)", to = "close(this)") + public abstract void close(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/SimpleTest.java index f71c0006..45dc7ae1 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_from_superclass_correct/SimpleTest.java @@ -4,39 +4,39 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - Bus b = new Bus(); - // b.close();//error: not yet open, not possible to close - b.open(); - b.close(); - } - - // InputStreamReader isr = new InputStreamReader(System.in); - // isr.read(); - // isr.read(); - // isr.read(); - // isr.close(); - // - // //... - // isr.read(); - - // @Refinement("_ > 0") - // public int fun (int[] arr) { - // return max(arr[0], 1); - // } - // - - // //@Refinement("_.length(x) >= 0") == - //// @Refinement("length(_, x) >= 0") - //// int[] a1 = new int[5]; - // K(.., ..) - - // } - - // See error NaN - // @Refinement("true") - // double b = 0/0; - // @Refinement("_ > 5") - // double c = b; + public static void main(String[] args) throws IOException { + Bus b = new Bus(); + // b.close();//error: not yet open, not possible to close + b.open(); + b.close(); + } + + // InputStreamReader isr = new InputStreamReader(System.in); + // isr.read(); + // isr.read(); + // isr.read(); + // isr.close(); + // + // //... + // isr.read(); + + // @Refinement("_ > 0") + // public int fun (int[] arr) { + // return max(arr[0], 1); + // } + // + + // //@Refinement("_.length(x) >= 0") == + //// @Refinement("length(_, x) >= 0") + //// int[] a1 = new int[5]; + // K(.., ..) + + // } + + // See error NaN + // @Refinement("true") + // double b = 0/0; + // @Refinement("_ > 5") + // double c = b; } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/InputStreamReaderRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/InputStreamReaderRefinements.java index f3f9727b..53de91f1 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/InputStreamReaderRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/InputStreamReaderRefinements.java @@ -12,13 +12,13 @@ @StateSet({"nothingRead", "alreadyRead"}) public interface InputStreamReaderRefinements { - public void InputStreamReader(InputStream in); + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") - @Refinement("(_ >= -1) && (_ <= 127)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") + @Refinement("(_ >= -1) && (_ <= 127)") + public int read(); - @StateRefinement(from = "close(this)", to = "close(this)") - @StateRefinement(from = "open(this)", to = "close(this)") - public void close(); + @StateRefinement(from = "close(this)", to = "close(this)") + @StateRefinement(from = "open(this)", to = "close(this)") + public void close(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/SimpleTest.java index cfa5a683..994a85f9 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_cases_correct/SimpleTest.java @@ -7,41 +7,41 @@ @SuppressWarnings("unused") public class SimpleTest { - public static void main(String[] args) throws IOException { - InputStreamReader isr = new InputStreamReader(System.in); - @Refinement("a > -90") - int a = isr.read(); - isr.close(); - // isr.close(); - - } - - // InputStreamReader isr = new InputStreamReader(System.in); - // isr.read(); - // isr.read(); - // isr.read(); - // isr.close(); - // - // //... - // isr.read(); - - // @Refinement("_ > 0") - // public int fun (int[] arr) { - // return max(arr[0], 1); - // } - // - - // //@Refinement("_.length(x) >= 0") == - //// @Refinement("length(_, x) >= 0") - //// int[] a1 = new int[5]; - // K(.., ..) - - // } - - // See error NaN - // @Refinement("true") - // double b = 0/0; - // @Refinement("_ > 5") - // double c = b; + public static void main(String[] args) throws IOException { + InputStreamReader isr = new InputStreamReader(System.in); + @Refinement("a > -90") + int a = isr.read(); + isr.close(); + // isr.close(); + + } + + // InputStreamReader isr = new InputStreamReader(System.in); + // isr.read(); + // isr.read(); + // isr.read(); + // isr.close(); + // + // //... + // isr.read(); + + // @Refinement("_ > 0") + // public int fun (int[] arr) { + // return max(arr[0], 1); + // } + // + + // //@Refinement("_.length(x) >= 0") == + //// @Refinement("length(_, x) >= 0") + //// int[] a1 = new int[5]; + // K(.., ..) + + // } + + // See error NaN + // @Refinement("true") + // double b = 0/0; + // @Refinement("_ > 5") + // double c = b; } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/InputStreamReaderRefinements.java b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/InputStreamReaderRefinements.java index d10750ee..7d6b9a15 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/InputStreamReaderRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/InputStreamReaderRefinements.java @@ -12,14 +12,14 @@ @StateSet({"alreadyRead", "nothingRead"}) public interface InputStreamReaderRefinements { - @StateRefinement(to = "open(this) && close(this)") - public void InputStreamReader(InputStream in); + @StateRefinement(to = "open(this) && close(this)") + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") - @Refinement("(_ >= -1) && (_ <= 127)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") + @Refinement("(_ >= -1) && (_ <= 127)") + public int read(); - @StateRefinement(from = "close(this)", to = "close(this)") - @StateRefinement(from = "open(this)", to = "close(this)") - public void close(); + @StateRefinement(from = "close(this)", to = "close(this)") + @StateRefinement(from = "open(this)", to = "close(this)") + public void close(); } diff --git a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/SimpleTest.java index 6a04e0c7..d210c5fc 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/state_multiple_error/SimpleTest.java @@ -5,10 +5,10 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - InputStreamReader isr = new InputStreamReader(System.in); - isr.read(); - isr.close(); - isr.close(); - } + public static void main(String[] args) throws IOException { + InputStreamReader isr = new InputStreamReader(System.in); + isr.read(); + isr.close(); + isr.close(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/SimpleTest.java b/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/SimpleTest.java index c2f47752..5db5cff7 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/SimpleTest.java +++ b/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/SimpleTest.java @@ -4,43 +4,43 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - - TrafficLight tl = new TrafficLight(); - tl.transitionToAmber(); // correct - tl.transitionToRed(); // correct - tl.transitionToFlashingAmber(); - - TrafficLight tl2 = tl.getTrafficLightStartingRed(); - tl2.transitionToFlashingAmber(); - } - - // InputStreamReader isr = new InputStreamReader(System.in); - // isr.read(); - // isr.read(); - // isr.read(); - // isr.close(); - // - // //... - // isr.read(); - - // @Refinement("_ > 0") - // public int fun (int[] arr) { - // return max(arr[0], 1); - // } - // - - // //@Refinement("_.length(x) >= 0") == - //// @Refinement("length(_, x) >= 0") - //// int[] a1 = new int[5]; - // K(.., ..) - - // } - - // See error NaN - // @Refinement("true") - // double b = 0/0; - // @Refinement("_ > 5") - // double c = b; + public static void main(String[] args) throws IOException { + + TrafficLight tl = new TrafficLight(); + tl.transitionToAmber(); // correct + tl.transitionToRed(); // correct + tl.transitionToFlashingAmber(); + + TrafficLight tl2 = tl.getTrafficLightStartingRed(); + tl2.transitionToFlashingAmber(); + } + + // InputStreamReader isr = new InputStreamReader(System.in); + // isr.read(); + // isr.read(); + // isr.read(); + // isr.close(); + // + // //... + // isr.read(); + + // @Refinement("_ > 0") + // public int fun (int[] arr) { + // return max(arr[0], 1); + // } + // + + // //@Refinement("_.length(x) >= 0") == + //// @Refinement("length(_, x) >= 0") + //// int[] a1 = new int[5]; + // K(.., ..) + + // } + + // See error NaN + // @Refinement("true") + // double b = 0/0; + // @Refinement("_ > 5") + // double c = b; } diff --git a/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/TrafficLight.java b/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/TrafficLight.java index 3b475cf9..241279b2 100644 --- a/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/TrafficLight.java +++ b/liquidjava-example/src/main/java/testSuite/classes/traffic_light_correct/TrafficLight.java @@ -7,60 +7,60 @@ @StateSet({"green", "solidAmber", "red", "flashingAmber"}) @StateSet({"buttonTouched", "buttonNotTouched"}) public class TrafficLight { - // StateRefinement -> refines the state of the present object - // independently of the arguments or the return of the method + // StateRefinement -> refines the state of the present object + // independently of the arguments or the return of the method - public TrafficLight() {} + public TrafficLight() {} - @StateRefinement(from = "green(this)", to = "solidAmber(this)") - public void transitionToAmber() {} + @StateRefinement(from = "green(this)", to = "solidAmber(this)") + public void transitionToAmber() {} - @StateRefinement(from = "solidAmber(this)", to = "red(this)") - public void transitionToRed() {} + @StateRefinement(from = "solidAmber(this)", to = "red(this)") + public void transitionToRed() {} - @StateRefinement(from = "red(this)", to = "flashingAmber(this)") - public void transitionToFlashingAmber() {} + @StateRefinement(from = "red(this)", to = "flashingAmber(this)") + public void transitionToFlashingAmber() {} - @StateRefinement(from = "flashingAmber(this)", to = "green(this)") - public void transitionToGreen() {} + @StateRefinement(from = "flashingAmber(this)", to = "green(this)") + public void transitionToGreen() {} - @Refinement("red(_)") - public TrafficLight getTrafficLightStartingRed() { - TrafficLight t = new TrafficLight(); - t.transitionToAmber(); - t.transitionToRed(); - return t; - } + @Refinement("red(_)") + public TrafficLight getTrafficLightStartingRed() { + TrafficLight t = new TrafficLight(); + t.transitionToAmber(); + t.transitionToRed(); + return t; + } - // @StateRefinement(from="green(this)", to="solidAmber(this)") - // @Refinement("this == _") - // public TrafficLight transitionToAmber2() { - // //... - // return this; - // } + // @StateRefinement(from="green(this)", to="solidAmber(this)") + // @Refinement("this == _") + // public TrafficLight transitionToAmber2() { + // //... + // return this; + // } - // @StateRefinement(to="green(this)") - // @Refinement("_ >= 0") - // public int getTotalChangesReset() { - // return 0;//count - // } - // + // @StateRefinement(to="green(this)") + // @Refinement("_ >= 0") + // public int getTotalChangesReset() { + // return 0;//count + // } + // - // @StateRefinement(from="red(this)") - // public void passagersCross() {} - // - // @StateRefinement(to = "flashingAmber(this)") - // public void intermitentMalfunction() {} + // @StateRefinement(from="red(this)") + // public void passagersCross() {} + // + // @StateRefinement(to = "flashingAmber(this)") + // public void intermitentMalfunction() {} - // @StateRefinement(from="green(this)", to="solidAmber(this)") - // @StateRefinement(from="solidAmber(this)", to="red(this)") - // @StateRefinement(from="red(this)", to="flashingAmber(this)") - // @StateRefinement(from="flashingAmber(this)", to="green(this)") - // public void transition() {} - // - // @Refinement("_ == green(this)") - // public boolean carsPass() { - // return true; - // } + // @StateRefinement(from="green(this)", to="solidAmber(this)") + // @StateRefinement(from="solidAmber(this)", to="red(this)") + // @StateRefinement(from="red(this)", to="flashingAmber(this)") + // @StateRefinement(from="flashingAmber(this)", to="green(this)") + // public void transition() {} + // + // @Refinement("_ == green(this)") + // public boolean carsPass() { + // return true; + // } } diff --git a/liquidjava-example/src/main/java/testSuite/field_updates/CorrectFieldUpdate.java b/liquidjava-example/src/main/java/testSuite/field_updates/CorrectFieldUpdate.java index 300e3c84..7c4899ec 100644 --- a/liquidjava-example/src/main/java/testSuite/field_updates/CorrectFieldUpdate.java +++ b/liquidjava-example/src/main/java/testSuite/field_updates/CorrectFieldUpdate.java @@ -3,15 +3,15 @@ import liquidjava.specification.StateRefinement; public class CorrectFieldUpdate { - public int n = 0; + public int n = 0; - @StateRefinement(from = "n(this) > 0", to = "n(this) == n(old(this))") - public void shouldSucceedIfFieldIsPositive() {} + @StateRefinement(from = "n(this) > 0", to = "n(this) == n(old(this))") + public void shouldSucceedIfFieldIsPositive() {} - public static void main(String[] args) { + public static void main(String[] args) { - CorrectFieldUpdate t = new CorrectFieldUpdate(); - t.n = 1; - t.shouldSucceedIfFieldIsPositive(); - } + CorrectFieldUpdate t = new CorrectFieldUpdate(); + t.n = 1; + t.shouldSucceedIfFieldIsPositive(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/field_updates/ErrorFieldUpdate.java b/liquidjava-example/src/main/java/testSuite/field_updates/ErrorFieldUpdate.java index 2d59a365..4aeaf01e 100644 --- a/liquidjava-example/src/main/java/testSuite/field_updates/ErrorFieldUpdate.java +++ b/liquidjava-example/src/main/java/testSuite/field_updates/ErrorFieldUpdate.java @@ -3,15 +3,15 @@ import liquidjava.specification.StateRefinement; public class ErrorFieldUpdate { - public int n; + public int n; - @StateRefinement(from = "n(this) > 0", to = "n(this) == n(old(this))") - public void shouldFailIfFieldIsNegative() {} + @StateRefinement(from = "n(this) > 0", to = "n(this) == n(old(this))") + public void shouldFailIfFieldIsNegative() {} - public static void main(String[] args) { + public static void main(String[] args) { - ErrorFieldUpdate t = new ErrorFieldUpdate(); - t.n = -1; - t.shouldFailIfFieldIsNegative(); - } + ErrorFieldUpdate t = new ErrorFieldUpdate(); + t.n = -1; + t.shouldFailIfFieldIsNegative(); + } } diff --git a/liquidjava-example/src/main/java/testSuite/math/correctInvocation/InvocationFromMathLibrary.java b/liquidjava-example/src/main/java/testSuite/math/correctInvocation/InvocationFromMathLibrary.java index dd94f279..180ef118 100644 --- a/liquidjava-example/src/main/java/testSuite/math/correctInvocation/InvocationFromMathLibrary.java +++ b/liquidjava-example/src/main/java/testSuite/math/correctInvocation/InvocationFromMathLibrary.java @@ -4,148 +4,148 @@ @SuppressWarnings("unused") public class InvocationFromMathLibrary { - public static void main(String[] args) { - - // Math.abs(...) - @Refinement("b > 0") - int b = Math.abs(6); - @Refinement("_ == 6") - int a = Math.abs(6); - @Refinement("_ > 4") - int d = Math.abs(-6); - @Refinement("_ == -6") - int e = -Math.abs(-d); - - @Refinement("_ > 4") - int d1 = Math.abs(-6); - @Refinement("_ == -6") - int e1 = -Math.abs(-d1); - @Refinement("_ == -6") - int f1 = -Math.abs(e1); - @Refinement("_ == -6") - int f2 = -Math.abs(f1); - - // addExact(...) - @Refinement("_ == 11") - int a3 = Math.addExact(5, 6); - - // decrementExact - @Refinement("_ > 5") - int a7 = 10; - @Refinement("_ > 4") - int a8 = Math.decrementExact(a7); - @Refinement("_ == 9") - int a9 = Math.decrementExact(a7); - - // incrementExact - @Refinement("_ > 6") - int a12 = Math.incrementExact(a7); - @Refinement("_ == 11") - int a13 = Math.incrementExact(a7); - - @Refinement("_ > 5") - int prim = 10; - @Refinement("_ > 6") - int seg = Math.incrementExact(prim); - @Refinement("_ == 12") - int ter = Math.incrementExact(seg); - - // max - @Refinement("_ == 5") - int m1 = Math.max(4, 5); - @Refinement("_ > 5") - int m2 = Math.max(100, m1); - @Refinement("_ == 100") - int m3 = Math.max(100, m2); - @Refinement("_ == -100") - int m4 = Math.max(-1000, -m2); - - // min - @Refinement("_ == 4") - int m5 = Math.min(4, 5); - @Refinement("_ < 5") - int m6 = Math.min(100, m5); - @Refinement("_ == 4") - int m7 = Math.min(100, m6); - @Refinement("_ == -1000") - int m8 = Math.min(-1000, -m6); - - // multiplyExact - @Refinement("_ == 40") - int mul = Math.multiplyExact(5, 8); - @Refinement("_ == -mul") - int mul1 = Math.multiplyExact(mul, -1); - @Refinement("_ > mul") - int mul2 = Math.multiplyExact(mul1, mul1); - - // negateExact - @Refinement("_ == 40") - int negE = Math.negateExact(-40); - @Refinement("_ < 0") - int negEx = Math.negateExact(negE); - @Refinement("_ > 39") - int negExa = Math.negateExact(negEx); - - // subtractExact - @Refinement("_ < -40") - int subE = Math.subtractExact(-40, 5); - @Refinement("_ > 0") - int subEx = Math.subtractExact(0, subE); - @Refinement("_ == 0") - int subExa = Math.subtractExact(subEx, subEx); - } - - private void notIntMethods() { - // working but taking lot of time - // //Math.random() - // @Refinement("_ >= 0") - // double c = Math.random(); - // @Refinement("_ < 0") - // double f = -Math.random(); - // @Refinement("true") - // double r1 = Math.random(); - // @Refinement("_ > 0") - // double r2 = r1*5; - // - // - // @Refinement("_ > 0") - // double a1 = Math.abs(15.3); - // @Refinement("_ > 10") - // long b1 = Math.abs(-13); - // @Refinement("_ > 10") - // float c1 = Math.abs(-13f); - // - // @Refinement("_ > 10") - // long b3 = Math.addExact(5l, 6l); - // - // - // @Refinement("_ < 4") - // double a5 = Math.acos(0.5); - // @Refinement("_ < 2") - // double a6 = Math.asin(a5); - // - // - // @Refinement("_ > 5") - // int a7 = 10; - // @Refinement("_ > 4") - // long a10 = Math.decrementExact(a7); - // @Refinement("_ == 9") - // long a11 = Math.decrementExact(a7); - - // copySign - // @Refinement("(_ == -5)") - // float prim = Math.copySign(-5, -500); - // @Refinement("_ == -656") - // float ter = Math.copySign(656, prim); - - // Constants - @Refinement("_ > 3") - double a2 = Math.PI; - @Refinement("_ > 2") - double b2 = Math.E; - @Refinement("_ == 30") - double radius = 30; - @Refinement("perimeter > 1") - double perimeter = 2 * Math.PI * radius; - } + public static void main(String[] args) { + + // Math.abs(...) + @Refinement("b > 0") + int b = Math.abs(6); + @Refinement("_ == 6") + int a = Math.abs(6); + @Refinement("_ > 4") + int d = Math.abs(-6); + @Refinement("_ == -6") + int e = -Math.abs(-d); + + @Refinement("_ > 4") + int d1 = Math.abs(-6); + @Refinement("_ == -6") + int e1 = -Math.abs(-d1); + @Refinement("_ == -6") + int f1 = -Math.abs(e1); + @Refinement("_ == -6") + int f2 = -Math.abs(f1); + + // addExact(...) + @Refinement("_ == 11") + int a3 = Math.addExact(5, 6); + + // decrementExact + @Refinement("_ > 5") + int a7 = 10; + @Refinement("_ > 4") + int a8 = Math.decrementExact(a7); + @Refinement("_ == 9") + int a9 = Math.decrementExact(a7); + + // incrementExact + @Refinement("_ > 6") + int a12 = Math.incrementExact(a7); + @Refinement("_ == 11") + int a13 = Math.incrementExact(a7); + + @Refinement("_ > 5") + int prim = 10; + @Refinement("_ > 6") + int seg = Math.incrementExact(prim); + @Refinement("_ == 12") + int ter = Math.incrementExact(seg); + + // max + @Refinement("_ == 5") + int m1 = Math.max(4, 5); + @Refinement("_ > 5") + int m2 = Math.max(100, m1); + @Refinement("_ == 100") + int m3 = Math.max(100, m2); + @Refinement("_ == -100") + int m4 = Math.max(-1000, -m2); + + // min + @Refinement("_ == 4") + int m5 = Math.min(4, 5); + @Refinement("_ < 5") + int m6 = Math.min(100, m5); + @Refinement("_ == 4") + int m7 = Math.min(100, m6); + @Refinement("_ == -1000") + int m8 = Math.min(-1000, -m6); + + // multiplyExact + @Refinement("_ == 40") + int mul = Math.multiplyExact(5, 8); + @Refinement("_ == -mul") + int mul1 = Math.multiplyExact(mul, -1); + @Refinement("_ > mul") + int mul2 = Math.multiplyExact(mul1, mul1); + + // negateExact + @Refinement("_ == 40") + int negE = Math.negateExact(-40); + @Refinement("_ < 0") + int negEx = Math.negateExact(negE); + @Refinement("_ > 39") + int negExa = Math.negateExact(negEx); + + // subtractExact + @Refinement("_ < -40") + int subE = Math.subtractExact(-40, 5); + @Refinement("_ > 0") + int subEx = Math.subtractExact(0, subE); + @Refinement("_ == 0") + int subExa = Math.subtractExact(subEx, subEx); + } + + private void notIntMethods() { + // working but taking lot of time + // //Math.random() + // @Refinement("_ >= 0") + // double c = Math.random(); + // @Refinement("_ < 0") + // double f = -Math.random(); + // @Refinement("true") + // double r1 = Math.random(); + // @Refinement("_ > 0") + // double r2 = r1*5; + // + // + // @Refinement("_ > 0") + // double a1 = Math.abs(15.3); + // @Refinement("_ > 10") + // long b1 = Math.abs(-13); + // @Refinement("_ > 10") + // float c1 = Math.abs(-13f); + // + // @Refinement("_ > 10") + // long b3 = Math.addExact(5l, 6l); + // + // + // @Refinement("_ < 4") + // double a5 = Math.acos(0.5); + // @Refinement("_ < 2") + // double a6 = Math.asin(a5); + // + // + // @Refinement("_ > 5") + // int a7 = 10; + // @Refinement("_ > 4") + // long a10 = Math.decrementExact(a7); + // @Refinement("_ == 9") + // long a11 = Math.decrementExact(a7); + + // copySign + // @Refinement("(_ == -5)") + // float prim = Math.copySign(-5, -500); + // @Refinement("_ == -656") + // float ter = Math.copySign(656, prim); + + // Constants + @Refinement("_ > 3") + double a2 = Math.PI; + @Refinement("_ > 2") + double b2 = Math.E; + @Refinement("_ == 30") + double radius = 30; + @Refinement("perimeter > 1") + double perimeter = 2 * Math.PI * radius; + } } diff --git a/liquidjava-example/src/main/java/testSuite/math/correctInvocation/MathRefinements.java b/liquidjava-example/src/main/java/testSuite/math/correctInvocation/MathRefinements.java index c23f6f39..925b746e 100644 --- a/liquidjava-example/src/main/java/testSuite/math/correctInvocation/MathRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/math/correctInvocation/MathRefinements.java @@ -6,60 +6,60 @@ @ExternalRefinementsFor("java.lang.Math") public interface MathRefinements { - @Refinement("_ == 3.141592653589793") - public double PI = 0; + @Refinement("_ == 3.141592653589793") + public double PI = 0; - @Refinement("_ == 2.7182818284590452354") - public double E = 0; + @Refinement("_ == 2.7182818284590452354") + public double E = 0; - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(int arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(int arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(long arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(long arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(float arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(float arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(double arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(double arg0); - @Refinement(" _ == a+b") - public int addExact(int a, int b); + @Refinement(" _ == a+b") + public int addExact(int a, int b); - @Refinement(" _ == a+b") - public long addExact(long a, long b); + @Refinement(" _ == a+b") + public long addExact(long a, long b); - @Refinement(" _ == a-b") - public int subtractExact(int a, int b); + @Refinement(" _ == a-b") + public int subtractExact(int a, int b); - @Refinement(" _ == a*b") - public int multiplyExact(int a, int b); + @Refinement(" _ == a*b") + public int multiplyExact(int a, int b); - @Refinement("_ == (-a)") - public int negateExact(int a); + @Refinement("_ == (-a)") + public int negateExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(int a); + @Refinement("_ == (a-1)") + public int decrementExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(long a); + @Refinement("_ == (a-1)") + public int decrementExact(long a); - @Refinement("_ == (a+1)") - public int incrementExact(int a); + @Refinement("_ == (a+1)") + public int incrementExact(int a); - @Refinement("_ == (a+1)") - public int incrementExact(long a); + @Refinement("_ == (a+1)") + public int incrementExact(long a); - @Refinement("(a > b)? (_ == a):(_ == b)") - public int max(int a, int b); + @Refinement("(a > b)? (_ == a):(_ == b)") + public int max(int a, int b); - @Refinement("(a > b)? (_ == b):(_ == a)") - public int min(int a, int b); + @Refinement("(a > b)? (_ == b):(_ == a)") + public int min(int a, int b); - @Refinement(" _ > 0.0 && _ < 1.0") - public long random(long a, long b); + @Refinement(" _ > 0.0 && _ < 1.0") + public long random(long a, long b); - @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") - public float copySign(float arg, float sig); + @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") + public float copySign(float arg, float sig); } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathAbs.java b/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathAbs.java index 13beba5c..e8427580 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathAbs.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathAbs.java @@ -4,11 +4,11 @@ @SuppressWarnings("unused") public class MathAbs { - public static void main(String[] args) { - @Refinement("true") - int ab = Math.abs(-9); + public static void main(String[] args) { + @Refinement("true") + int ab = Math.abs(-9); - @Refinement("_ == 9") - int ab1 = -ab; - } + @Refinement("_ == 9") + int ab1 = -ab; + } } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathRefinements.java b/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathRefinements.java index 859e234a..ce8bf612 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorAbs/MathRefinements.java @@ -6,60 +6,60 @@ @ExternalRefinementsFor("java.lang.Math") public interface MathRefinements { - @Refinement("_ == 3.141592653589793") - public double PI = 0; + @Refinement("_ == 3.141592653589793") + public double PI = 0; - @Refinement("_ == 2.7182818284590452354") - public double E = 0; + @Refinement("_ == 2.7182818284590452354") + public double E = 0; - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(int arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(int arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(long arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(long arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(float arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(float arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(double arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(double arg0); - @Refinement(" _ == a+b") - public int addExact(int a, int b); + @Refinement(" _ == a+b") + public int addExact(int a, int b); - @Refinement(" _ == a+b") - public long addExact(long a, long b); + @Refinement(" _ == a+b") + public long addExact(long a, long b); - @Refinement(" _ == a-b") - public int subtractExact(int a, int b); + @Refinement(" _ == a-b") + public int subtractExact(int a, int b); - @Refinement(" _ == a*b") - public int multiplyExact(int a, int b); + @Refinement(" _ == a*b") + public int multiplyExact(int a, int b); - @Refinement("_ == (-a)") - public int negateExact(int a); + @Refinement("_ == (-a)") + public int negateExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(int a); + @Refinement("_ == (a-1)") + public int decrementExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(long a); + @Refinement("_ == (a-1)") + public int decrementExact(long a); - @Refinement("_ == (a+1)") - public int incrementExact(int a); + @Refinement("_ == (a+1)") + public int incrementExact(int a); - @Refinement("_ == (a+1)") - public int incrementExact(long a); + @Refinement("_ == (a+1)") + public int incrementExact(long a); - @Refinement("(a > b)? (_ == a):(_ == b)") - public int max(int a, int b); + @Refinement("(a > b)? (_ == a):(_ == b)") + public int max(int a, int b); - @Refinement("(a > b)? (_ == b):(_ == a)") - public int min(int a, int b); + @Refinement("(a > b)? (_ == b):(_ == a)") + public int min(int a, int b); - @Refinement(" _ > 0.0 && _ < 1.0") - public long random(long a, long b); + @Refinement(" _ > 0.0 && _ < 1.0") + public long random(long a, long b); - @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") - public float copySign(float arg, float sig); + @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") + public float copySign(float arg, float sig); } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorMax/MathAbs.java b/liquidjava-example/src/main/java/testSuite/math/errorMax/MathAbs.java index dd440289..75c12d9e 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorMax/MathAbs.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorMax/MathAbs.java @@ -4,11 +4,11 @@ @SuppressWarnings("unused") public class MathAbs { - public static void main(String[] args) { - @Refinement("true") - int ab = Math.abs(-9); + public static void main(String[] args) { + @Refinement("true") + int ab = Math.abs(-9); - @Refinement("_ == 9") - int ab1 = -ab; - } + @Refinement("_ == 9") + int ab1 = -ab; + } } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorMax/MathRefinements.java b/liquidjava-example/src/main/java/testSuite/math/errorMax/MathRefinements.java index 56dff49b..72a22f6e 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorMax/MathRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorMax/MathRefinements.java @@ -6,60 +6,60 @@ @ExternalRefinementsFor("java.lang.Math") public interface MathRefinements { - @Refinement("_ == 3.141592653589793") - public double PI = 0; + @Refinement("_ == 3.141592653589793") + public double PI = 0; - @Refinement("_ == 2.7182818284590452354") - public double E = 0; + @Refinement("_ == 2.7182818284590452354") + public double E = 0; - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(int arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(int arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(long arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(long arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(float arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(float arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(double arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(double arg0); - @Refinement(" _ == a+b") - public int addExact(int a, int b); + @Refinement(" _ == a+b") + public int addExact(int a, int b); - @Refinement(" _ == a+b") - public long addExact(long a, long b); + @Refinement(" _ == a+b") + public long addExact(long a, long b); - @Refinement(" _ == a-b") - public int subtractExact(int a, int b); + @Refinement(" _ == a-b") + public int subtractExact(int a, int b); - @Refinement(" _ == a*b") - public int multiplyExact(int a, int b); + @Refinement(" _ == a*b") + public int multiplyExact(int a, int b); - @Refinement("_ == (-a)") - public int negateExact(int a); + @Refinement("_ == (-a)") + public int negateExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(int a); + @Refinement("_ == (a-1)") + public int decrementExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(long a); + @Refinement("_ == (a-1)") + public int decrementExact(long a); - @Refinement("_ == (a+1)") - public int incrementExact(int a); + @Refinement("_ == (a+1)") + public int incrementExact(int a); - @Refinement("_ == (a+1)") - public int incrementExact(long a); + @Refinement("_ == (a+1)") + public int incrementExact(long a); - @Refinement("(a > b)? (_ == a):(_ == b)") - public int max(int a, int b); + @Refinement("(a > b)? (_ == a):(_ == b)") + public int max(int a, int b); - @Refinement("(a > b)? (_ == b):(_ == a)") - public int min(int a, int b); + @Refinement("(a > b)? (_ == b):(_ == a)") + public int min(int a, int b); - @Refinement(" _ > 0.0 && _ < 1.0") - public long random(long a, long b); + @Refinement(" _ > 0.0 && _ < 1.0") + public long random(long a, long b); - @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") - public float copySign(float arg, float sig); + @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") + public float copySign(float arg, float sig); } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathMultiplyExact.java b/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathMultiplyExact.java index b8cf3006..28f8d2cf 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathMultiplyExact.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathMultiplyExact.java @@ -4,12 +4,12 @@ @SuppressWarnings("unused") public class MathMultiplyExact { - public static void main(String[] args) { - @Refinement("_ == 40") - int mul = Math.multiplyExact(5, 8); - @Refinement("_ == -mul") - int mul1 = Math.multiplyExact(mul, -1); - @Refinement("_ < 0") - int mul2 = Math.multiplyExact(mul1, mul1); - } + public static void main(String[] args) { + @Refinement("_ == 40") + int mul = Math.multiplyExact(5, 8); + @Refinement("_ == -mul") + int mul1 = Math.multiplyExact(mul, -1); + @Refinement("_ < 0") + int mul2 = Math.multiplyExact(mul1, mul1); + } } diff --git a/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathRefinements.java b/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathRefinements.java index ec8e23a3..6d128143 100644 --- a/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathRefinements.java +++ b/liquidjava-example/src/main/java/testSuite/math/errorMultiplyExact/MathRefinements.java @@ -6,60 +6,60 @@ @ExternalRefinementsFor("java.lang.Math") public interface MathRefinements { - @Refinement("_ == 3.141592653589793") - public double PI = 0; + @Refinement("_ == 3.141592653589793") + public double PI = 0; - @Refinement("_ == 2.7182818284590452354") - public double E = 0; + @Refinement("_ == 2.7182818284590452354") + public double E = 0; - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(int arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(int arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(long arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(long arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(float arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(float arg0); - @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") - public int abs(double arg0); + @Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)") + public int abs(double arg0); - @Refinement(" _ == a+b") - public int addExact(int a, int b); + @Refinement(" _ == a+b") + public int addExact(int a, int b); - @Refinement(" _ == a+b") - public long addExact(long a, long b); + @Refinement(" _ == a+b") + public long addExact(long a, long b); - @Refinement(" _ == a-b") - public int subtractExact(int a, int b); + @Refinement(" _ == a-b") + public int subtractExact(int a, int b); - @Refinement(" _ == a*b") - public int multiplyExact(int a, int b); + @Refinement(" _ == a*b") + public int multiplyExact(int a, int b); - @Refinement("_ == (-a)") - public int negateExact(int a); + @Refinement("_ == (-a)") + public int negateExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(int a); + @Refinement("_ == (a-1)") + public int decrementExact(int a); - @Refinement("_ == (a-1)") - public int decrementExact(long a); + @Refinement("_ == (a-1)") + public int decrementExact(long a); - @Refinement("_ == (a+1)") - public int incrementExact(int a); + @Refinement("_ == (a+1)") + public int incrementExact(int a); - @Refinement("_ == (a+1)") - public int incrementExact(long a); + @Refinement("_ == (a+1)") + public int incrementExact(long a); - @Refinement("(a > b)? (_ == a):(_ == b)") - public int max(int a, int b); + @Refinement("(a > b)? (_ == a):(_ == b)") + public int max(int a, int b); - @Refinement("(a > b)? (_ == b):(_ == a)") - public int min(int a, int b); + @Refinement("(a > b)? (_ == b):(_ == a)") + public int min(int a, int b); - @Refinement(" _ > 0.0 && _ < 1.0") - public long random(long a, long b); + @Refinement(" _ > 0.0 && _ < 1.0") + public long random(long a, long b); - @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") - public float copySign(float arg, float sig); + @Refinement("((sig > 0)?(_ > 0):(_ < 0)) && (( _ == arg)||(_ == -arg))") + public float copySign(float arg, float sig); } diff --git a/liquidjava-example/src/main/java/testingInProgress/Account.java b/liquidjava-example/src/main/java/testingInProgress/Account.java index e7d90423..4498f36a 100644 --- a/liquidjava-example/src/main/java/testingInProgress/Account.java +++ b/liquidjava-example/src/main/java/testingInProgress/Account.java @@ -7,36 +7,35 @@ @Ghost("int sum") public class Account { - @Refinement("balance >= 0") - private int balance; - - public Account() { - balance = 0; - } - - @StateRefinement(to = "sum(this) == v") - public Account(@Refinement("v >= 0") int v) { - balance = v; - } - - @StateRefinement( - to = "(sum(old(this)) > v)? (sum(this) == (sum(old(this)) - v)) : (sum(this) == 0)") - public void withdraw(int v) { - if (v > balance) balance = 0; - else balance = balance - v; - } - - @StateRefinement(to = "sum(this) == (sum(old(this)) + v)") - public void deposit(int v) { - balance += v; - } - - // @StateRefinement(from="(amount <= sum(this)) && (sum(this) == sum(old(this)))", to="...") - // @Refinement("sum(_) == (sum(old(_)) + amount)") - // public Account transferTo(Account other, @Refinement("_ < sum(this)")int amount) { - // this.withdraw(amount); - // other.deposit(amount); - // return other; - // } + @Refinement("balance >= 0") + private int balance; + + public Account() { + balance = 0; + } + + @StateRefinement(to = "sum(this) == v") + public Account(@Refinement("v >= 0") int v) { + balance = v; + } + + @StateRefinement(to = "(sum(old(this)) > v)? (sum(this) == (sum(old(this)) - v)) : (sum(this) == 0)") + public void withdraw(int v) { + if (v > balance) balance = 0; + else balance = balance - v; + } + + @StateRefinement(to = "sum(this) == (sum(old(this)) + v)") + public void deposit(int v) { + balance += v; + } + + // @StateRefinement(from="(amount <= sum(this)) && (sum(this) == sum(old(this)))", to="...") + // @Refinement("sum(_) == (sum(old(_)) + amount)") + // public Account transferTo(Account other, @Refinement("_ < sum(this)")int amount) { + // this.withdraw(amount); + // other.deposit(amount); + // return other; + // } } diff --git a/liquidjava-example/src/main/java/testingInProgress/ArrayListRefinements.java b/liquidjava-example/src/main/java/testingInProgress/ArrayListRefinements.java index c1cbd257..a7b02044 100644 --- a/liquidjava-example/src/main/java/testingInProgress/ArrayListRefinements.java +++ b/liquidjava-example/src/main/java/testingInProgress/ArrayListRefinements.java @@ -7,19 +7,19 @@ @ExternalRefinementsFor("java.util.ArrayList") public interface ArrayListRefinements { - @RefinementPredicate("int size(ArrayList l)") - @Refinement("size(this) == 0") - public void ArrayList(); + @RefinementPredicate("int size(ArrayList l)") + @Refinement("size(this) == 0") + public void ArrayList(); - @Refinement("size(this) == (size(old(this)) + 1)") - public void add(E e); + @Refinement("size(this) == (size(old(this)) + 1)") + public void add(E e); - // @Refinement("size(this) == (size(old(this)) - 1)") - // public void remove(int index); + // @Refinement("size(this) == (size(old(this)) - 1)") + // public void remove(int index); - // public E get(@Refinement("index >= 0 && index < size(this)") int index); + // public E get(@Refinement("index >= 0 && index < size(this)") int index); - // @Refinement("size(_) == size(this)") - // public Object clone(); + // @Refinement("size(_) == size(this)") + // public Object clone(); } diff --git a/liquidjava-example/src/main/java/testingInProgress/Car.java b/liquidjava-example/src/main/java/testingInProgress/Car.java index 1aa49c4b..3d56e5ce 100644 --- a/liquidjava-example/src/main/java/testingInProgress/Car.java +++ b/liquidjava-example/src/main/java/testingInProgress/Car.java @@ -1,4 +1,5 @@ package testingInProgress; + import liquidjava.specification.Refinement; import liquidjava.specification.RefinementAlias; @@ -6,54 +7,54 @@ @RefinementAlias("IntBetween(int val, int lo, int hi) { lo <= val && val <= hi}") public class Car { - @Refinement("IntBetween(_, 1800, 2050)") - private int year; - - private boolean isOpen; - - public void setYear(@Refinement("IntBetween(_, 1900, 2010)") int year) { - this.year = year; - } - - @Refinement("IntBetween(_, 1800, 2050)") - public int getYear() { - return year; - } - - @Refinement("_ == (this.year > c.year))") - public boolean isOlderThan(Car c) { - return this.year > c.year; - } - - // @StateRefinement(to = "year == old(year)+i") - // @Refinement("_ == old(year) + i") - // public int addYear(int i) { - // year = year + i; - // return year; - // } - - // REFINE STATE - // - // @StateRefinement(to = "!open(this)") - // public Car() { - // isOpen = false; - // } - // - // @StateRefinement(from = "!open(this)", to = "open(this) != open(#old)") - // public void openCar() { - // isOpen = true; - // } - // - // - // @StateRefinement(from = "open(this)") - // public void passagerEnters() { - // //... - // } - // - // int a = 10; - // a - // instances a1, ..., an - // a1 == 10 - // an = 15; + @Refinement("IntBetween(_, 1800, 2050)") + private int year; + + private boolean isOpen; + + public void setYear(@Refinement("IntBetween(_, 1900, 2010)") int year) { + this.year = year; + } + + @Refinement("IntBetween(_, 1800, 2050)") + public int getYear() { + return year; + } + + @Refinement("_ == (this.year > c.year))") + public boolean isOlderThan(Car c) { + return this.year > c.year; + } + + // @StateRefinement(to = "year == old(year)+i") + // @Refinement("_ == old(year) + i") + // public int addYear(int i) { + // year = year + i; + // return year; + // } + + // REFINE STATE + // + // @StateRefinement(to = "!open(this)") + // public Car() { + // isOpen = false; + // } + // + // @StateRefinement(from = "!open(this)", to = "open(this) != open(#old)") + // public void openCar() { + // isOpen = true; + // } + // + // + // @StateRefinement(from = "open(this)") + // public void passagerEnters() { + // //... + // } + // + // int a = 10; + // a + // instances a1, ..., an + // a1 == 10 + // an = 15; } diff --git a/liquidjava-example/src/main/java/testingInProgress/Email.java b/liquidjava-example/src/main/java/testingInProgress/Email.java index 1c0eca6a..63236cd2 100644 --- a/liquidjava-example/src/main/java/testingInProgress/Email.java +++ b/liquidjava-example/src/main/java/testingInProgress/Email.java @@ -1,4 +1,5 @@ package testingInProgress; + import java.util.ArrayList; import java.util.List; import liquidjava.specification.RefinementPredicate; @@ -9,39 +10,39 @@ // add sender -> add multiple receivers -> add subject -> add body -> build() @SuppressWarnings("unused") public class Email { - private String sender; - private List receiver; - private String subject; - private String body; - - @RefinementPredicate("int state(Email e)") - @StateRefinement(to = "state(this) == 1") - public Email() { - receiver = new ArrayList<>(); - } - - @StateRefinement(from = "state(this) == 1", to = "state(this) == 2") - public void from(String s) { - sender = s; - } - - @StateRefinement(from = "(state(this) == 2) || (state(this) == 3)", to = "state(this) == 3") - public void to(String s) { - receiver.add(s); - } - - @StateRefinement(from = "state(this) == 3", to = "state(this) == 3") - public void subject(String s) { // optional - subject = s; - } - - @StateRefinement(from = "state(this) == 3", to = "state(this) == 4") - public void body(String s) { - body = s; - } - - @StateRefinement(from = "state(this) == 4", to = "state(this) == 4") - public String build() { - return "email..."; // string with all the email - } + private String sender; + private List receiver; + private String subject; + private String body; + + @RefinementPredicate("int state(Email e)") + @StateRefinement(to = "state(this) == 1") + public Email() { + receiver = new ArrayList<>(); + } + + @StateRefinement(from = "state(this) == 1", to = "state(this) == 2") + public void from(String s) { + sender = s; + } + + @StateRefinement(from = "(state(this) == 2) || (state(this) == 3)", to = "state(this) == 3") + public void to(String s) { + receiver.add(s); + } + + @StateRefinement(from = "state(this) == 3", to = "state(this) == 3") + public void subject(String s) { // optional + subject = s; + } + + @StateRefinement(from = "state(this) == 3", to = "state(this) == 4") + public void body(String s) { + body = s; + } + + @StateRefinement(from = "state(this) == 4", to = "state(this) == 4") + public String build() { + return "email..."; // string with all the email + } } diff --git a/liquidjava-example/src/main/java/testingInProgress/InputStreamReaderRefinements.java b/liquidjava-example/src/main/java/testingInProgress/InputStreamReaderRefinements.java index 344b33d6..b3834442 100644 --- a/liquidjava-example/src/main/java/testingInProgress/InputStreamReaderRefinements.java +++ b/liquidjava-example/src/main/java/testingInProgress/InputStreamReaderRefinements.java @@ -1,4 +1,5 @@ package testingInProgress; + import java.io.InputStream; import liquidjava.specification.ExternalRefinementsFor; import liquidjava.specification.Refinement; @@ -11,14 +12,14 @@ @StateSet({"alreadyRead", "nothingRead"}) public interface InputStreamReaderRefinements { - @StateRefinement(to = "open(this)") - public void InputStreamReader(InputStream in); + @StateRefinement(to = "open(this)") + public void InputStreamReader(InputStream in); - @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") - @Refinement("(_ >= -1) && (_ <= 127)") - public int read(); + @StateRefinement(from = "open(this)", to = "open(this) && alreadyRead(this)") + @Refinement("(_ >= -1) && (_ <= 127)") + public int read(); - @StateRefinement(from = "close(this)", to = "close(this)") - @StateRefinement(from = "open(this)", to = "close(this)") - public void close(); + @StateRefinement(from = "close(this)", to = "close(this)") + @StateRefinement(from = "open(this)", to = "close(this)") + public void close(); } diff --git a/liquidjava-example/src/main/java/testingInProgress/MyList.java b/liquidjava-example/src/main/java/testingInProgress/MyList.java index 78420f4b..d8120d22 100644 --- a/liquidjava-example/src/main/java/testingInProgress/MyList.java +++ b/liquidjava-example/src/main/java/testingInProgress/MyList.java @@ -1,18 +1,19 @@ package testingInProgress; + import java.util.ArrayList; import liquidjava.specification.Refinement; public class MyList { - int[] arr = new int[20]; + int[] arr = new int[20]; - @Refinement("lengthA(_) == 0") - public ArrayList createList() { - return new ArrayList(); - } + @Refinement("lengthA(_) == 0") + public ArrayList createList() { + return new ArrayList(); + } - @Refinement("lengthA(_) == (1 + lengthA(xs))") - public ArrayList append(ArrayList xs, int k) { - return null; - } + @Refinement("lengthA(_) == (1 + lengthA(xs))") + public ArrayList append(ArrayList xs, int k) { + return null; + } } diff --git a/liquidjava-example/src/main/java/testingInProgress/Order.java b/liquidjava-example/src/main/java/testingInProgress/Order.java index 466e0c71..7c2f0680 100644 --- a/liquidjava-example/src/main/java/testingInProgress/Order.java +++ b/liquidjava-example/src/main/java/testingInProgress/Order.java @@ -9,38 +9,38 @@ @Ghost("int totalPrice") public class Order { - @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") - public Order() {} - - @StateRefinement( - from = "(empty(this) || addingItems(this))", - to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") - @Refinement("_ == this") - public Order addItem(String itemName, @Refinement("_ > 0") int price) { - return this; - } - - @StateRefinement(from = "addingItems(this)", to = "checkout(this)") - @Refinement("_ == this") - public Order pay(int cardNumber) { - return this; - } - - @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") - @Refinement("_ == this") - public Order addGift() { - return this; - } - - @StateRefinement(from = "checkout(this)", to = "closed(this)") - @Refinement("_ == this") - public Order sendToAddress(String a) { - return this; - } - - @StateRefinement(to = "checkout(this)") - @Refinement("(totalPrice(_) == 0) && empty(_)") - public Order getNewOrderPayThis() { - return new Order(); - } + @StateRefinement(to = "(totalPrice(this) == 0) && empty(this)") + public Order() {} + + @StateRefinement( + from = "(empty(this) || addingItems(this))", + to = "((totalPrice(this) == (totalPrice(old(this)) + price)) && addingItems(this))") + @Refinement("_ == this") + public Order addItem(String itemName, @Refinement("_ > 0") int price) { + return this; + } + + @StateRefinement(from = "addingItems(this)", to = "checkout(this)") + @Refinement("_ == this") + public Order pay(int cardNumber) { + return this; + } + + @StateRefinement(from = "checkout(this) && totalPrice(this) > 20", to = "checkout(this)") + @Refinement("_ == this") + public Order addGift() { + return this; + } + + @StateRefinement(from = "checkout(this)", to = "closed(this)") + @Refinement("_ == this") + public Order sendToAddress(String a) { + return this; + } + + @StateRefinement(to = "checkout(this)") + @Refinement("(totalPrice(_) == 0) && empty(_)") + public Order getNewOrderPayThis() { + return new Order(); + } } diff --git a/liquidjava-example/src/main/java/testingInProgress/OrderSimple.java b/liquidjava-example/src/main/java/testingInProgress/OrderSimple.java index f950fe65..f0eb70d4 100644 --- a/liquidjava-example/src/main/java/testingInProgress/OrderSimple.java +++ b/liquidjava-example/src/main/java/testingInProgress/OrderSimple.java @@ -7,36 +7,36 @@ @StateSet({"empty", "addingItems", "checkout", "closed"}) public class OrderSimple { - @RefinementPredicate("int countItems(OrderSimple o)") - @StateRefinement(to = "(countItems(this) == 0) && empty(this)") - public OrderSimple() {} - - @StateRefinement( - from = "(empty(this) || addingItems(this))", - to = "((countItems(this) == (countItems(old(this)) + 1)) && addingItems(this))") - // @Refinement("_ == this") - public OrderSimple addItem(String itemName, int price) { - return this; - } - - @StateRefinement(from = "((addingItems(this)) && (countItems(this) > 20))") - public boolean hasGift() { - return true; - } - - // @StateRefinement(from="addingItems(this)", to = "checkout(this)") - // public Order pay(int cardNumber) { - // return this; - // } - - // @StateRefinement(from="checkout(this) && priceNow(this) > 20", to = "checkout(this)") - // public Order addGift() { - // return this; - // } - // - // @StateRefinement(from="checkout(this)", to = "closed(this)") - // public Order sendToAddress(String a) { - // return this; - // } + @RefinementPredicate("int countItems(OrderSimple o)") + @StateRefinement(to = "(countItems(this) == 0) && empty(this)") + public OrderSimple() {} + + @StateRefinement( + from = "(empty(this) || addingItems(this))", + to = "((countItems(this) == (countItems(old(this)) + 1)) && addingItems(this))") + // @Refinement("_ == this") + public OrderSimple addItem(String itemName, int price) { + return this; + } + + @StateRefinement(from = "((addingItems(this)) && (countItems(this) > 20))") + public boolean hasGift() { + return true; + } + + // @StateRefinement(from="addingItems(this)", to = "checkout(this)") + // public Order pay(int cardNumber) { + // return this; + // } + + // @StateRefinement(from="checkout(this) && priceNow(this) > 20", to = "checkout(this)") + // public Order addGift() { + // return this; + // } + // + // @StateRefinement(from="checkout(this)", to = "closed(this)") + // public Order sendToAddress(String a) { + // return this; + // } } diff --git a/liquidjava-example/src/main/java/testingInProgress/SimpleTest.java b/liquidjava-example/src/main/java/testingInProgress/SimpleTest.java index 7840d409..9b964955 100644 --- a/liquidjava-example/src/main/java/testingInProgress/SimpleTest.java +++ b/liquidjava-example/src/main/java/testingInProgress/SimpleTest.java @@ -4,37 +4,37 @@ public class SimpleTest { - public static void main(String[] args) throws IOException { - // Order - - } - - // InputStreamReader isr = new InputStreamReader(System.in); - // isr.read(); - // isr.read(); - // isr.read(); - // isr.close(); - // - // //... - // isr.read(); - - // @Refinement("_ > 0") - // public int fun (int[] arr) { - // return max(arr[0], 1); - // } - // - - // //@Refinement("_.length(x) >= 0") == - //// @Refinement("length(_, x) >= 0") - //// int[] a1 = new int[5]; - // K(.., ..) - - // } - - // See error NaN - // @Refinement("true") - // double b = 0/0; - // @Refinement("_ > 5") - // double c = b; + public static void main(String[] args) throws IOException { + // Order + + } + + // InputStreamReader isr = new InputStreamReader(System.in); + // isr.read(); + // isr.read(); + // isr.read(); + // isr.close(); + // + // //... + // isr.read(); + + // @Refinement("_ > 0") + // public int fun (int[] arr) { + // return max(arr[0], 1); + // } + // + + // //@Refinement("_.length(x) >= 0") == + //// @Refinement("length(_, x) >= 0") + //// int[] a1 = new int[5]; + // K(.., ..) + + // } + + // See error NaN + // @Refinement("true") + // double b = 0/0; + // @Refinement("_ > 5") + // double c = b; } diff --git a/liquidjava-example/src/main/java/testingInProgress/StringBuilderRefinements.java b/liquidjava-example/src/main/java/testingInProgress/StringBuilderRefinements.java index b41dfe13..d9d33d83 100644 --- a/liquidjava-example/src/main/java/testingInProgress/StringBuilderRefinements.java +++ b/liquidjava-example/src/main/java/testingInProgress/StringBuilderRefinements.java @@ -1,12 +1,13 @@ package testingInProgress; + import liquidjava.specification.RefinementPredicate; import liquidjava.specification.StateRefinement; public interface StringBuilderRefinements { - @RefinementPredicate("int lengthS(StringBuilder s)") - @StateRefinement(to = "lengthS() == 0") - public void StringBuilder(); + @RefinementPredicate("int lengthS(StringBuilder s)") + @StateRefinement(to = "lengthS() == 0") + public void StringBuilder(); - @StateRefinement(from = "#i == lengthS()", to = "lengthS() == (#i + 1)") - public StringBuilder append(char c); + @StateRefinement(from = "#i == lengthS()", to = "lengthS() == (#i + 1)") + public StringBuilder append(char c); } diff --git a/liquidjava-example/src/main/java/testingInProgress/TrafficLight.java b/liquidjava-example/src/main/java/testingInProgress/TrafficLight.java index 9a7cc50f..f95b2f48 100644 --- a/liquidjava-example/src/main/java/testingInProgress/TrafficLight.java +++ b/liquidjava-example/src/main/java/testingInProgress/TrafficLight.java @@ -1,4 +1,5 @@ package testingInProgress; + import liquidjava.specification.Refinement; import liquidjava.specification.RefinementAlias; import liquidjava.specification.StateRefinement; @@ -8,40 +9,40 @@ @RefinementAlias("RGB(int x) {x >= 0 && x <= 255}") public class TrafficLight { - @Refinement("RGB(r)") - private int r; - - @Refinement("RGB(g)") - private int g; - - @Refinement("RGB(b)") - private int b; - - @StateRefinement(to = "green(this)") - public TrafficLight() { - r = 255; - g = 0; - b = 0; - } - - @StateRefinement(from = "green(this)", to = "amber(this)") - public void transitionToAmber() { - r = 255; - g = 120; - b = 0; - } - - @StateRefinement(from = "ref(this)", to = "green(this)") - public void transitionToGreen() { - r = 76; - g = 187; - b = 23; - } - - @StateRefinement(from = "yellow(this)", to = "red(this)") - public void transitionToRed() { - r = 230; - g = 0; - b = 1 - 1; - } + @Refinement("RGB(r)") + private int r; + + @Refinement("RGB(g)") + private int g; + + @Refinement("RGB(b)") + private int b; + + @StateRefinement(to = "green(this)") + public TrafficLight() { + r = 255; + g = 0; + b = 0; + } + + @StateRefinement(from = "green(this)", to = "amber(this)") + public void transitionToAmber() { + r = 255; + g = 120; + b = 0; + } + + @StateRefinement(from = "ref(this)", to = "green(this)") + public void transitionToGreen() { + r = 76; + g = 187; + b = 23; + } + + @StateRefinement(from = "yellow(this)", to = "red(this)") + public void transitionToRed() { + r = 230; + g = 0; + b = 1 - 1; + } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/api/CommandLineLauncher.java b/liquidjava-verifier/src/main/java/liquidjava/api/CommandLineLauncher.java index dfb6ae3a..3726674d 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/api/CommandLineLauncher.java +++ b/liquidjava-verifier/src/main/java/liquidjava/api/CommandLineLauncher.java @@ -19,7 +19,6 @@ public static void main(String[] args) { String file = args.length == 0 ? allPath : args[0]; ErrorEmitter ee = launch(file); System.out.println(ee.foundError() ? (ee.getFullMessage()) : ("Correct! Passed Verification.")); - } public static ErrorEmitter launchTest(String file) { @@ -47,9 +46,10 @@ public static ErrorEmitter launch(String file) { try { // To only search the last package - less time spent - CtPackage v = factory.Package().getAll().stream().reduce((first, second) -> second).orElse(null); - if (v != null) - processingManager.process(v); + CtPackage v = factory.Package().getAll().stream() + .reduce((first, second) -> second) + .orElse(null); + if (v != null) processingManager.process(v); // To search all previous packages // processingManager.process(factory.Package().getRootPackage()); } catch (Exception e) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorEmitter.java b/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorEmitter.java index 4cee020b..4217ecf4 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorEmitter.java +++ b/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorEmitter.java @@ -14,11 +14,10 @@ public class ErrorEmitter { private int errorStatus; private HashMap map; - public ErrorEmitter() { - } + public ErrorEmitter() {} - public void addError(String titleMessage, String msg, SourcePosition p, int errorStatus, - HashMap map) { + public void addError( + String titleMessage, String msg, SourcePosition p, int errorStatus, HashMap map) { this.titleMessage = titleMessage; fullMessage = msg; try { diff --git a/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorHandler.java b/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorHandler.java index f6681932..8f92e0f0 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorHandler.java +++ b/liquidjava-verifier/src/main/java/liquidjava/errors/ErrorHandler.java @@ -20,13 +20,22 @@ public class ErrorHandler { * @param expectedType * @param cSMT */ - public static void printError(CtElement var, Predicate expectedType, Predicate cSMT, - HashMap map, ErrorEmitter ee) { + public static void printError( + CtElement var, + Predicate expectedType, + Predicate cSMT, + HashMap map, + ErrorEmitter ee) { printError(var, null, expectedType, cSMT, map, ee); } - public static void printError(CtElement var, String moreInfo, Predicate expectedType, Predicate cSMT, - HashMap map, ErrorEmitter errorl) { + public static void printError( + CtElement var, + String moreInfo, + Predicate expectedType, + Predicate cSMT, + HashMap map, + ErrorEmitter errorl) { String resumeMessage = "Type expected:" + expectedType.toString(); // + "; " +"Refinement found:" + // cSMT.toString(); @@ -35,8 +44,7 @@ public static void printError(CtElement var, String moreInfo, Predicate expe // title StringBuilder sbtitle = new StringBuilder(); sbtitle.append("Failed to check refinement at: \n\n"); - if (moreInfo != null) - sbtitle.append(moreInfo + "\n"); + if (moreInfo != null) sbtitle.append(moreInfo + "\n"); sbtitle.append(var.toString()); // all message sb.append(sbtitle.toString() + "\n\n"); @@ -49,8 +57,13 @@ public static void printError(CtElement var, String moreInfo, Predicate expe errorl.addError(resumeMessage, sb.toString(), var.getPosition(), 1, map); } - public static void printStateMismatch(CtElement element, String method, VCImplication constraintForErrorMsg, - String states, HashMap map, ErrorEmitter errorl) { + public static void printStateMismatch( + CtElement element, + String method, + VCImplication constraintForErrorMsg, + String states, + HashMap map, + ErrorEmitter errorl) { String resumeMessage = "Failed to check state transitions. " + "Expected possible states:" + states; // + "; // Found @@ -78,8 +91,12 @@ public static void printStateMismatch(CtElement element, String method, VCImplic errorl.addError(resumeMessage, sb.toString(), element.getPosition(), 1, map); } - public static void printErrorUnknownVariable(CtElement var, String et, String correctRefinement, - HashMap map, ErrorEmitter errorl) { + public static void printErrorUnknownVariable( + CtElement var, + String et, + String correctRefinement, + HashMap map, + ErrorEmitter errorl) { String resumeMessage = "Encountered unknown variable"; @@ -97,8 +114,13 @@ public static void printErrorUnknownVariable(CtElement var, String et, Strin errorl.addError(resumeMessage, sb.toString(), var.getPosition(), 2, map); } - public static void printNotFound(CtElement var, Predicate constraint, Predicate constraint2, String msg, - HashMap map, ErrorEmitter errorl) { + public static void printNotFound( + CtElement var, + Predicate constraint, + Predicate constraint2, + String msg, + HashMap map, + ErrorEmitter errorl) { StringBuilder sb = new StringBuilder(); sb.append("______________________________________________________\n"); @@ -114,8 +136,12 @@ public static void printNotFound(CtElement var, Predicate constraint, Predic errorl.addError(msg, sb.toString(), var.getPosition(), 2, map); } - public static void printErrorArgs(CtElement var, Predicate expectedType, String msg, - HashMap map, ErrorEmitter errorl) { + public static void printErrorArgs( + CtElement var, + Predicate expectedType, + String msg, + HashMap map, + ErrorEmitter errorl) { StringBuilder sb = new StringBuilder(); sb.append("______________________________________________________\n"); String title = "Error in ghost invocation: " + msg + "\n"; @@ -128,8 +154,12 @@ public static void printErrorArgs(CtElement var, Predicate expectedType, Str errorl.addError(title, sb.toString(), var.getPosition(), 2, map); } - public static void printErrorTypeMismatch(CtElement element, Predicate expectedType, String message, - HashMap map, ErrorEmitter errorl) { + public static void printErrorTypeMismatch( + CtElement element, + Predicate expectedType, + String message, + HashMap map, + ErrorEmitter errorl) { StringBuilder sb = new StringBuilder(); sb.append("______________________________________________________\n"); sb.append(message + "\n\n"); @@ -141,8 +171,8 @@ public static void printErrorTypeMismatch(CtElement element, Predicate expectedT errorl.addError(message, sb.toString(), element.getPosition(), 2, map); } - public static void printSameStateSetError(CtElement element, Predicate p, String name, - HashMap map, ErrorEmitter errorl) { + public static void printSameStateSetError( + CtElement element, Predicate p, String name, HashMap map, ErrorEmitter errorl) { String resume = "Error found multiple disjoint states from a State Set in a refinement"; StringBuilder sb = new StringBuilder(); @@ -219,8 +249,7 @@ public static void printSyntaxError(String msg, String ref, ErrorEmitter errorl) private static String printLine() { StringBuilder sb = new StringBuilder(); - for (int i = 0; i < 130; i++) - sb.append("-"); // ----------- + for (int i = 0; i < 130; i++) sb.append("-"); // ----------- return sb.toString(); } @@ -238,7 +267,9 @@ private static String printMap(HashMap map) { formatter.format(printLine() + "\n"); // data for (String s : map.keySet()) - formatter.format("| %-32s | %-60s | %-1s \n", s, map.get(s).getText(), map.get(s).getSimplePosition()); + formatter.format( + "| %-32s | %-60s | %-1s \n", + s, map.get(s).getText(), map.get(s).getSimplePosition()); // end formatter.format(printLine() + "\n\n"); String s = formatter.toString(); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/RefinementProcessor.java b/liquidjava-verifier/src/main/java/liquidjava/processor/RefinementProcessor.java index 2e168f76..9853681c 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/RefinementProcessor.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/RefinementProcessor.java @@ -39,8 +39,7 @@ public void process(CtPackage pkg) { pkg.accept(new MethodsFirstChecker(c, factory, errorEmitter)); // double passing idea (instead of headers) pkg.accept(new RefinementTypeChecker(c, factory, errorEmitter)); - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; } } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java b/liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java index eea4f6f6..00fb709a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java @@ -30,32 +30,31 @@ public String toString() { if (name != null && type != null) { String qualType = type.getQualifiedName(); String simpleType = qualType.contains(".") ? qualType.substring(qualType.lastIndexOf(".") + 1) : qualType; - return String.format("%-20s %s %s", "∀" + name + ":" + simpleType + ",", refinement.toString(), + return String.format( + "%-20s %s %s", + "∀" + name + ":" + simpleType + ",", + refinement.toString(), next != null ? " => \n" + next.toString() : ""); - } else - return String.format("%-20s %s", "", refinement.toString()); + } else return String.format("%-20s %s", "", refinement.toString()); } public Predicate toConjunctions() { Predicate c = new Predicate(); - if (name == null && type == null && next == null) - return c; + if (name == null && type == null && next == null) return c; c = auxConjunction(c); return c; } private Predicate auxConjunction(Predicate c) { Predicate t = Predicate.createConjunction(c, refinement); - if (next == null) - return t; + if (next == null) return t; t = next.auxConjunction(t); return t; } public VCImplication clone() { VCImplication vc = new VCImplication(this.name, this.type, this.refinement.clone()); - if (this.next != null) - vc.next = this.next.clone(); + if (this.next != null) vc.next = this.next.clone(); return vc; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/ann_generation/FieldGhostsGeneration.java b/liquidjava-verifier/src/main/java/liquidjava/processor/ann_generation/FieldGhostsGeneration.java index 4e8b3987..50ca91a8 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/ann_generation/FieldGhostsGeneration.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/ann_generation/FieldGhostsGeneration.java @@ -33,7 +33,8 @@ public void visitCtClass(CtClass ctClass) { return; } - ctClass.getDeclaredFields().stream().filter(fld -> fld.getType().getQualifiedName().equals("int")) + ctClass.getDeclaredFields().stream() + .filter(fld -> fld.getType().getQualifiedName().equals("int")) .forEach(fld -> { CtTypeReference fld_type = fld.getType(); CtAnnotation gen_ann = factory.createAnnotation(factory.createCtTypeReference(Ghost.class)); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/AliasWrapper.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/AliasWrapper.java index 6b149ca9..0c3b20ff 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/AliasWrapper.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/AliasWrapper.java @@ -64,8 +64,8 @@ public Predicate getPremises(List list, List newNames, CtElement List invocationPredicates = getPredicatesFromExpression(list, elem, ee); Predicate prem = new Predicate(); for (int i = 0; i < invocationPredicates.size(); i++) { - prem = Predicate.createConjunction(prem, - Predicate.createEquals(Predicate.createVar(newNames.get(i)), invocationPredicates.get(i))); + prem = Predicate.createConjunction( + prem, Predicate.createEquals(Predicate.createVar(newNames.get(i)), invocationPredicates.get(i))); } return prem.clone(); } @@ -73,8 +73,7 @@ public Predicate getPremises(List list, List newNames, CtElement private List getPredicatesFromExpression(List list, CtElement elem, ErrorEmitter ee) throws ParsingException { List lp = new ArrayList<>(); - for (String e : list) - lp.add(new Predicate(e, elem, ee)); + for (String e : list) lp.add(new Predicate(e, elem, ee)); return lp; } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Context.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Context.java index d604a00d..84f6645a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Context.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Context.java @@ -36,8 +36,7 @@ private Context() { // SINGLETON public static Context getInstance() { - if (instance == null) - instance = new Context(); + if (instance == null) instance = new Context(); return instance; } @@ -63,17 +62,13 @@ public void reinitializeAllContext() { public void enterContext() { ctxVars.push(new ArrayList<>()); // make each variable enter context - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).enterContext(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).enterContext(); } public void exitContext() { ctxVars.pop(); // make each variable exit context - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).exitContext(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).exitContext(); } public int getCounter() { @@ -87,10 +82,8 @@ public Map> getContext() { ret.put(var.getName(), var.getType()); } } - for (RefinedVariable var : ctxSpecificVars) - ret.put(var.getName(), var.getType()); - for (RefinedVariable var : ctxGlobalVars) - ret.put(var.getName(), var.getType()); + for (RefinedVariable var : ctxSpecificVars) ret.put(var.getName(), var.getType()); + for (RefinedVariable var : ctxGlobalVars) ret.put(var.getName(), var.getType()); return ret; } @@ -115,8 +108,8 @@ public void addVarToContext(RefinedVariable var) { var.addSuperTypes(type.getSuperclass(), type.getSuperInterfaces()); } - public RefinedVariable addVarToContext(String simpleName, CtTypeReference type, Predicate c, - CtElement placementInCode) { + public RefinedVariable addVarToContext( + String simpleName, CtTypeReference type, Predicate c, CtElement placementInCode) { RefinedVariable vi = new Variable(simpleName, type, c); vi.addPlacementInCode(PlacementInCode.createPlacement(placementInCode)); vi.addSuperTypes(type.getSuperclass(), type.getSuperInterfaces()); @@ -124,17 +117,16 @@ public RefinedVariable addVarToContext(String simpleName, CtTypeReference typ return vi; } - public RefinedVariable addInstanceToContext(String simpleName, CtTypeReference type, Predicate c, - CtElement placementInCode) { + public RefinedVariable addInstanceToContext( + String simpleName, CtTypeReference type, Predicate c, CtElement placementInCode) { RefinedVariable vi = new VariableInstance(simpleName, type, c); vi.addPlacementInCode(PlacementInCode.createPlacement(placementInCode)); - if (!ctxSpecificVars.contains(vi)) - addSpecificVariable(vi); + if (!ctxSpecificVars.contains(vi)) addSpecificVariable(vi); return vi; } - public void addRefinementToVariableInContext(String name, CtTypeReference type, Predicate et, - CtElement placementInCode) { + public void addRefinementToVariableInContext( + String name, CtTypeReference type, Predicate et, CtElement placementInCode) { if (hasVariable(name)) { RefinedVariable vi = getVariableByName(name); vi.setRefinement(et); @@ -164,17 +156,14 @@ public Predicate getVariableRefinements(String varName) { public RefinedVariable getVariableByName(String name) { for (List l : ctxVars) { for (RefinedVariable var : l) { - if (var.getName().equals(name)) - return var; + if (var.getName().equals(name)) return var; } } for (RefinedVariable var : ctxSpecificVars) { - if (var.getName().equals(name)) - return var; + if (var.getName().equals(name)) return var; } for (RefinedVariable var : ctxGlobalVars) { - if (var.getName().equals(name)) - return var; + if (var.getName().equals(name)) return var; } return null; } @@ -211,12 +200,10 @@ public List getAllVariables() { public List getAllVariablesWithSupertypes() { List lvi = new ArrayList<>(); for (RefinedVariable rv : getAllVariables()) { - if (rv.getSuperTypes().size() > 0) - lvi.add(rv); + if (rv.getSuperTypes().size() > 0) lvi.add(rv); } for (RefinedVariable rv : ctxSpecificVars) { - if (rv.getSuperTypes().size() > 0) - lvi.add(rv); + if (rv.getSuperTypes().size() > 0) lvi.add(rv); } return lvi; } @@ -224,9 +211,9 @@ public List getAllVariablesWithSupertypes() { public void addRefinementInstanceToVariable(String name, String instanceName) { RefinedVariable vi1 = getVariableByName(name); RefinedVariable vi2 = getVariableByName(instanceName); - if (!hasVariable(name) || !hasVariable(instanceName) - || !(vi1 instanceof Variable && vi2 instanceof VariableInstance)) - return; + if (!hasVariable(name) + || !hasVariable(instanceName) + || !(vi1 instanceof Variable && vi2 instanceof VariableInstance)) return; ((Variable) vi1).addInstance((VariableInstance) vi2); ((VariableInstance) vi2).setParent((Variable) vi1); @@ -235,8 +222,7 @@ public void addRefinementInstanceToVariable(String name, String instanceName) { public Optional getLastVariableInstance(String name) { RefinedVariable rv = getVariableByName(name); - if (!hasVariable(name) || !(rv instanceof Variable)) - return Optional.empty(); + if (!hasVariable(name) || !(rv instanceof Variable)) return Optional.empty(); return ((Variable) rv).getLastInstance(); } @@ -250,33 +236,23 @@ public void addSpecificVariable(RefinedVariable vi) { // ---------------------- Variables - if information storing ---------------------- public void variablesSetBeforeIf() { - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).saveInstanceBeforeIf(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).saveInstanceBeforeIf(); } public void variablesSetThenIf() { - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).saveInstanceThen(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).saveInstanceThen(); } public void variablesSetElseIf() { - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).saveInstanceElse(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).saveInstanceElse(); } public void variablesNewIfCombination() { - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).newIfCombination(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).newIfCombination(); } public void variablesFinishIfCombination() { - for (RefinedVariable vi : getAllVariables()) - if (vi instanceof Variable) - ((Variable) vi).finishIfCombination(); + for (RefinedVariable vi : getAllVariables()) if (vi instanceof Variable) ((Variable) vi).finishIfCombination(); } public void variablesCombineFromIf(Predicate cond) { @@ -294,14 +270,14 @@ public void variablesCombineFromIf(Predicate cond) { // ---------------------- Functions ---------------------- public void addFunctionToContext(RefinedFunction f) { - if (!ctxFunctions.contains(f)) - ctxFunctions.add(f); + if (!ctxFunctions.contains(f)) ctxFunctions.add(f); } public RefinedFunction getFunction(String name, String target) { for (RefinedFunction fi : ctxFunctions) { - if (fi.getTargetClass() != null && fi.getName().equals(name) && fi.getTargetClass().equals(target)) - return fi; + if (fi.getTargetClass() != null + && fi.getName().equals(name) + && fi.getTargetClass().equals(target)) return fi; } // for(RefinedFunction fi: ctxGlobalFunctions) { // if(fi.getName().equals(name) && fi.getTargetClass().equals(target)) @@ -312,9 +288,10 @@ public RefinedFunction getFunction(String name, String target) { public RefinedFunction getFunction(String name, String target, int size) { for (RefinedFunction fi : ctxFunctions) { - if (fi.getTargetClass() != null && fi.getName().equals(name) && fi.getTargetClass().equals(target) - && fi.getArguments().size() == size) - return fi; + if (fi.getTargetClass() != null + && fi.getName().equals(name) + && fi.getTargetClass().equals(target) + && fi.getArguments().size() == size) return fi; } return null; } @@ -322,8 +299,7 @@ public RefinedFunction getFunction(String name, String target, int size) { public List getAllMethodsWithNameSize(String name, int size) { List l = new ArrayList<>(); for (RefinedFunction fi : ctxFunctions) { - if (fi.getName().equals(name) && fi.getArguments().size() == size) - l.add(fi); + if (fi.getName().equals(name) && fi.getArguments().size() == size) l.add(fi); } return l; } @@ -335,8 +311,7 @@ public void addGhostFunction(GhostFunction gh) { public boolean hasGhost(String name) { for (GhostFunction g : ghosts) { - if (g.getName().equals(name)) - return true; + if (g.getName().equals(name)) return true; } return false; } @@ -346,14 +321,12 @@ public List getGhosts() { } public void addGhostClass(String klass) { - if (!classStates.containsKey(klass)) - classStates.put(klass, new ArrayList<>()); + if (!classStates.containsKey(klass)) classStates.put(klass, new ArrayList<>()); } public void addToGhostClass(String klass, GhostState gs) { List l = classStates.get(klass); - if (!l.contains(gs)) - l.add(gs); + if (!l.contains(gs)) l.add(gs); } public List getGhostState(String s) { @@ -362,15 +335,13 @@ public List getGhostState(String s) { public List getGhostState() { List lgs = new ArrayList<>(); - for (List l : classStates.values()) - lgs.addAll(l); + for (List l : classStates.values()) lgs.addAll(l); return lgs; } // ---------------------- Alias ---------------------- public void addAlias(AliasWrapper aw) { - if (!alias.contains(aw)) - alias.add(aw); + if (!alias.contains(aw)) alias.add(aw); } public List getAlias() { @@ -381,8 +352,7 @@ public List getAlias() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n############Global Variables:############\n"); - for (RefinedVariable f : ctxGlobalVars) - sb.append(f.toString()); + for (RefinedVariable f : ctxGlobalVars) sb.append(f.toString()); sb.append("\n###########Variables############"); for (List l : ctxVars) { sb.append("{"); @@ -395,12 +365,10 @@ public String toString() { // for(RefinedFunction f : ctxGlobalFunctions) // sb.append(f.toString()); sb.append("\n############Functions:############\n"); - for (RefinedFunction f : ctxFunctions) - sb.append(f.toString()); + for (RefinedFunction f : ctxFunctions) sb.append(f.toString()); sb.append("\n############Ghost Functions:############\n"); - for (GhostFunction f : ghosts) - sb.append(f.toString()); + for (GhostFunction f : ghosts) sb.append(f.toString()); return sb.toString(); } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostFunction.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostFunction.java index c81f5c12..9a453e47 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostFunction.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostFunction.java @@ -24,8 +24,13 @@ public GhostFunction(GhostDTO f, Factory factory, String path, String klass) { } } - public GhostFunction(String name, List param_types, CtTypeReference return_type, Factory factory, - String path, String klass) { + public GhostFunction( + String name, + List param_types, + CtTypeReference return_type, + Factory factory, + String path, + String klass) { this.name = name; this.return_type = Utils.getType(return_type.toString().equals(klass) ? path : return_type.toString(), factory); this.param_types = new ArrayList<>(); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostParentState.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostParentState.java index 6252c1c5..1788b5aa 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostParentState.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/GhostParentState.java @@ -9,8 +9,13 @@ public class GhostParentState extends GhostFunction { private ArrayList states; - public GhostParentState(String name, List params, CtTypeReference ret, Factory factory, - String qualifiedName, String simpleName) { + public GhostParentState( + String name, + List params, + CtTypeReference ret, + Factory factory, + String qualifiedName, + String simpleName) { super(name, params, ret, factory, qualifiedName, simpleName); states = new ArrayList<>(); } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/ObjectState.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/ObjectState.java index 795e9815..0343969a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/ObjectState.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/ObjectState.java @@ -7,8 +7,7 @@ public class ObjectState { Predicate from; Predicate to; - public ObjectState() { - } + public ObjectState() {} public ObjectState(Predicate from, Predicate to) { this.from = from; diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Refined.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Refined.java index a597fe24..07887839 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Refined.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Refined.java @@ -9,8 +9,7 @@ public abstract class Refined { private CtTypeReference type; // int private Predicate refinement; // 9 <= y && y <= 100 - public Refined() { - } + public Refined() {} public Refined(String name, CtTypeReference type, Predicate refinement) { this.name = name; @@ -39,8 +38,7 @@ public void setRefinement(Predicate c) { } public Predicate getRefinement() { - if (refinement != null) - return refinement; + if (refinement != null) return refinement; return new Predicate(); } @@ -65,23 +63,16 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; Refined other = (Refined) obj; if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; + if (other.name != null) return false; + } else if (!name.equals(other.name)) return false; if (type == null) { - if (other.type != null) - return false; - } else if (!type.equals(other.type)) - return false; + if (other.type != null) return false; + } else if (!type.equals(other.type)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java index 7b70f473..6c9d2fb9 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java @@ -69,8 +69,7 @@ private Predicate getRenamedRefinements(Predicate place, Context context, CtElem public Predicate getAllRefinements() { Predicate c = new Predicate(); - for (RefinedVariable p : argRefinements) - c = Predicate.createConjunction(c, p.getRefinement()); // joinArgs + for (RefinedVariable p : argRefinements) c = Predicate.createConjunction(c, p.getRefinement()); // joinArgs c = Predicate.createConjunction(c, super.getRefinement()); // joinReturn return c; } @@ -118,15 +117,13 @@ public boolean hasStateChange() { public List getFromStates() { List lc = new ArrayList<>(); - for (ObjectState os : stateChange) - lc.add(os.getFrom()); + for (ObjectState os : stateChange) lc.add(os.getFrom()); return lc; } public List getToStates() { List lc = new ArrayList<>(); - for (ObjectState os : stateChange) - lc.add(os.getTo()); + for (ObjectState os : stateChange) lc.add(os.getTo()); return lc; } @@ -147,23 +144,16 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (!super.equals(obj)) return false; + if (getClass() != obj.getClass()) return false; RefinedFunction other = (RefinedFunction) obj; if (argRefinements == null) { - if (other.argRefinements != null) - return false; - } else if (argRefinements.size() != other.argRefinements.size()) - return false; + if (other.argRefinements != null) return false; + } else if (argRefinements.size() != other.argRefinements.size()) return false; if (targetClass == null) { - if (other.targetClass != null) - return false; - } else if (!targetClass.equals(other.targetClass)) - return false; + if (other.targetClass != null) return false; + } else if (!targetClass.equals(other.targetClass)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedVariable.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedVariable.java index fe3abf11..5cc07a18 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedVariable.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedVariable.java @@ -18,8 +18,7 @@ public RefinedVariable(String name, CtTypeReference type, Predicate c) { public abstract Predicate getMainRefinement(); public void addSuperType(CtTypeReference t) { - if (!supertypes.contains(t)) - supertypes.add(t); + if (!supertypes.contains(t)) supertypes.add(t); } public List> getSuperTypes() { @@ -27,11 +26,8 @@ public List> getSuperTypes() { } public void addSuperTypes(CtTypeReference ts, Set> sts) { - if (ts != null && !supertypes.contains(ts)) - supertypes.add(ts); - for (CtTypeReference ct : sts) - if (ct != null && !supertypes.contains(ct)) - supertypes.add(ct); + if (ts != null && !supertypes.contains(ts)) supertypes.add(ts); + for (CtTypeReference ct : sts) if (ct != null && !supertypes.contains(ct)) supertypes.add(ct); } public void addPlacementInCode(PlacementInCode s) { @@ -52,18 +48,13 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (!super.equals(obj)) return false; + if (getClass() != obj.getClass()) return false; RefinedVariable other = (RefinedVariable) obj; if (supertypes == null) { - if (other.supertypes != null) - return false; - } else if (!supertypes.equals(other.supertypes)) - return false; + if (other.supertypes != null) return false; + } else if (!supertypes.equals(other.supertypes)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java index ff616db9..f1511798 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/context/Variable.java @@ -74,8 +74,7 @@ public void addInstance(VariableInstance vi) { } public void removeLastInstance() { - if (instances.size() > 0) - instances.peek().remove(instances.size() - 1); + if (instances.size() > 0) instances.peek().remove(instances.size() - 1); } public Optional getLastInstance() { @@ -94,15 +93,11 @@ public Optional getLastInstance() { } private void reloadFromBackup(Stack> backup) { - while (backup.size() > 0) - instances.add(backup.pop()); + while (backup.size() > 0) instances.add(backup.pop()); } public boolean hasInstance(VariableInstance vi) { - for (List lv : instances) - for (VariableInstance v : lv) - if (v.equals(vi)) - return true; + for (List lv : instances) for (VariableInstance v : lv) if (v.equals(vi)) return true; return false; } @@ -149,16 +144,15 @@ Optional getIfInstanceCombination(int counter, Predicate cond) if (!has(ifelseIndex)) { if (has(ifbeforeIndex) && has(ifthenIndex)) // value before if and inside then - ref = createITEConstraint(nName, cond, get(ifthenIndex), get(ifbeforeIndex)); + ref = createITEConstraint(nName, cond, get(ifthenIndex), get(ifbeforeIndex)); else if (!has(ifbeforeIndex)) // only value inside then - ref = createITEConstraint(nName, cond, get(ifthenIndex)); + ref = createITEConstraint(nName, cond, get(ifthenIndex)); } else { if (has(ifthenIndex)) // value in then and in else - ref = createITEConstraint(nName, cond, get(ifthenIndex), get(ifelseIndex)); + ref = createITEConstraint(nName, cond, get(ifthenIndex), get(ifelseIndex)); else if (has(ifbeforeIndex)) // value before and in else - ref = createITEConstraint(nName, cond, get(ifbeforeIndex), get(ifelseIndex)); - else - ref = createITEConstraint(nName, cond.negate(), get(ifelseIndex)); + ref = createITEConstraint(nName, cond, get(ifbeforeIndex), get(ifelseIndex)); + else ref = createITEConstraint(nName, cond.negate(), get(ifelseIndex)); } VariableInstance jointReturn = new VariableInstance(nName, super.getType(), ref, this); jointReturn.addPlacementInCode(getPlacementInCode()); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java index fe8de3c5..6aa92467 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java @@ -35,8 +35,7 @@ public void visitCtClass(CtClass ctClass) { @Override public void visitCtInterface(CtInterface intrface) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; Optional externalRefinements = getExternalRefinement(intrface); if (externalRefinements.isPresent()) { @@ -53,8 +52,7 @@ public void visitCtInterface(CtInterface intrface) { @Override public void visitCtField(CtField f) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; Optional oc; try { @@ -68,8 +66,7 @@ public void visitCtField(CtField f) { } public void visitCtMethod(CtMethod method) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; MethodsFunctionsChecker mfc = new MethodsFunctionsChecker(this); try { @@ -96,8 +93,8 @@ protected void getGhostFunction(String value, CtElement element) { } } catch (ParsingException e) { - ErrorHandler.printCostumeError(element, "Could not parse the Ghost Function" + e.getMessage(), - errorEmitter); + ErrorHandler.printCostumeError( + element, "Could not parse the Ghost Function" + e.getMessage(), errorEmitter); // e.printStackTrace(); } } @@ -109,8 +106,8 @@ protected Optional createStateGhost(int order, CtElement element) if (klass != null) { CtTypeReference ret = factory.Type().INTEGER_PRIMITIVE; List params = Arrays.asList(klass); - GhostFunction gh = new GhostFunction(String.format("%s_state%d", klass.toLowerCase(), order), params, ret, - factory, prefix, klass); + GhostFunction gh = new GhostFunction( + String.format("%s_state%d", klass.toLowerCase(), order), params, ret, factory, prefix, klass); return Optional.of(gh); } return Optional.empty(); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/MethodsFirstChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/MethodsFirstChecker.java index b4224d3b..718685d5 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/MethodsFirstChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/MethodsFirstChecker.java @@ -27,29 +27,24 @@ public MethodsFirstChecker(Context c, Factory fac, ErrorEmitter errorEmitter) { @Override public void visitCtClass(CtClass ctClass) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; context.reinitializeContext(); - if (visitedClasses.contains(ctClass.getQualifiedName())) - return; - else - visitedClasses.add(ctClass.getQualifiedName()); + if (visitedClasses.contains(ctClass.getQualifiedName())) return; + else visitedClasses.add(ctClass.getQualifiedName()); // visitInterfaces if (!ctClass.getSuperInterfaces().isEmpty()) for (CtTypeReference t : ctClass.getSuperInterfaces()) { if (t.isInterface()) { CtType ct = t.getDeclaration(); - if (ct instanceof CtInterface) - visitCtInterface((CtInterface) ct); + if (ct instanceof CtInterface) visitCtInterface((CtInterface) ct); } } // visitSubclasses CtTypeReference sup = ctClass.getSuperclass(); if (sup != null && sup.isClass()) { CtType ct = sup.getDeclaration(); - if (ct instanceof CtClass) - visitCtClass((CtClass) ct); + if (ct instanceof CtClass) visitCtClass((CtClass) ct); } try { getRefinementFromAnnotation(ctClass); @@ -62,15 +57,11 @@ public void visitCtClass(CtClass ctClass) { @Override public void visitCtInterface(CtInterface intrface) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; - if (visitedClasses.contains(intrface.getQualifiedName())) - return; - else - visitedClasses.add(intrface.getQualifiedName()); - if (getExternalRefinement(intrface).isPresent()) - return; + if (visitedClasses.contains(intrface.getQualifiedName())) return; + else visitedClasses.add(intrface.getQualifiedName()); + if (getExternalRefinement(intrface).isPresent()) return; try { getRefinementFromAnnotation(intrface); @@ -83,8 +74,7 @@ public void visitCtInterface(CtInterface intrface) { @Override public void visitCtConstructor(CtConstructor c) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; context.enterContext(); try { @@ -98,8 +88,7 @@ public void visitCtConstructor(CtConstructor c) { } public void visitCtMethod(CtMethod method) { - if (errorEmitter.foundError()) - return; + if (errorEmitter.foundError()) return; context.enterContext(); try { diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/RefinementTypeChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/RefinementTypeChecker.java index e798214f..f2c4672d 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/RefinementTypeChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/RefinementTypeChecker.java @@ -4,9 +4,6 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; - -import org.apache.commons.lang3.NotImplementedException; - import liquidjava.errors.ErrorEmitter; import liquidjava.processor.context.*; import liquidjava.processor.refinement_checker.general_checkers.MethodsFunctionsChecker; @@ -15,6 +12,7 @@ import liquidjava.rj_language.BuiltinFunctionPredicate; import liquidjava.rj_language.Predicate; import liquidjava.rj_language.parsing.ParsingException; +import org.apache.commons.lang3.NotImplementedException; import spoon.reflect.code.CtArrayRead; import spoon.reflect.code.CtArrayWrite; import spoon.reflect.code.CtAssignment; @@ -132,8 +130,8 @@ public void visitCtLocalVariable(CtLocalVariable localVariable) { } catch (ParsingException e) { return; // error already in ErrorEmitter } - context.addVarToContext(localVariable.getSimpleName(), localVariable.getType(), a.orElse(new Predicate()), - localVariable); + context.addVarToContext( + localVariable.getSimpleName(), localVariable.getType(), a.orElse(new Predicate()), localVariable); } else { String varName = localVariable.getSimpleName(); CtExpression e = localVariable.getAssignment(); @@ -145,8 +143,8 @@ public void visitCtLocalVariable(CtLocalVariable localVariable) { context.addVarToContext(varName, localVariable.getType(), new Predicate(), e); try { - checkVariableRefinements(refinementFound, varName, localVariable.getType(), localVariable, - localVariable); + checkVariableRefinements( + refinementFound, varName, localVariable.getType(), localVariable, localVariable); } catch (ParsingException e1) { return; // error already in ErrorEmitter } @@ -201,8 +199,8 @@ public void visitCtThisAccess(CtThisAccess thisAccess) { String s = c.getSimpleName(); if (thisAccess.getParent() instanceof CtReturn) { String thisName = String.format(thisFormat, s); - thisAccess.putMetadata(REFINE_KEY, - Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(thisName))); + thisAccess.putMetadata( + REFINE_KEY, Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(thisName))); } } @@ -263,14 +261,17 @@ public void visitCtLiteral(CtLiteral lit) { List types = Arrays.asList(implementedTypes); String type = lit.getType().getQualifiedName(); if (types.contains(type)) { - lit.putMetadata(REFINE_KEY, Predicate.createEquals(Predicate.createVar(WILD_VAR), - Predicate.createLit(lit.getValue().toString(), type))); + lit.putMetadata( + REFINE_KEY, + Predicate.createEquals( + Predicate.createVar(WILD_VAR), + Predicate.createLit(lit.getValue().toString(), type))); } else if (lit.getType().getQualifiedName().contentEquals("java.lang.String")) { // Only taking care of strings inside refinements } else { - throw new NotImplementedException( - String.format("Literal of type %s not implemented:", lit.getType().getQualifiedName())); + throw new NotImplementedException(String.format( + "Literal of type %s not implemented:", lit.getType().getQualifiedName())); } } @@ -310,24 +311,32 @@ public void visitCtFieldRead(CtFieldRead fieldRead) { String fieldName = fieldRead.getVariable().getSimpleName(); if (context.hasVariable(fieldName)) { RefinedVariable rv = context.getVariableByName(fieldName); - if (rv instanceof Variable && ((Variable) rv).getLocation().isPresent() - && ((Variable) rv).getLocation().get().equals(fieldRead.getTarget().toString())) { + if (rv instanceof Variable + && ((Variable) rv).getLocation().isPresent() + && ((Variable) rv) + .getLocation() + .get() + .equals(fieldRead.getTarget().toString())) { fieldRead.putMetadata(REFINE_KEY, context.getVariableRefinements(fieldName)); } else { - fieldRead.putMetadata(REFINE_KEY, + fieldRead.putMetadata( + REFINE_KEY, Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(fieldName))); } } else if (context.hasVariable(String.format(thisFormat, fieldName))) { String thisName = String.format(thisFormat, fieldName); - fieldRead.putMetadata(REFINE_KEY, - Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(thisName))); + fieldRead.putMetadata( + REFINE_KEY, Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(thisName))); } else if (fieldRead.getVariable().getSimpleName().equals("length")) { String targetName = fieldRead.getTarget().toString(); try { - fieldRead.putMetadata(REFINE_KEY, Predicate.createEquals(Predicate.createVar(WILD_VAR), - BuiltinFunctionPredicate.builtin_length(targetName, fieldRead, getErrorEmitter()))); + fieldRead.putMetadata( + REFINE_KEY, + Predicate.createEquals( + Predicate.createVar(WILD_VAR), + BuiltinFunctionPredicate.builtin_length(targetName, fieldRead, getErrorEmitter()))); } catch (ParsingException e) { return; // error already in ErrorEmitter } @@ -424,8 +433,8 @@ public void visitCtIf(CtIf ifElement) { expRefs = new Predicate(); } - RefinedVariable freshRV = context.addInstanceToContext(freshVarName, factory.Type().INTEGER_PRIMITIVE, expRefs, - exp); + RefinedVariable freshRV = + context.addInstanceToContext(freshVarName, factory.Type().INTEGER_PRIMITIVE, expRefs, exp); vcChecker.addPathVariable(freshRV); context.variablesNewIfCombination(); @@ -466,8 +475,8 @@ public void visitCtArrayWrite(CtArrayWrite arrayWrite) { CtExpression index = arrayWrite.getIndexExpression(); BuiltinFunctionPredicate fp; try { - fp = BuiltinFunctionPredicate.builtin_addToIndex(arrayWrite.getTarget().toString(), index.toString(), - WILD_VAR, arrayWrite, getErrorEmitter()); + fp = BuiltinFunctionPredicate.builtin_addToIndex( + arrayWrite.getTarget().toString(), index.toString(), WILD_VAR, arrayWrite, getErrorEmitter()); } catch (ParsingException e) { return; // error already in ErrorEmitter } @@ -482,8 +491,8 @@ public void visitCtConditional(CtConditional conditional) { super.visitCtConditional(conditional); Predicate cond = getRefinement(conditional.getCondition()); - Predicate c = Predicate.createITE(cond, getRefinement(conditional.getThenExpression()), - getRefinement(conditional.getElseExpression())); + Predicate c = Predicate.createITE( + cond, getRefinement(conditional.getThenExpression()), getRefinement(conditional.getElseExpression())); conditional.putMetadata(REFINE_KEY, c); } @@ -508,8 +517,13 @@ public void visitCtNewClass(CtNewClass newClass) { // ############################### Inner Visitors // ########################################## - private void checkAssignment(String name, CtTypeReference type, CtExpression ex, CtExpression assignment, - CtElement parentElem, CtElement varDecl) { + private void checkAssignment( + String name, + CtTypeReference type, + CtExpression ex, + CtExpression assignment, + CtElement parentElem, + CtElement varDecl) { getPutVariableMetadada(ex, name); Predicate refinementFound = getRefinement(assignment); @@ -582,7 +596,8 @@ private void getPutVariableMetadada(CtElement elem, String name) { Predicate cref = Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(name)); Optional ovi = context.getLastVariableInstance(name); if (ovi.isPresent()) { - cref = Predicate.createEquals(Predicate.createVar(WILD_VAR), Predicate.createVar(ovi.get().getName())); + cref = Predicate.createEquals( + Predicate.createVar(WILD_VAR), Predicate.createVar(ovi.get().getName())); } elem.putMetadata(REFINE_KEY, cref); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java index 9369cb8a..b5708b2c 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java @@ -38,8 +38,8 @@ public abstract class TypeChecker extends CtScanner { public final String freshFormat = "#fresh_%d"; public final String instanceFormat = "#%s_%d"; public final String thisFormat = "this#%s"; - public String[] implementedTypes = { "boolean", "int", "short", "long", "float", "double" }; // TODO add - // types e.g., "int[]" + public String[] implementedTypes = {"boolean", "int", "short", "long", "float", "double"}; // TODO add + // types e.g., "int[]" Context context; Factory factory; @@ -87,8 +87,7 @@ public Optional getRefinementFromAnnotation(CtElement element) throws } if (ref.isPresent()) { Predicate p = new Predicate(ref.get(), element, errorEmitter); - if (errorEmitter.foundError()) - return Optional.empty(); + if (errorEmitter.foundError()) return Optional.empty(); constr = Optional.of(p); } return constr; @@ -127,12 +126,13 @@ private void createStateSet(CtNewArray e, int set, CtElement element) { @SuppressWarnings("unchecked") CtLiteral s = (CtLiteral) ce; String f = s.getValue(); - GhostState gs = new GhostState(f, g.getParametersTypes(), factory.Type().BOOLEAN_PRIMITIVE, - g.getParentClassName()); + GhostState gs = new GhostState( + f, g.getParametersTypes(), factory.Type().BOOLEAN_PRIMITIVE, g.getParentClassName()); gs.setGhostParent(g); gs.setRefinement( /* new OperationPredicate(new InvocationPredicate(f, THIS), "<-->", */ - Predicate.createEquals(ip, Predicate.createLit(Integer.toString(order), Utils.INT))); // open(THIS) + Predicate.createEquals( + ip, Predicate.createLit(Integer.toString(order), Utils.INT))); // open(THIS) // -> // state1(THIS) // == 1 @@ -151,8 +151,11 @@ private void createStateGhost(String string, CtAnnotation return; } if (gd.getParam_types().size() > 0) { - ErrorHandler.printCostumeError(ann, "Ghost States have the class as parameter " - + "by default, no other parameters are allowed in '" + string + "'", errorEmitter); + ErrorHandler.printCostumeError( + ann, + "Ghost States have the class as parameter " + "by default, no other parameters are allowed in '" + + string + "'", + errorEmitter); return; } // Set class as parameter of Ghost @@ -195,8 +198,12 @@ protected Optional createStateGhost(int order, CtElement element) CtTypeReference ret = factory.Type().INTEGER_PRIMITIVE; List params = Arrays.asList(klass.getSimpleName()); GhostFunction gh = new GhostFunction( - String.format("%s_state%d", klass.getSimpleName().toLowerCase(), order), params, ret, factory, - klass.getQualifiedName(), klass.getSimpleName()); + String.format("%s_state%d", klass.getSimpleName().toLowerCase(), order), + params, + ret, + factory, + klass.getQualifiedName(), + klass.getSimpleName()); return Optional.of(gh); } return Optional.empty(); @@ -211,8 +218,8 @@ protected void getGhostFunction(String value, CtElement element) { context.addGhostFunction(gh); } } catch (ParsingException e) { - ErrorHandler.printCostumeError(element, "Could not parse the Ghost Function" + e.getMessage(), - errorEmitter); + ErrorHandler.printCostumeError( + element, "Could not parse the Ghost Function" + e.getMessage(), errorEmitter); // e.printStackTrace(); return; } @@ -247,7 +254,9 @@ protected void handleAlias(String value, CtElement element) { Optional getExternalRefinement(CtInterface intrface) { Optional ref = Optional.empty(); for (CtAnnotation ann : intrface.getAnnotations()) - if (ann.getActualAnnotation().annotationType().getCanonicalName() + if (ann.getActualAnnotation() + .annotationType() + .getCanonicalName() .contentEquals("liquidjava.specification.ExternalRefinementsFor")) { @SuppressWarnings("unchecked") CtLiteral s = (CtLiteral) ann.getAllValues().get("value"); @@ -256,20 +265,19 @@ Optional getExternalRefinement(CtInterface intrface) { return ref; } - public void checkVariableRefinements(Predicate refinementFound, String simpleName, CtTypeReference type, - CtElement usage, CtElement variable) throws ParsingException { + public void checkVariableRefinements( + Predicate refinementFound, String simpleName, CtTypeReference type, CtElement usage, CtElement variable) + throws ParsingException { Optional expectedType = getRefinementFromAnnotation(variable); Predicate cEt; RefinedVariable mainRV = null; - if (context.hasVariable(simpleName)) - mainRV = context.getVariableByName(simpleName); + if (context.hasVariable(simpleName)) mainRV = context.getVariableByName(simpleName); - if (context.hasVariable(simpleName) && !context.getVariableByName(simpleName).getRefinement().isBooleanTrue()) + if (context.hasVariable(simpleName) + && !context.getVariableByName(simpleName).getRefinement().isBooleanTrue()) cEt = mainRV.getMainRefinement(); - else if (expectedType.isPresent()) - cEt = expectedType.get(); - else - cEt = new Predicate(); + else if (expectedType.isPresent()) cEt = expectedType.get(); + else cEt = new Predicate(); cEt = cEt.substituteVariable(WILD_VAR, simpleName); Predicate cet = cEt.substituteVariable(WILD_VAR, simpleName); @@ -281,8 +289,7 @@ else if (expectedType.isPresent()) // Substitute variable in verification RefinedVariable rv = context.addInstanceToContext(newName, type, correctNewRefinement, usage); - for (CtTypeReference t : mainRV.getSuperTypes()) - rv.addSuperType(t); + for (CtTypeReference t : mainRV.getSuperTypes()) rv.addSuperType(t); context.addRefinementInstanceToVariable(simpleName, newName); // smt check checkSMT(cEt, usage); // TODO CHANGE @@ -295,13 +302,13 @@ public void checkSMT(Predicate expectedType, CtElement element) { } public void checkStateSMT(Predicate prevState, Predicate expectedState, CtElement target, String string) { - vcChecker.processSubtyping(prevState, expectedState, context.getGhostState(), WILD_VAR, THIS, target, string, - factory); + vcChecker.processSubtyping( + prevState, expectedState, context.getGhostState(), WILD_VAR, THIS, target, string, factory); } public boolean checksStateSMT(Predicate prevState, Predicate expectedState, SourcePosition p) { - return vcChecker.canProcessSubtyping(prevState, expectedState, context.getGhostState(), WILD_VAR, THIS, p, - factory); + return vcChecker.canProcessSubtyping( + prevState, expectedState, context.getGhostState(), WILD_VAR, THIS, p, factory); } public void createError(CtElement element, Predicate expectedType, Predicate foundType, String customeMessage) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeCheckingUtils.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeCheckingUtils.java index ed839368..6960bafa 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeCheckingUtils.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeCheckingUtils.java @@ -11,8 +11,7 @@ public static String getStringFromAnnotation(CtExpression ce) { if (ce instanceof CtLiteral) { CtLiteral cl = (CtLiteral) ce; CtTypeReference r = ce.getType(); - if (r.getSimpleName().equals("String")) - return (String) cl.getValue(); + if (r.getSimpleName().equals("String")) return (String) cl.getValue(); } else if (ce instanceof CtBinaryOperator) { CtBinaryOperator cbo = (CtBinaryOperator) ce; diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java index 0711807d..97184968 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/VCChecker.java @@ -34,20 +34,26 @@ public VCChecker(ErrorEmitter errorEmitter) { this.errorEmitter = errorEmitter; } - public void processSubtyping(Predicate expectedType, List list, String wild_var, String this_var, - CtElement element, Factory f) { + public void processSubtyping( + Predicate expectedType, + List list, + String wild_var, + String this_var, + CtElement element, + Factory f) { List lrv = new ArrayList<>(), mainVars = new ArrayList<>(); gatherVariables(expectedType, lrv, mainVars); - if (expectedType.isBooleanTrue()) - return; + if (expectedType.isBooleanTrue()) return; HashMap map = new HashMap<>(); - String[] s = { wild_var, this_var }; - Predicate premisesBeforeChange = joinPredicates(expectedType, mainVars, lrv, map).toConjunctions(); + String[] s = {wild_var, this_var}; + Predicate premisesBeforeChange = + joinPredicates(expectedType, mainVars, lrv, map).toConjunctions(); Predicate premises = new Predicate(); Predicate et = new Predicate(); try { - premises = premisesBeforeChange.changeStatesToRefinements(list, s, errorEmitter) + premises = premisesBeforeChange + .changeStatesToRefinements(list, s, errorEmitter) .changeAliasToRefinement(context, f); et = expectedType.changeStatesToRefinements(list, s, errorEmitter).changeAliasToRefinement(context, f); @@ -64,30 +70,42 @@ public void processSubtyping(Predicate expectedType, List list, Stri } } - public void processSubtyping(Predicate type, Predicate expectedType, List list, String wild_var, - String this_var, CtElement element, String string, Factory f) { + public void processSubtyping( + Predicate type, + Predicate expectedType, + List list, + String wild_var, + String this_var, + CtElement element, + String string, + Factory f) { boolean b = canProcessSubtyping(type, expectedType, list, wild_var, this_var, element.getPosition(), f); - if (!b) - printSubtypingError(element, expectedType, type, string); + if (!b) printSubtypingError(element, expectedType, type, string); } - public boolean canProcessSubtyping(Predicate type, Predicate expectedType, List list, String wild_var, - String this_var, SourcePosition p, Factory f) { + public boolean canProcessSubtyping( + Predicate type, + Predicate expectedType, + List list, + String wild_var, + String this_var, + SourcePosition p, + Factory f) { List lrv = new ArrayList<>(), mainVars = new ArrayList<>(); gatherVariables(expectedType, lrv, mainVars); gatherVariables(type, lrv, mainVars); - if (expectedType.isBooleanTrue() && type.isBooleanTrue()) - return true; + if (expectedType.isBooleanTrue() && type.isBooleanTrue()) return true; // Predicate premises = joinPredicates(type, element, mainVars, lrv); HashMap map = new HashMap<>(); - String[] s = { wild_var, this_var }; + String[] s = {wild_var, this_var}; Predicate premises = new Predicate(); Predicate et = new Predicate(); try { premises = joinPredicates(expectedType, mainVars, lrv, map).toConjunctions(); - premises = Predicate.createConjunction(premises, type).changeStatesToRefinements(list, s, errorEmitter) + premises = Predicate.createConjunction(premises, type) + .changeStatesToRefinements(list, s, errorEmitter) .changeAliasToRefinement(context, f); et = expectedType.changeStatesToRefinements(list, s, errorEmitter).changeAliasToRefinement(context, f); } catch (Exception e) { @@ -100,8 +118,11 @@ public boolean canProcessSubtyping(Predicate type, Predicate expectedType, List< return smtChecks(premises, et, p); } - private VCImplication joinPredicates(Predicate expectedType, List mainVars, - List vars, HashMap map) { + private VCImplication joinPredicates( + Predicate expectedType, + List mainVars, + List vars, + HashMap map) { VCImplication firstSi = null; VCImplication lastSi = null; @@ -160,17 +181,18 @@ private void gatherVariables(Predicate expectedType, List lrv, for (String s : expectedType.getVariableNames()) { if (context.hasVariable(s)) { RefinedVariable rv = context.getVariableByName(s); - if (!mainVars.contains(rv) && !lrv.contains(rv)) - mainVars.add(rv); + if (!mainVars.contains(rv) && !lrv.contains(rv)) mainVars.add(rv); List lm = getVariables(rv.getMainRefinement(), rv.getName()); addAllDifferent(lrv, lm, mainVars); } } } - private void addAllDifferent(List toExpand, List from, - List remove) { - from.stream().filter(rv -> !toExpand.contains(rv) && !remove.contains(rv)).forEach(toExpand::add); + private void addAllDifferent( + List toExpand, List from, List remove) { + from.stream() + .filter(rv -> !toExpand.contains(rv) && !remove.contains(rv)) + .forEach(toExpand::add); // for (RefinedVariable rv : from) { // if (!toExpand.contains(rv) && !remove.contains(rv)) // toExpand.add(rv); @@ -187,16 +209,18 @@ private List getVariables(Predicate c, String varName) { } private void getVariablesFromContext(List lvars, List allVars, String notAdd) { - lvars.stream().filter(name -> !name.equals(notAdd) && context.hasVariable(name)).map(context::getVariableByName) - .filter(rv -> !allVars.contains(rv)).forEach(rv -> { + lvars.stream() + .filter(name -> !name.equals(notAdd) && context.hasVariable(name)) + .map(context::getVariableByName) + .filter(rv -> !allVars.contains(rv)) + .forEach(rv -> { allVars.add(rv); recAuxGetVars(rv, allVars); }); } private void recAuxGetVars(RefinedVariable var, List newVars) { - if (!context.hasVariable(var.getName())) - return; + if (!context.hasVariable(var.getName())) return; Predicate c = var.getRefinement(); String varName = var.getName(); List l = c.getVariableNames(); @@ -257,8 +281,10 @@ public void removePathVariable(RefinedVariable rv) { } void removePathVariableThatIncludes(String otherVar) { - pathVariables.stream().filter(rv -> rv.getRefinement().getVariableNames().contains(otherVar)) - .collect(Collectors.toList()).forEach(pathVariables::remove); + pathVariables.stream() + .filter(rv -> rv.getRefinement().getVariableNames().contains(otherVar)) + .collect(Collectors.toList()) + .forEach(pathVariables::remove); } private void printVCs(String string, String stringSMT, Predicate expectedType) { @@ -279,8 +305,8 @@ private HashMap createMap(CtElement element, Predicate return map; } - protected void printSubtypingError(CtElement element, Predicate expectedType, Predicate foundType, - String customeMsg) { + protected void printSubtypingError( + CtElement element, Predicate expectedType, Predicate foundType, String customeMsg) { List lrv = new ArrayList<>(), mainVars = new ArrayList<>(); gatherVariables(expectedType, lrv, mainVars); gatherVariables(foundType, lrv, mainVars); @@ -294,7 +320,11 @@ public void printSameStateError(CtElement element, Predicate expectedType, Strin ErrorHandler.printSameStateSetError(element, expectedType, klass, map, errorEmitter); } - private void printError(Exception e, Predicate premisesBeforeChange, Predicate expectedType, CtElement element, + private void printError( + Exception e, + Predicate premisesBeforeChange, + Predicate expectedType, + CtElement element, HashMap map) { String s = null; if (element instanceof CtInvocation) { @@ -325,8 +355,12 @@ private void printError(Exception e, Predicate premisesBeforeChange, Predicate e } } - private void printError(Predicate premises, Predicate expectedType, CtElement element, - HashMap map, String s) { + private void printError( + Predicate premises, + Predicate expectedType, + CtElement element, + HashMap map, + String s) { Predicate etMessageReady = expectedType; // substituteByMap(expectedType, map); Predicate cSMTMessageReady = premises; // substituteByMap(premises, map); ErrorHandler.printError(element, s, etMessageReady, cSMTMessageReady, map, errorEmitter); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java index 93ae6503..bc55877a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java @@ -60,11 +60,17 @@ public void getConstructorRefinements(CtConstructor c) throws ParsingExceptio public void getConstructorInvocationRefinements(CtConstructorCall ctConstructorCall) { CtExecutableReference exe = ctConstructorCall.getExecutable(); if (exe != null) { - RefinedFunction f = rtc.getContext().getFunction(exe.getSimpleName(), - exe.getDeclaringType().getQualifiedName(), ctConstructorCall.getArguments().size()); + RefinedFunction f = rtc.getContext() + .getFunction( + exe.getSimpleName(), + exe.getDeclaringType().getQualifiedName(), + ctConstructorCall.getArguments().size()); if (f != null) { - Map map = checkInvocationRefinements(ctConstructorCall, - ctConstructorCall.getArguments(), ctConstructorCall.getTarget(), f.getName(), + Map map = checkInvocationRefinements( + ctConstructorCall, + ctConstructorCall.getArguments(), + ctConstructorCall.getTarget(), + f.getName(), f.getTargetClass()); AuxStateHandler.constructorStateMetadata(rtc.REFINE_KEY, f, map, ctConstructorCall); } @@ -92,8 +98,7 @@ public void getMethodRefinements(CtMethod method) throws ParsingException auxGetMethodRefinements(method, f); AuxStateHandler.handleMethodState(method, f, rtc); - if (klass != null) - AuxHierarchyRefinememtsPassage.checkFunctionInSupertypes(klass, method, f, rtc); + if (klass != null) AuxHierarchyRefinememtsPassage.checkFunctionInSupertypes(klass, method, f, rtc); } public void getMethodRefinements(CtMethod method, String prefix) throws ParsingException { @@ -122,8 +127,7 @@ public void getMethodRefinements(CtMethod method, String prefix) throws P private void auxGetMethodRefinements(CtMethod method, RefinedFunction rf) throws ParsingException { // main cannot have refinement - for now - if (method.getSignature().equals("main(java.lang.String[])")) - return; + if (method.getSignature().equals("main(java.lang.String[])")) return; List> params = method.getParameters(); Predicate ref = handleFunctionRefinements(rf, method, params); method.putMetadata(rtc.REFINE_KEY, ref); @@ -148,12 +152,10 @@ private Predicate handleFunctionRefinements(RefinedFunction f, CtElement method, String paramName = param.getSimpleName(); Optional oc = rtc.getRefinementFromAnnotation(param); Predicate c = new Predicate(); - if (oc.isPresent()) - c = oc.get().substituteVariable(rtc.WILD_VAR, paramName); + if (oc.isPresent()) c = oc.get().substituteVariable(rtc.WILD_VAR, paramName); param.putMetadata(rtc.REFINE_KEY, c); RefinedVariable v = rtc.getContext().addVarToContext(param.getSimpleName(), param.getType(), c, param); - if (v instanceof Variable) - f.addArgRefinements((Variable) v); + if (v instanceof Variable) f.addArgRefinements((Variable) v); joint = Predicate.createConjunction(joint, c); } @@ -185,11 +187,10 @@ public void getReturnRefinements(CtReturn ret) { ret.getReturnedExpression().putMetadata(rtc.REFINE_KEY, new Predicate()); CtMethod method = ret.getParent(CtMethod.class); // check if method has refinements - if (rtc.getRefinement(method) == null) - return; + if (rtc.getRefinement(method) == null) return; if (method.getParent() instanceof CtClass) { - RefinedFunction fi = rtc.getContext().getFunction(method.getSimpleName(), - ((CtClass) method.getParent()).getQualifiedName()); + RefinedFunction fi = rtc.getContext() + .getFunction(method.getSimpleName(), ((CtClass) method.getParent()).getQualifiedName()); List lv = fi.getArguments(); for (Variable v : lv) { @@ -200,10 +201,13 @@ public void getReturnRefinements(CtReturn ret) { String thisName = String.format(rtc.thisFormat, className); rtc.getContext().addInstanceToContext(thisName, c.getReference(), new Predicate(), ret); - String returnVarName = String.format(retNameFormat, rtc.getContext().getCounter()); + String returnVarName = + String.format(retNameFormat, rtc.getContext().getCounter()); Predicate cretRef = rtc.getRefinement(ret.getReturnedExpression()) - .substituteVariable(rtc.WILD_VAR, returnVarName).substituteVariable(rtc.THIS, returnVarName); - Predicate cexpectedType = fi.getRefReturn().substituteVariable(rtc.WILD_VAR, returnVarName) + .substituteVariable(rtc.WILD_VAR, returnVarName) + .substituteVariable(rtc.THIS, returnVarName); + Predicate cexpectedType = fi.getRefReturn() + .substituteVariable(rtc.WILD_VAR, returnVarName) .substituteVariable(rtc.THIS, returnVarName); rtc.getContext().addVarToContext(returnVarName, method.getType(), cretRef, ret); @@ -222,15 +226,14 @@ public void getInvocationRefinements(CtInvocation invocation) { CtExecutableReference cte = invocation.getExecutable(); - if (cte != null) - searchMethodInLibrary(cte, invocation); + if (cte != null) searchMethodInLibrary(cte, invocation); } else if (method.getParent() instanceof CtClass) { String ctype = ((CtClass) method.getParent()).getQualifiedName(); RefinedFunction f = rtc.getContext().getFunction(method.getSimpleName(), ctype); if (f != null) { // inside rtc.context - checkInvocationRefinements(invocation, invocation.getArguments(), invocation.getTarget(), - method.getSimpleName(), ctype); + checkInvocationRefinements( + invocation, invocation.getArguments(), invocation.getTarget(), method.getSimpleName(), ctype); } else { CtExecutable cet = invocation.getExecutable().getDeclaration(); @@ -269,14 +272,18 @@ private void searchMethodInLibrary(CtExecutableReference ctr, CtInvocation String prefix = ctype; String completeName = String.format("%s.%s", prefix, name); if (rtc.getContext().getFunction(completeName, ctype) != null) { - checkInvocationRefinements(invocation, invocation.getArguments(), invocation.getTarget(), completeName, - ctype); + checkInvocationRefinements( + invocation, invocation.getArguments(), invocation.getTarget(), completeName, ctype); } } } - private Map checkInvocationRefinements(CtElement invocation, List> arguments, - CtExpression target, String methodName, String className) { + private Map checkInvocationRefinements( + CtElement invocation, + List> arguments, + CtExpression target, + String methodName, + String className) { // -- Part 1: Check if the invocation is possible int si = arguments.size(); RefinedFunction f = rtc.getContext().getFunction(methodName, className, si); @@ -299,22 +306,24 @@ private Map checkInvocationRefinements(CtElement invocation, Lis if (methodRef != null) { boolean equalsThis = methodRef.toString().equals("(_ == this)"); // TODO change for better List vars = methodRef.getVariableNames(); - for (String s : vars) - if (map.containsKey(s)) - methodRef = methodRef.substituteVariable(s, map.get(s)); + for (String s : vars) if (map.containsKey(s)) methodRef = methodRef.substituteVariable(s, map.get(s)); String varName = null; if (invocation.getMetadata(rtc.TARGET_KEY) != null) { VariableInstance vi = (VariableInstance) invocation.getMetadata(rtc.TARGET_KEY); methodRef = methodRef.substituteVariable(rtc.THIS, vi.getName()); Variable v = rtc.getContext().getVariableFromInstance(vi); - if (v != null) - varName = v.getName(); + if (v != null) varName = v.getName(); } - String viName = String.format(rtc.instanceFormat, f.getName(), rtc.getContext().getCounter()); - VariableInstance vi = (VariableInstance) rtc.getContext().addInstanceToContext(viName, f.getType(), - methodRef.substituteVariable(rtc.WILD_VAR, viName), invocation); // TODO REVER!! + String viName = String.format( + rtc.instanceFormat, f.getName(), rtc.getContext().getCounter()); + VariableInstance vi = (VariableInstance) rtc.getContext() + .addInstanceToContext( + viName, + f.getType(), + methodRef.substituteVariable(rtc.WILD_VAR, viName), + invocation); // TODO REVER!! if (varName != null && f.hasStateChange() && equalsThis) rtc.getContext().addRefinementInstanceToVariable(varName, viName); invocation.putMetadata(rtc.TARGET_KEY, vi); @@ -342,7 +351,7 @@ private Map mapInvocation(List> arguments, R .getLastVariableInstance(vr.getVariable().getSimpleName()); invStr = ovi.map(o -> o.getName()).orElse(vr.toString()); } else // create new variable with the argument refinement - invStr = createVariableRepresentingArgument(iArg, fArg); + invStr = createVariableRepresentingArgument(iArg, fArg); mapInvocation.put(fArg.getName(), invStr); } @@ -351,17 +360,17 @@ private Map mapInvocation(List> arguments, R private String createVariableRepresentingArgument(CtExpression iArg, Variable fArg) { Predicate met = (Predicate) iArg.getMetadata(rtc.REFINE_KEY); - if (met == null) - met = new Predicate(); + if (met == null) met = new Predicate(); if (!met.getVariableNames().contains(rtc.WILD_VAR)) met = Predicate.createEquals(Predicate.createVar(rtc.WILD_VAR), met); - String nVar = String.format(rtc.instanceFormat, fArg.getName(), rtc.getContext().getCounter()); + String nVar = String.format( + rtc.instanceFormat, fArg.getName(), rtc.getContext().getCounter()); rtc.getContext().addInstanceToContext(nVar, fArg.getType(), met.substituteVariable(rtc.WILD_VAR, nVar), iArg); return nVar; } - private void checkParameters(CtElement invocation, List> arguments, RefinedFunction f, - Map map) { + private void checkParameters( + CtElement invocation, List> arguments, RefinedFunction f, Map map) { List> invocationParams = arguments; List functionParams = f.getArguments(); for (int i = 0; i < invocationParams.size(); i++) { @@ -369,17 +378,15 @@ private void checkParameters(CtElement invocation, List> arg Predicate c = fArg.getMainRefinement(); c = c.substituteVariable(fArg.getName(), map.get(fArg.getName())); List vars = c.getVariableNames(); - for (String s : vars) - if (map.containsKey(s)) - c = c.substituteVariable(s, map.get(s)); + for (String s : vars) if (map.containsKey(s)) c = c.substituteVariable(s, map.get(s)); rtc.checkSMT(c, invocation); } } // IN CONSTRUCTION _ NOT USED @SuppressWarnings("unused") - private void applyRefinementsToArguments(CtElement element, List> arguments, RefinedFunction f, - Map map) { + private void applyRefinementsToArguments( + CtElement element, List> arguments, RefinedFunction f, Map map) { Context context = rtc.getContext(); List> invocationParams = arguments; List functionParams = f.getArguments(); @@ -417,12 +424,11 @@ public void loadFunctionInfo(CtExecutable method) { className = ((CtInterface) method.getParent()).getQualifiedName(); } if (className != null) { - RefinedFunction fi = getRefinementFunction(method.getSimpleName(), className, - method.getParameters().size()); + RefinedFunction fi = getRefinementFunction( + method.getSimpleName(), className, method.getParameters().size()); if (fi != null) { List lv = fi.getArguments(); - for (Variable v : lv) - rtc.getContext().addVarToContext(v); + for (Variable v : lv) rtc.getContext().addVarToContext(v); } else { assert false; // Method should already be in context. Should not arrive this point in diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java index 2d0ab168..44b400de 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java @@ -3,9 +3,6 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; - -import org.apache.commons.lang3.NotImplementedException; - import liquidjava.processor.context.RefinedFunction; import liquidjava.processor.context.RefinedVariable; import liquidjava.processor.context.Variable; @@ -14,6 +11,7 @@ import liquidjava.rj_language.Predicate; import liquidjava.rj_language.parsing.ParsingException; import liquidjava.utils.Utils; +import org.apache.commons.lang3.NotImplementedException; import spoon.reflect.code.BinaryOperatorKind; import spoon.reflect.code.CtAssignment; import spoon.reflect.code.CtBinaryOperator; @@ -64,8 +62,7 @@ public void getBinaryOpRefinements(CtBinaryOperator operator) throws Pars Predicate oper; CtElement parent = operator.getParent(); - if (parent instanceof CtAnnotation) - return; // Operations in annotations are not handled here + if (parent instanceof CtAnnotation) return; // Operations in annotations are not handled here if (parent instanceof CtAssignment && ((CtAssignment) parent).getAssigned() instanceof CtVariableWrite) { @@ -84,7 +81,8 @@ public void getBinaryOpRefinements(CtBinaryOperator operator) throws Pars List types = Arrays.asList(rtc.implementedTypes); if (type.contentEquals("boolean")) { operator.putMetadata(rtc.REFINE_KEY, oper); - if (parent instanceof CtLocalVariable || parent instanceof CtUnaryOperator + if (parent instanceof CtLocalVariable + || parent instanceof CtUnaryOperator || parent instanceof CtReturn) operator.putMetadata(rtc.REFINE_KEY, Predicate.createEquals(Predicate.createVar(rtc.WILD_VAR), oper)); } else if (types.contains(type)) { @@ -103,7 +101,7 @@ public void getBinaryOpRefinements(CtBinaryOperator operator) throws Pars * * @throws ParsingException */ - @SuppressWarnings({ "unchecked" }) + @SuppressWarnings({"unchecked"}) public void getUnaryOpRefinements(CtUnaryOperator operator) throws ParsingException { CtExpression ex = (CtExpression) operator.getOperand(); String name = rtc.freshFormat; @@ -112,7 +110,8 @@ public void getUnaryOpRefinements(CtUnaryOperator operator) throws Parsin CtVariableWrite w = (CtVariableWrite) ex; name = w.getVariable().getSimpleName(); all = getRefinementUnaryVariableWrite(ex, operator, w, name); - rtc.checkVariableRefinements(all, name, w.getType(), operator, w.getVariable().getDeclaration()); + rtc.checkVariableRefinements( + all, name, w.getType(), operator, w.getVariable().getDeclaration()); return; } else if (ex instanceof CtVariableRead) { @@ -139,18 +138,15 @@ public void getUnaryOpRefinements(CtUnaryOperator operator) throws Parsin String newName; if (!name.equals(rtc.freshFormat)) newName = String.format(rtc.instanceFormat, name, rtc.getContext().getCounter()); - else - newName = String.format(name, rtc.getContext().getCounter()); + else newName = String.format(name, rtc.getContext().getCounter()); Predicate newMeta = metadata.substituteVariable(rtc.WILD_VAR, newName); Predicate unOp = getOperatorFromKind(operator.getKind(), operator); CtElement p = operator.getParent(); Predicate opS = unOp.substituteVariable(rtc.WILD_VAR, newName); - if (p instanceof CtIf) - all = opS; - else - all = Predicate.createEquals(Predicate.createVar(rtc.WILD_VAR), opS); // TODO SEE IF () IN OPS IS NEEDED + if (p instanceof CtIf) all = opS; + else all = Predicate.createEquals(Predicate.createVar(rtc.WILD_VAR), opS); // TODO SEE IF () IN OPS IS NEEDED rtc.getContext().addInstanceToContext(newName, ex.getType(), newMeta, operator); operator.putMetadata(rtc.REFINE_KEY, all); @@ -186,14 +182,19 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtExpres * * @throws ParsingException */ - private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariableWrite parentVar, - CtExpression element) throws ParsingException { + private Predicate getOperationRefinements( + CtBinaryOperator operator, CtVariableWrite parentVar, CtExpression element) + throws ParsingException { if (element instanceof CtFieldRead) { CtFieldRead field = ((CtFieldRead) element); if (field.getVariable().getSimpleName().equals("length")) { String name = String.format(rtc.freshFormat, rtc.getContext().getCounter()); - rtc.getContext().addVarToContext(name, element.getType(), - rtc.getRefinement(element).substituteVariable(rtc.WILD_VAR, name), field); + rtc.getContext() + .addVarToContext( + name, + element.getType(), + rtc.getRefinement(element).substituteVariable(rtc.WILD_VAR, name), + field); return Predicate.createVar(name); } } @@ -201,8 +202,7 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariab if (element instanceof CtVariableRead) { CtVariableRead elemVar = (CtVariableRead) element; String elemName = elemVar.getVariable().getSimpleName(); - if (elemVar instanceof CtFieldRead) - elemName = String.format(rtc.thisFormat, elemName); + if (elemVar instanceof CtFieldRead) elemName = String.format(rtc.thisFormat, elemName); Predicate elem_ref = rtc.getContext().getVariableRefinements(elemName); String returnName = elemName; @@ -211,11 +211,12 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariab // No need for specific values if (parent != null && !(parent instanceof CtIfImpl)) { elem_ref = rtc.getRefinement(elemVar); - String newName = String.format(rtc.instanceFormat, elemName, rtc.getContext().getCounter()); + String newName = String.format( + rtc.instanceFormat, elemName, rtc.getContext().getCounter()); Predicate newElem_ref = elem_ref.substituteVariable(rtc.WILD_VAR, newName); // String newElem_ref = elem_ref.replace(rtc.WILD_VAR, newName); - RefinedVariable newVi = rtc.getContext().addVarToContext(newName, elemVar.getType(), newElem_ref, - elemVar); + RefinedVariable newVi = + rtc.getContext().addVarToContext(newName, elemVar.getType(), newElem_ref, elemVar); rtc.getContext().addSpecificVariable(newVi); returnName = newName; } @@ -234,7 +235,11 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariab } else if (element instanceof CtUnaryOperator) { Predicate a = (Predicate) element.getMetadata(rtc.REFINE_KEY); a = a.substituteVariable(rtc.WILD_VAR, ""); - String s = a.toString().replace("(", "").replace(")", "").replace("==", "").replace(" ", ""); // TODO + String s = a.toString() + .replace("(", "") + .replace(")", "") + .replace("==", "") + .replace(" ", ""); // TODO // IMPROVE return new Predicate(String.format("(%s)", s), element, rtc.getErrorEmitter()); @@ -246,8 +251,7 @@ private Predicate getOperationRefinements(CtBinaryOperator operator, CtVariab CtInvocation inv = (CtInvocation) element; CtExecutable method = inv.getExecutable().getDeclaration(); - if (method == null) - return getOperationRefinementFromExternalLib(inv, operator); + if (method == null) return getOperationRefinementFromExternalLib(inv, operator); // Get function refinements with non_used variables String met = ((CtClass) method.getParent()).getQualifiedName(); // TODO check @@ -310,9 +314,11 @@ private Predicate getOperationRefinementFromExternalLib(CtInvocation inv, CtB * * @throws ParsingException */ - private Predicate getRefinementUnaryVariableWrite(CtExpression ex, CtUnaryOperator operator, - CtVariableWrite w, String name) throws ParsingException { - String newName = String.format(rtc.instanceFormat, name, rtc.getContext().getCounter()); + private Predicate getRefinementUnaryVariableWrite( + CtExpression ex, CtUnaryOperator operator, CtVariableWrite w, String name) + throws ParsingException { + String newName = + String.format(rtc.instanceFormat, name, rtc.getContext().getCounter()); CtVariable varDecl = w.getVariable().getDeclaration(); Predicate metadada = rtc.getContext().getVariableRefinements(varDecl.getSimpleName()); @@ -337,69 +343,69 @@ private Predicate getRefinementUnaryVariableWrite(CtExpression ex, CtUnar */ private String getOperatorFromKind(BinaryOperatorKind kind) { switch (kind) { - case PLUS: - return Utils.PLUS; - case MINUS: - return Utils.MINUS; - case MUL: - return Utils.MUL; - case DIV: - return Utils.DIV; - case MOD: - return Utils.MOD; - - case AND: - return Utils.AND; - case OR: - return Utils.OR; - - case EQ: - return Utils.EQ; - case NE: - return Utils.NEQ; - case GE: - return Utils.GE; - case GT: - return Utils.GT; - case LE: - return Utils.LE; - case LT: - return Utils.LT; - default: - return null; - // TODO COMPLETE WITH MORE OPERANDS + case PLUS: + return Utils.PLUS; + case MINUS: + return Utils.MINUS; + case MUL: + return Utils.MUL; + case DIV: + return Utils.DIV; + case MOD: + return Utils.MOD; + + case AND: + return Utils.AND; + case OR: + return Utils.OR; + + case EQ: + return Utils.EQ; + case NE: + return Utils.NEQ; + case GE: + return Utils.GE; + case GT: + return Utils.GT; + case LE: + return Utils.LE; + case LT: + return Utils.LT; + default: + return null; + // TODO COMPLETE WITH MORE OPERANDS } } private Predicate getOperatorFromKind(UnaryOperatorKind kind, CtElement elem) throws ParsingException { String ret = null; switch (kind) { - case POSTINC: - ret = rtc.WILD_VAR + " + 1"; - break; - case POSTDEC: - ret = rtc.WILD_VAR + " - 1"; - break; - case PREINC: - ret = rtc.WILD_VAR + " + 1"; - break; - case PREDEC: - ret = rtc.WILD_VAR + " - 1"; - break; - case COMPL: - ret = "(32 & " + rtc.WILD_VAR + ")"; - break; - case NOT: - ret = "!" + rtc.WILD_VAR; - break; - case POS: - ret = "0 + " + rtc.WILD_VAR; - break; - case NEG: - ret = "-" + rtc.WILD_VAR; - break; - default: - throw new ParsingException(kind + "operation not supported"); + case POSTINC: + ret = rtc.WILD_VAR + " + 1"; + break; + case POSTDEC: + ret = rtc.WILD_VAR + " - 1"; + break; + case PREINC: + ret = rtc.WILD_VAR + " + 1"; + break; + case PREDEC: + ret = rtc.WILD_VAR + " - 1"; + break; + case COMPL: + ret = "(32 & " + rtc.WILD_VAR + ")"; + break; + case NOT: + ret = "!" + rtc.WILD_VAR; + break; + case POS: + ret = "0 + " + rtc.WILD_VAR; + break; + case NEG: + ret = "-" + rtc.WILD_VAR; + break; + default: + throw new ParsingException(kind + "operation not supported"); } return new Predicate(ret, elem, rtc.getErrorEmitter()); } diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java index ead19e39..25ce7820 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxHierarchyRefinememtsPassage.java @@ -18,8 +18,8 @@ public class AuxHierarchyRefinememtsPassage { - public static void checkFunctionInSupertypes(CtClass klass, CtMethod method, RefinedFunction f, - TypeChecker tc) { + public static void checkFunctionInSupertypes( + CtClass klass, CtMethod method, RefinedFunction f, TypeChecker tc) { String name = method.getSimpleName(); int size = method.getParameters().size(); if (klass.getSuperInterfaces().size() > 0) { // implemented interfaces @@ -37,25 +37,30 @@ public static void checkFunctionInSupertypes(CtClass klass, CtMethod m } } - static void transferRefinements(RefinedFunction superFunction, RefinedFunction function, CtMethod method, - TypeChecker tc) { + static void transferRefinements( + RefinedFunction superFunction, RefinedFunction function, CtMethod method, TypeChecker tc) { HashMap super2function = getParametersMap(superFunction, function, tc, method); transferReturnRefinement(superFunction, function, method, tc, super2function); transferArgumentsRefinements(superFunction, function, method, tc, super2function); transferStateRefinements(superFunction, function, method, tc); } - private static HashMap getParametersMap(RefinedFunction superFunction, RefinedFunction function, - TypeChecker tc, CtMethod method) { + private static HashMap getParametersMap( + RefinedFunction superFunction, RefinedFunction function, TypeChecker tc, CtMethod method) { List superArgs = superFunction.getArguments(); List fArgs = function.getArguments(); HashMap m = new HashMap(); for (int i = 0; i < fArgs.size(); i++) { - String newName = String.format(tc.instanceFormat, fArgs.get(i).getName(), tc.getContext().getCounter()); + String newName = String.format( + tc.instanceFormat, fArgs.get(i).getName(), tc.getContext().getCounter()); m.put(superArgs.get(i).getName(), newName); m.put(fArgs.get(i).getName(), newName); - RefinedVariable rv = tc.getContext().addVarToContext(newName, superArgs.get(i).getType(), new Predicate(), - method.getParameters().get(i)); + RefinedVariable rv = tc.getContext() + .addVarToContext( + newName, + superArgs.get(i).getType(), + new Predicate(), + method.getParameters().get(i)); for (CtTypeReference t : fArgs.get(i).getSuperTypes()) { rv.addSuperType(t); } @@ -63,8 +68,12 @@ private static HashMap getParametersMap(RefinedFunction superFun return m; } - static void transferArgumentsRefinements(RefinedFunction superFunction, RefinedFunction function, - CtMethod method, TypeChecker tc, HashMap super2function) { + static void transferArgumentsRefinements( + RefinedFunction superFunction, + RefinedFunction function, + CtMethod method, + TypeChecker tc, + HashMap super2function) { List superArgs = superFunction.getArguments(); List args = function.getArguments(); List> params = method.getParameters(); @@ -82,19 +91,21 @@ static void transferArgumentsRefinements(RefinedFunction superFunction, RefinedF boolean f = tc.checksStateSMT(superArgRef, argRef, params.get(i).getPosition()); if (!f) { // ErrorPrinter.printError(method, argRef, superArgRef); - if (!tc.getErrorEmitter().foundError()) - tc.createError(method, argRef, superArgRef, ""); + if (!tc.getErrorEmitter().foundError()) tc.createError(method, argRef, superArgRef, ""); } } } } - static void transferReturnRefinement(RefinedFunction superFunction, RefinedFunction function, CtMethod method, - TypeChecker tc, HashMap super2function) { + static void transferReturnRefinement( + RefinedFunction superFunction, + RefinedFunction function, + CtMethod method, + TypeChecker tc, + HashMap super2function) { Predicate functionRef = function.getRefinement(); Predicate superRef = superFunction.getRefinement(); - if (functionRef.isBooleanTrue()) - function.setRefinement(superRef); + if (functionRef.isBooleanTrue()) function.setRefinement(superRef); else { String name = String.format(tc.freshFormat, tc.getContext().getCounter()); tc.getContext().addVarToContext(name, superFunction.getType(), new Predicate(), method); @@ -102,12 +113,14 @@ static void transferReturnRefinement(RefinedFunction superFunction, RefinedFunct // functionRef) functionRef = functionRef.substituteVariable(tc.WILD_VAR, name); superRef = superRef.substituteVariable(tc.WILD_VAR, name); - for (String m : super2function.keySet()) - superRef = superRef.substituteVariable(m, super2function.get(m)); + for (String m : super2function.keySet()) superRef = superRef.substituteVariable(m, super2function.get(m)); for (String m : super2function.keySet()) functionRef = functionRef.substituteVariable(m, super2function.get(m)); - tc.checkStateSMT(functionRef, superRef, method, + tc.checkStateSMT( + functionRef, + superRef, + method, "Return Refinement of Subclass must be subtype of the Return Refinement of the" + " Superclass"); // boolean f = tc.checkStateSMT(functionRef, superRef, method); // if(!f) @@ -115,24 +128,23 @@ static void transferReturnRefinement(RefinedFunction superFunction, RefinedFunct } } - static Optional functionInInterface(CtClass klass, String simpleName, int size, - TypeChecker tc) { + static Optional functionInInterface( + CtClass klass, String simpleName, int size, TypeChecker tc) { List lrf = tc.getContext().getAllMethodsWithNameSize(simpleName, size); - List st = klass.getSuperInterfaces().stream().map(p -> p.getQualifiedName()) + List st = klass.getSuperInterfaces().stream() + .map(p -> p.getQualifiedName()) .collect(Collectors.toList()); for (RefinedFunction rf : lrf) { - if (st.contains(rf.getTargetClass())) - return Optional.of(rf); // TODO only works for 1 interface + if (st.contains(rf.getTargetClass())) return Optional.of(rf); // TODO only works for 1 interface } return Optional.empty(); } - private static void transferStateRefinements(RefinedFunction superFunction, RefinedFunction subFunction, - CtMethod method, TypeChecker tc) { + private static void transferStateRefinements( + RefinedFunction superFunction, RefinedFunction subFunction, CtMethod method, TypeChecker tc) { if (superFunction.hasStateChange()) { if (!subFunction.hasStateChange()) { - for (ObjectState o : superFunction.getAllStates()) - subFunction.addStates(o.clone()); + for (ObjectState o : superFunction.getAllStates()) subFunction.addStates(o.clone()); } else { List superStates = superFunction.getAllStates(); List subStates = subFunction.getAllStates(); @@ -140,15 +152,24 @@ private static void transferStateRefinements(RefinedFunction superFunction, Refi ObjectState superState = superStates.get(i); ObjectState subState = subStates.get(i); - String thisName = String.format(tc.freshFormat, tc.getContext().getCounter()); - createVariableInContext(thisName, tc, subFunction, superFunction, method.getParameters().get(i)); + String thisName = + String.format(tc.freshFormat, tc.getContext().getCounter()); + createVariableInContext( + thisName, + tc, + subFunction, + superFunction, + method.getParameters().get(i)); Predicate superConst = matchVariableNames(tc.THIS, thisName, superState.getFrom()); - Predicate subConst = matchVariableNames(tc.THIS, thisName, superFunction, subFunction, - subState.getFrom()); + Predicate subConst = + matchVariableNames(tc.THIS, thisName, superFunction, subFunction, subState.getFrom()); // fromSup <: fromSub <==> fromSup is sub type and fromSub is expectedType - tc.checkStateSMT(superConst, subConst, method, + tc.checkStateSMT( + superConst, + subConst, + method, "FROM State from Superclass must be subtype of FROM State from Subclass"); // boolean correct = tc.checkStateSMT(superConst, subConst, method); // if(!correct) ErrorPrinter.printError(method, subState.getFrom(), @@ -157,7 +178,10 @@ private static void transferStateRefinements(RefinedFunction superFunction, Refi superConst = matchVariableNames(tc.THIS, thisName, superState.getTo()); subConst = matchVariableNames(tc.THIS, thisName, superFunction, subFunction, subState.getTo()); // toSub <: toSup <==> ToSub is sub type and toSup is expectedType - tc.checkStateSMT(subConst, superConst, method, + tc.checkStateSMT( + subConst, + superConst, + method, "TO State from Subclass must be subtype of TO State from Superclass"); // boolean correct = tc.checkStateSMT(subConst, superConst, method); // if(!correct) ErrorPrinter.printError(method, subState.getTo(), @@ -167,10 +191,18 @@ private static void transferStateRefinements(RefinedFunction superFunction, Refi } } - private static void createVariableInContext(String thisName, TypeChecker tc, RefinedFunction subFunction, - RefinedFunction superFunction, CtParameter ctParameter) { - RefinedVariable rv = tc.getContext().addVarToContext(thisName, - Utils.getType(subFunction.getTargetClass(), tc.getFactory()), new Predicate(), ctParameter); + private static void createVariableInContext( + String thisName, + TypeChecker tc, + RefinedFunction subFunction, + RefinedFunction superFunction, + CtParameter ctParameter) { + RefinedVariable rv = tc.getContext() + .addVarToContext( + thisName, + Utils.getType(subFunction.getTargetClass(), tc.getFactory()), + new Predicate(), + ctParameter); rv.addSuperType(Utils.getType(superFunction.getTargetClass(), tc.getFactory())); // TODO: change: this only // works // for one superclass @@ -188,8 +220,8 @@ private static void createVariableInContext(String thisName, TypeChecker tc, Ref * * @return */ - private static Predicate matchVariableNames(String fromName, String thisName, RefinedFunction superFunction, - RefinedFunction subFunction, Predicate c) { + private static Predicate matchVariableNames( + String fromName, String thisName, RefinedFunction superFunction, RefinedFunction subFunction, Predicate c) { Predicate nc = c.substituteVariable(fromName, thisName); List superArgs = superFunction.getArguments(); List subArgs = subFunction.getArguments(); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java index 972c8c99..b9b6c6f9 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java @@ -3,8 +3,6 @@ import java.lang.annotation.Annotation; import java.util.*; import java.util.stream.Collectors; - -import liquidjava.errors.ErrorEmitter; import liquidjava.errors.ErrorHandler; import liquidjava.processor.context.*; import liquidjava.processor.refinement_checker.TypeChecker; @@ -29,7 +27,7 @@ public class AuxStateHandler { * * @throws ParsingException */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public static void handleConstructorState(CtConstructor c, RefinedFunction f, TypeChecker tc) throws ParsingException { List> an = getStateAnnotation(c); @@ -58,16 +56,16 @@ public static void handleConstructorState(CtConstructor c, RefinedFunction f, * * @throws ParsingException */ - @SuppressWarnings({ "rawtypes" }) - private static void setConstructorStates(RefinedFunction f, List> anns, - TypeChecker tc, CtElement element) throws ParsingException { + @SuppressWarnings({"rawtypes"}) + private static void setConstructorStates( + RefinedFunction f, List> anns, TypeChecker tc, CtElement element) + throws ParsingException { List l = new ArrayList<>(); for (CtAnnotation an : anns) { Map m = an.getAllValues(); String to = TypeCheckingUtils.getStringFromAnnotation(m.get("to")); ObjectState state = new ObjectState(); - if (to != null) - state.setTo(new Predicate(to, element, tc.getErrorEmitter())); + if (to != null) state.setTo(new Predicate(to, element, tc.getErrorEmitter())); l.add(state); } f.setAllStates(l); @@ -77,13 +75,13 @@ public static void setDefaultState(RefinedFunction f, TypeChecker tc) { String[] path = f.getTargetClass().split("\\."); String klass = path[path.length - 1]; - Predicate[] s = { Predicate.createVar(tc.THIS) }; + Predicate[] s = {Predicate.createVar(tc.THIS)}; Predicate c = new Predicate(); - List sets = getDifferentSets(tc, klass);// ?? + List sets = getDifferentSets(tc, klass); // ?? for (GhostFunction sg : sets) { if (sg.getReturnType().toString().equals("int")) { - Predicate p = Predicate.createEquals(Predicate.createInvocation(sg.getName(), s), - Predicate.createLit("0", Utils.INT)); + Predicate p = Predicate.createEquals( + Predicate.createInvocation(sg.getName(), s), Predicate.createLit("0", Utils.INT)); c = Predicate.createConjunction(c, p); } else { // TODO: Implement other stuff @@ -142,8 +140,9 @@ public static void handleMethodState(CtMethod method, RefinedFunction f, Type * * @throws ParsingException */ - private static void setFunctionStates(RefinedFunction f, List> anns, - TypeChecker tc, CtElement element) throws ParsingException { + private static void setFunctionStates( + RefinedFunction f, List> anns, TypeChecker tc, CtElement element) + throws ParsingException { List l = new ArrayList<>(); for (CtAnnotation an : anns) { l.add(getStates(an, f, tc, element)); @@ -151,9 +150,10 @@ private static void setFunctionStates(RefinedFunction f, List ctAnnotation, RefinedFunction f, - TypeChecker tc, CtElement e) throws ParsingException { + @SuppressWarnings({"rawtypes"}) + private static ObjectState getStates( + CtAnnotation ctAnnotation, RefinedFunction f, TypeChecker tc, CtElement e) + throws ParsingException { Map m = ctAnnotation.getAllValues(); String from = TypeCheckingUtils.getStringFromAnnotation(m.get("from")); String to = TypeCheckingUtils.getStringFromAnnotation(m.get("to")); @@ -178,13 +178,15 @@ private static ObjectState getStates(CtAnnotation ctAnnota return state; } - private static Predicate createStatePredicate(String value, /* RefinedFunction f */ - String targetClass, TypeChecker tc, CtElement e, boolean isTo) throws ParsingException { + private static Predicate createStatePredicate( + String value, /* RefinedFunction f */ String targetClass, TypeChecker tc, CtElement e, boolean isTo) + throws ParsingException { Predicate p = new Predicate(value, e, tc.getErrorEmitter()); String t = targetClass; // f.getTargetClass(); CtTypeReference r = tc.getFactory().Type().createReference(t); - String nameOld = String.format(tc.instanceFormat, tc.THIS, tc.getContext().getCounter()); + String nameOld = + String.format(tc.instanceFormat, tc.THIS, tc.getContext().getCounter()); String name = String.format(tc.instanceFormat, tc.THIS, tc.getContext().getCounter()); tc.getContext().addVarToContext(name, r, new Predicate(), e); tc.getContext().addVarToContext(nameOld, r, new Predicate(), e); @@ -248,8 +250,8 @@ private static Predicate addOldStates(Predicate p, Predicate th, List map, - CtConstructorCall ctConstructorCall) { + public static void constructorStateMetadata( + String refKey, RefinedFunction f, Map map, CtConstructorCall ctConstructorCall) { List oc = f.getToStates(); if (oc.size() > 0) { // && !oc.get(0).isBooleanTrue()) // ctConstructorCall.putMetadata(stateKey, oc.get(0)); @@ -293,8 +295,8 @@ public static void addStateRefinements(TypeChecker tc, String varName, CtExpress * @param map * @param invocation */ - public static void checkTargetChanges(TypeChecker tc, RefinedFunction f, CtExpression target2, - Map map, CtElement invocation) { + public static void checkTargetChanges( + TypeChecker tc, RefinedFunction f, CtExpression target2, Map map, CtElement invocation) { String parentTargetName = searchFistVariableTarget(tc, target2, invocation); VariableInstance target = getTarget(tc, invocation); if (target != null) { @@ -324,7 +326,8 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { return; } - String parentTargetName = ((CtVariableRead) fw.getTarget()).getVariable().getSimpleName(); + String parentTargetName = + ((CtVariableRead) fw.getTarget()).getVariable().getSimpleName(); Optional invocation_callee = tc.getContext().getLastVariableInstance(parentTargetName); if (!invocation_callee.isPresent()) { @@ -334,7 +337,8 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { VariableInstance vi = invocation_callee.get(); String instanceName = vi.getName(); - Predicate prevState = vi.getRefinement().substituteVariable(tc.WILD_VAR, instanceName) + Predicate prevState = vi.getRefinement() + .substituteVariable(tc.WILD_VAR, instanceName) .substituteVariable(parentTargetName, instanceName); // StateRefinement(from="true", to="n(this)=this#n") @@ -347,17 +351,19 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { stateChange.setFrom(fromPredicate); stateChange.setTo(toPredicate); } catch (ParsingException e) { - ErrorHandler - .printCostumeError(fw, - "ParsingException while constructing assignment update for `" + fw + "` in class `" - + fw.getVariable().getDeclaringType() + "` : " + e.getMessage(), - tc.getErrorEmitter()); + ErrorHandler.printCostumeError( + fw, + "ParsingException while constructing assignment update for `" + fw + "` in class `" + + fw.getVariable().getDeclaringType() + "` : " + e.getMessage(), + tc.getErrorEmitter()); return; } // replace "state(this)" to "state(whatever method is called from) and so on" - Predicate expectState = stateChange.getFrom().substituteVariable(tc.THIS, instanceName) + Predicate expectState = stateChange + .getFrom() + .substituteVariable(tc.THIS, instanceName) .changeOldMentions(vi.getName(), instanceName, tc.getErrorEmitter()); if (!tc.checksStateSMT(prevState, expectState, fw.getPosition())) { // Invalid field transition @@ -368,15 +374,18 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { return; } - String newInstanceName = String.format(tc.instanceFormat, parentTargetName, tc.getContext().getCounter()); - Predicate transitionedState = stateChange.getTo().substituteVariable(tc.WILD_VAR, newInstanceName) + String newInstanceName = String.format( + tc.instanceFormat, parentTargetName, tc.getContext().getCounter()); + Predicate transitionedState = stateChange + .getTo() + .substituteVariable(tc.WILD_VAR, newInstanceName) .substituteVariable(tc.THIS, newInstanceName); transitionedState = checkOldMentions(transitionedState, instanceName, newInstanceName, tc); // update of stata of new instance of this#n#(whatever it was + 1) - VariableInstance vi2 = (VariableInstance) tc.getContext().addInstanceToContext(newInstanceName, vi.getType(), - vi.getRefinement(), fw); + VariableInstance vi2 = (VariableInstance) + tc.getContext().addInstanceToContext(newInstanceName, vi.getType(), vi.getRefinement(), fw); vi2.setRefinement(transitionedState); RefinedVariable rv = tc.getContext().getVariableByName(parentTargetName); @@ -404,15 +413,19 @@ public static void updateGhostField(CtFieldWrite fw, TypeChecker tc) { * * @return */ - private static Predicate changeState(TypeChecker tc, VariableInstance vi, - /* RefinedFunction f */ List stateChanges, String name, Map map, + private static Predicate changeState( + TypeChecker tc, + VariableInstance vi, + /* RefinedFunction f */ List stateChanges, + String name, + Map map, CtElement invocation) { if (vi.getRefinement() == null) { return new Predicate(); } String instanceName = vi.getName(); - Predicate prevState = vi.getRefinement().substituteVariable(tc.WILD_VAR, instanceName).substituteVariable(name, - instanceName); + Predicate prevState = + vi.getRefinement().substituteVariable(tc.WILD_VAR, instanceName).substituteVariable(name, instanceName); // List stateChanges = f.getAllStates(); @@ -437,8 +450,11 @@ private static Predicate changeState(TypeChecker tc, VariableInstance vi, found = tc.checksStateSMT(prevCheck, expectState, invocation.getPosition()); if (found && stateChange.hasTo()) { - String newInstanceName = String.format(tc.instanceFormat, name, tc.getContext().getCounter()); - Predicate transitionedState = stateChange.getTo().substituteVariable(tc.WILD_VAR, newInstanceName) + String newInstanceName = + String.format(tc.instanceFormat, name, tc.getContext().getCounter()); + Predicate transitionedState = stateChange + .getTo() + .substituteVariable(tc.WILD_VAR, newInstanceName) .substituteVariable(tc.THIS, newInstanceName); for (String s : map.keySet()) { transitionedState = transitionedState.substituteVariable(s, map.get(s)); @@ -450,8 +466,11 @@ private static Predicate changeState(TypeChecker tc, VariableInstance vi, } } if (!found && !tc.getErrorEmitter().foundError()) { // Reaches the end of stateChange no matching states - String states = stateChanges.stream().filter(ObjectState::hasFrom).map(ObjectState::getFrom) - .map(Predicate::toString).collect(Collectors.joining(",")); + String states = stateChanges.stream() + .filter(ObjectState::hasFrom) + .map(ObjectState::getFrom) + .map(Predicate::toString) + .collect(Collectors.joining(",")); String simpleInvocation = invocation.toString(); // .getExecutable().toString(); tc.createStateMismatchError(invocation, simpleInvocation, prevState, states); @@ -480,8 +499,8 @@ private static Predicate changeVarsFields(Predicate pred, TypeChecker tc) { return noOld; } - private static Predicate checkOldMentions(Predicate transitionedState, String instanceName, String newInstanceName, - TypeChecker tc) { + private static Predicate checkOldMentions( + Predicate transitionedState, String instanceName, String newInstanceName, TypeChecker tc) { return transitionedState.changeOldMentions(instanceName, newInstanceName, tc.getErrorEmitter()); } @@ -495,15 +514,18 @@ private static Predicate checkOldMentions(Predicate transitionedState, String in * * @return */ - private static Predicate sameState(TypeChecker tc, VariableInstance variableInstance, String name, - CtElement invocation) { + private static Predicate sameState( + TypeChecker tc, VariableInstance variableInstance, String name, CtElement invocation) { // if(variableInstance.getState() != null) { if (variableInstance.getRefinement() != null) { - String newInstanceName = String.format(tc.instanceFormat, name, tc.getContext().getCounter()); + String newInstanceName = + String.format(tc.instanceFormat, name, tc.getContext().getCounter()); // Predicate c = // variableInstance.getState().substituteVariable(variableInstance.getName(), // newInstanceName); - Predicate c = variableInstance.getRefinement().substituteVariable(tc.WILD_VAR, newInstanceName) + Predicate c = variableInstance + .getRefinement() + .substituteVariable(tc.WILD_VAR, newInstanceName) .substituteVariable(variableInstance.getName(), newInstanceName); addInstanceWithState(tc, name, newInstanceName, variableInstance, c, invocation); @@ -524,10 +546,15 @@ private static Predicate sameState(TypeChecker tc, VariableInstance variableInst * * @return */ - private static String addInstanceWithState(TypeChecker tc, String superName, String name2, - VariableInstance prevInstance, Predicate transitionedState, CtElement invocation) { - VariableInstance vi2 = (VariableInstance) tc.getContext().addInstanceToContext(name2, prevInstance.getType(), - prevInstance.getRefinement(), invocation); + private static String addInstanceWithState( + TypeChecker tc, + String superName, + String name2, + VariableInstance prevInstance, + Predicate transitionedState, + CtElement invocation) { + VariableInstance vi2 = (VariableInstance) tc.getContext() + .addInstanceToContext(name2, prevInstance.getType(), prevInstance.getRefinement(), invocation); // vi2.setState(transitionedState); vi2.setRefinement(transitionedState); RefinedVariable rv = tc.getContext().getVariableByName(superName); @@ -566,9 +593,11 @@ static String searchFistVariableTarget(TypeChecker tc, CtElement target2, CtElem invocation.putMetadata(tc.TARGET_KEY, invocation_callee.get()); } else if (target2.getMetadata(tc.TARGET_KEY) == null) { RefinedVariable var = tc.getContext().getVariableByName(name); - String nName = String.format(tc.instanceFormat, name, tc.getContext().getCounter()); - RefinedVariable rv = tc.getContext().addInstanceToContext(nName, var.getType(), - var.getRefinement().substituteVariable(name, nName), target2); + String nName = + String.format(tc.instanceFormat, name, tc.getContext().getCounter()); + RefinedVariable rv = tc.getContext() + .addInstanceToContext( + nName, var.getType(), var.getRefinement().substituteVariable(name, nName), target2); tc.getContext().addRefinementInstanceToVariable(name, nName); invocation.putMetadata(tc.TARGET_KEY, rv); } @@ -593,8 +622,11 @@ static VariableInstance getTarget(TypeChecker tc, CtElement invocation) { } private static List> getStateAnnotation(CtElement element) { - return element.getAnnotations().stream().filter(ann -> ann.getActualAnnotation().annotationType() - .getCanonicalName().contentEquals("liquidjava.specification.StateRefinement")) + return element.getAnnotations().stream() + .filter(ann -> ann.getActualAnnotation() + .annotationType() + .getCanonicalName() + .contentEquals("liquidjava.specification.StateRefinement")) .collect(Collectors.toList()); // List> l = new ArrayList getVariableNames() { } public List getStateInvocations(List lgs) { - if (lgs == null) - return new ArrayList<>(); + if (lgs == null) return new ArrayList<>(); List all = lgs.stream().map(p -> p.getName()).collect(Collectors.toList()); List toAdd = new ArrayList<>(); exp.getStateInvocations(toAdd, all); List gh = new ArrayList<>(); for (String n : toAdd) { - for (GhostState g : lgs) - if (g.getName().equals(n)) - gh.add(g); + for (GhostState g : lgs) if (g.getName().equals(n)) gh.add(g); } return gh; @@ -149,15 +145,12 @@ private void expressionGetOldVariableNames(Expression exp, List ls) { if (fi.getName().equals(Utils.OLD)) { List le = fi.getArgs(); for (Expression e : le) { - if (e instanceof Var) - ls.add(((Var) e).getName()); + if (e instanceof Var) ls.add(((Var) e).getName()); } } } if (exp.hasChildren()) { - for (var ch : exp.getChildren()) - expressionGetOldVariableNames(ch, ls); - + for (var ch : exp.getChildren()) expressionGetOldVariableNames(ch, ls); } } @@ -165,7 +158,7 @@ public Predicate changeStatesToRefinements(List ghostState, String[] Map nameRefinementMap = new HashMap<>(); for (GhostState gs : ghostState) if (gs.getRefinement() != null) // is a state and not a ghost state - nameRefinementMap.put(gs.getName(), innerParse(gs.getRefinement().toString(), ee)); + nameRefinementMap.put(gs.getName(), innerParse(gs.getRefinement().toString(), ee)); Expression e = exp.substituteState(nameRefinementMap, toChange); return new Predicate(e); @@ -208,18 +201,13 @@ public static Predicate createITE(Predicate c1, Predicate c2, Predicate c3) { public static Predicate createLit(String value, String type) { Expression ex; - if (type.equals(Utils.BOOLEAN)) - ex = new LiteralBoolean(value); - else if (type.equals(Utils.INT)) - ex = new LiteralInt(value); - else if (type.equals(Utils.DOUBLE)) - ex = new LiteralReal(value); - else if (type.equals(Utils.SHORT)) - ex = new LiteralInt(value); - else if (type.equals(Utils.LONG)) - ex = new LiteralReal(value); + if (type.equals(Utils.BOOLEAN)) ex = new LiteralBoolean(value); + else if (type.equals(Utils.INT)) ex = new LiteralInt(value); + else if (type.equals(Utils.DOUBLE)) ex = new LiteralReal(value); + else if (type.equals(Utils.SHORT)) ex = new LiteralInt(value); + else if (type.equals(Utils.LONG)) ex = new LiteralReal(value); else // if(type.equals(Utils.DOUBLE)) - ex = new LiteralReal(value); + ex = new LiteralReal(value); return new Predicate(ex); } @@ -233,8 +221,7 @@ public static Predicate createVar(String name) { public static Predicate createInvocation(String name, Predicate... Predicates) { List le = new ArrayList<>(); - for (Predicate c : Predicates) - le.add(c.getExpression()); + for (Predicate c : Predicates) le.add(c.getExpression()); return new Predicate(new FunctionInvocation(name, le)); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/AliasInvocation.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/AliasInvocation.java index cdd89591..eea8c708 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/AliasInvocation.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/AliasInvocation.java @@ -11,8 +11,7 @@ public class AliasInvocation extends Expression { public AliasInvocation(String name, List args) { this.name = name; - for (Expression e : args) - addChild(e); + for (Expression e : args) addChild(e); } public String getName() { @@ -39,21 +38,18 @@ public String toString() { @Override public void getVariableNames(List toAdd) { - for (Expression e : getArgs()) - e.getVariableNames(toAdd); + for (Expression e : getArgs()) e.getVariableNames(toAdd); } @Override public void getStateInvocations(List toAdd, List all) { - for (Expression e : getArgs()) - e.getStateInvocations(toAdd, all); + for (Expression e : getArgs()) e.getStateInvocations(toAdd, all); } @Override public Expression clone() { List le = new ArrayList<>(); - for (Expression e : getArgs()) - le.add(e.clone()); + for (Expression e : getArgs()) le.add(e.clone()); return new AliasInvocation(name, le); } @@ -73,23 +69,16 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; AliasInvocation other = (AliasInvocation) obj; if (getArgs() == null) { - if (other.getArgs() != null) - return false; - } else if (!getArgs().equals(other.getArgs())) - return false; + if (other.getArgs() != null) return false; + } else if (!getArgs().equals(other.getArgs())) return false; if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; + if (other.name != null) return false; + } else if (!name.equals(other.name)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/BinaryExpression.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/BinaryExpression.java index ad7973cd..dc0c2f3a 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/BinaryExpression.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/BinaryExpression.java @@ -31,7 +31,11 @@ public boolean isLogicOperation() { } public boolean isBooleanOperation() { - return op.equals("==") || op.equals("!=") || op.equals(">=") || op.equals(">") || op.equals("<=") + return op.equals("==") + || op.equals("!=") + || op.equals(">=") + || op.equals(">") + || op.equals("<=") || op.equals("<"); } @@ -48,42 +52,43 @@ public Expr eval(TranslatorToZ3 ctx) throws Exception { private Expr evalBinaryOp(TranslatorToZ3 ctx, Expr e1, Expr e2) { switch (op) { - case "&&": - return ctx.makeAnd(e1, e2); - case "||": - return ctx.makeOr(e1, e2); - case "-->": - return ctx.makeImplies(e1, e2); - case "==": - return ctx.makeEquals(e1, e2); - case "!=": - return ctx.mkNot(ctx.makeEquals(e1, e2)); - case ">=": - return ctx.makeGtEq(e1, e2); - case ">": - return ctx.makeGt(e1, e2); - case "<=": - return ctx.makeLtEq(e1, e2); - case "<": - return ctx.makeLt(e1, e2); - case "+": - return ctx.makeAdd(e1, e2); - case "-": - return ctx.makeSub(e1, e2); - case "*": - return ctx.makeMul(e1, e2); - case "/": - return ctx.makeDiv(e1, e2); - case "%": - return ctx.makeMod(e1, e2); - default: // last case % - throw new RuntimeException("Operation " + op + "not supported by z3"); + case "&&": + return ctx.makeAnd(e1, e2); + case "||": + return ctx.makeOr(e1, e2); + case "-->": + return ctx.makeImplies(e1, e2); + case "==": + return ctx.makeEquals(e1, e2); + case "!=": + return ctx.mkNot(ctx.makeEquals(e1, e2)); + case ">=": + return ctx.makeGtEq(e1, e2); + case ">": + return ctx.makeGt(e1, e2); + case "<=": + return ctx.makeLtEq(e1, e2); + case "<": + return ctx.makeLt(e1, e2); + case "+": + return ctx.makeAdd(e1, e2); + case "-": + return ctx.makeSub(e1, e2); + case "*": + return ctx.makeMul(e1, e2); + case "/": + return ctx.makeDiv(e1, e2); + case "%": + return ctx.makeMod(e1, e2); + default: // last case % + throw new RuntimeException("Operation " + op + "not supported by z3"); } } @Override public String toString() { - return getFirstOperand().toString() + " " + op + " " + getSecondOperand().toString(); + return getFirstOperand().toString() + " " + op + " " + + getSecondOperand().toString(); } @Override @@ -100,22 +105,23 @@ public void getStateInvocations(List toAdd, List all) { @Override public Expression clone() { - return new BinaryExpression(getFirstOperand().clone(), op, getSecondOperand().clone()); + return new BinaryExpression( + getFirstOperand().clone(), op, getSecondOperand().clone()); } @Override public boolean isBooleanTrue() { switch (op) { - case "&&": - return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); - case "||": - return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); - case "-->": - return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); - case "==": - return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); - default: - return false; + case "&&": + return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); + case "||": + return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); + case "-->": + return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); + case "==": + return getFirstOperand().isBooleanTrue() && getSecondOperand().isBooleanTrue(); + default: + return false; } } @@ -123,36 +129,29 @@ public boolean isBooleanTrue() { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((getFirstOperand() == null) ? 0 : getFirstOperand().hashCode()); - result = prime * result + ((getSecondOperand() == null) ? 0 : getSecondOperand().hashCode()); + result = prime * result + + ((getFirstOperand() == null) ? 0 : getFirstOperand().hashCode()); + result = prime * result + + ((getSecondOperand() == null) ? 0 : getSecondOperand().hashCode()); result = prime * result + ((op == null) ? 0 : op.hashCode()); return result; } @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; BinaryExpression other = (BinaryExpression) obj; if (getFirstOperand() == null) { - if (other.getFirstOperand() != null) - return false; - } else if (!getFirstOperand().equals(other.getFirstOperand())) - return false; + if (other.getFirstOperand() != null) return false; + } else if (!getFirstOperand().equals(other.getFirstOperand())) return false; if (getSecondOperand() == null) { - if (other.getSecondOperand() != null) - return false; - } else if (!getSecondOperand().equals(other.getSecondOperand())) - return false; + if (other.getSecondOperand() != null) return false; + } else if (!getSecondOperand().equals(other.getSecondOperand())) return false; if (op == null) { - if (other.op != null) - return false; - } else if (!op.equals(other.op)) - return false; + if (other.op != null) return false; + } else if (!op.equals(other.op)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java index 49426ca2..7a35f38d 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java @@ -56,8 +56,7 @@ public void setChild(int index, Expression element) { */ public Expression substitute(Expression from, Expression to) { Expression e = clone(); - if (this.equals(from)) - e = to; + if (this.equals(from)) e = to; e.auxSubstitute(from, to); return e; } @@ -66,8 +65,7 @@ private void auxSubstitute(Expression from, Expression to) { if (hasChildren()) { for (int i = 0; i < children.size(); i++) { Expression exp = children.get(i); - if (exp.equals(from)) - setChild(i, to); + if (exp.equals(from)) setChild(i, to); exp.auxSubstitute(from, to); } } @@ -119,7 +117,9 @@ private void auxSubstituteState(Map subMap, String[] toChang Expression exp = children.get(i); if (exp instanceof FunctionInvocation) { FunctionInvocation fi = (FunctionInvocation) exp; - if (subMap.containsKey(fi.name) && fi.children.size() == 1 && fi.children.get(0) instanceof Var) { // object + if (subMap.containsKey(fi.name) + && fi.children.size() == 1 + && fi.children.get(0) instanceof Var) { // object // state Var v = (Var) fi.children.get(0); Expression sub = subMap.get(fi.name).clone(); @@ -167,8 +167,7 @@ private void auxChangeAlias(Map alias, Context ctx, Factory f) for (int i = 0; i < children.size(); i++) { if (children.get(i) instanceof AliasInvocation) { AliasInvocation ai = (AliasInvocation) children.get(i); - if (!alias.containsKey(ai.name)) - throw new Exception("Alias '" + ai.getName() + "' not found"); + if (!alias.containsKey(ai.name)) throw new Exception("Alias '" + ai.getName() + "' not found"); AliasDTO dto = alias.get(ai.name); Expression sub = dto.getExpression().clone(); if (ai.hasChildren()) @@ -181,7 +180,10 @@ private void auxChangeAlias(Map alias, Context ctx, Factory f) if (!checks) throw new Exception( "Type Mismatch: Cannot substitute " + varExp + ":" + varType + " by " + aliasExp - + ":" + TypeInfer.getType(ctx, f, aliasExp).get().getQualifiedName() + + ":" + + TypeInfer.getType(ctx, f, aliasExp) + .get() + .getQualifiedName() + " in alias '" + ai.name + "'"); sub = sub.substitute(varExp, aliasExp); diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/FunctionInvocation.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/FunctionInvocation.java index 9e93690e..2a520bd2 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/FunctionInvocation.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/FunctionInvocation.java @@ -11,8 +11,7 @@ public class FunctionInvocation extends Expression { public FunctionInvocation(String name, List args) { this.name = name; - for (Expression e : args) - addChild(e); + for (Expression e : args) addChild(e); } public String getName() { @@ -44,23 +43,19 @@ public String toString() { @Override public void getVariableNames(List toAdd) { - for (Expression e : getArgs()) - e.getVariableNames(toAdd); + for (Expression e : getArgs()) e.getVariableNames(toAdd); } @Override public void getStateInvocations(List toAdd, List all) { - if (!toAdd.contains(name) && all.contains(name)) - toAdd.add(name); - for (Expression e : getArgs()) - e.getStateInvocations(toAdd, all); + if (!toAdd.contains(name) && all.contains(name)) toAdd.add(name); + for (Expression e : getArgs()) e.getStateInvocations(toAdd, all); } @Override public Expression clone() { List le = new ArrayList<>(); - for (Expression e : getArgs()) - le.add(e.clone()); + for (Expression e : getArgs()) le.add(e.clone()); return new FunctionInvocation(name, le); } @@ -70,11 +65,9 @@ public boolean isBooleanTrue() { } public boolean argumentsEqual(List parameters) { - if (parameters.size() != getArgs().size()) - return false; + if (parameters.size() != getArgs().size()) return false; for (int i = 0; i < getArgs().size(); i++) { - if (!parameters.get(i).equals(getArgs().get(i))) - return false; + if (!parameters.get(i).equals(getArgs().get(i))) return false; } return true; } @@ -90,23 +83,16 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; FunctionInvocation other = (FunctionInvocation) obj; if (getArgs() == null) { - if (other.getArgs() != null) - return false; - } else if (!getArgs().equals(other.getArgs())) - return false; + if (other.getArgs() != null) return false; + } else if (!getArgs().equals(other.getArgs())) return false; if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; + if (other.name != null) return false; + } else if (!name.equals(other.name)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/GroupExpression.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/GroupExpression.java index f7d7dcf3..b09e794f 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/GroupExpression.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/GroupExpression.java @@ -47,24 +47,20 @@ public boolean isBooleanTrue() { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((getExpression() == null) ? 0 : getExpression().hashCode()); + result = prime * result + + ((getExpression() == null) ? 0 : getExpression().hashCode()); return result; } @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; GroupExpression other = (GroupExpression) obj; if (getExpression() == null) { - if (other.getExpression() != null) - return false; - } else if (!getExpression().equals(other.getExpression())) - return false; + if (other.getExpression() != null) return false; + } else if (!getExpression().equals(other.getExpression())) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Ite.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Ite.java index 4accd126..0198e95f 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Ite.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Ite.java @@ -26,12 +26,14 @@ public Expression getElse() { @Override public Expr eval(TranslatorToZ3 ctx) throws Exception { - return ctx.makeIte(getCondition().eval(ctx), getThen().eval(ctx), getElse().eval(ctx)); + return ctx.makeIte( + getCondition().eval(ctx), getThen().eval(ctx), getElse().eval(ctx)); } @Override public String toString() { - return getCondition().toString() + "?" + getThen().toString() + ":" + getElse().toString(); + return getCondition().toString() + "?" + getThen().toString() + ":" + + getElse().toString(); } @Override @@ -55,7 +57,9 @@ public Expression clone() { @Override public boolean isBooleanTrue() { - return getCondition().isBooleanTrue() && getThen().isBooleanTrue() && getElse().isBooleanTrue(); + return getCondition().isBooleanTrue() + && getThen().isBooleanTrue() + && getElse().isBooleanTrue(); } @Override @@ -70,28 +74,19 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; Ite other = (Ite) obj; if (getCondition() == null) { - if (other.getCondition() != null) - return false; - } else if (!getCondition().equals(other.getCondition())) - return false; + if (other.getCondition() != null) return false; + } else if (!getCondition().equals(other.getCondition())) return false; if (getElse() == null) { - if (other.getElse() != null) - return false; - } else if (!getElse().equals(other.getElse())) - return false; + if (other.getElse() != null) return false; + } else if (!getElse().equals(other.getElse())) return false; if (getThen() == null) { - if (other.getThen() != null) - return false; - } else if (!getThen().equals(other.getThen())) - return false; + if (other.getThen() != null) return false; + } else if (!getThen().equals(other.getThen())) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralBoolean.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralBoolean.java index 3d223697..47c89a27 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralBoolean.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralBoolean.java @@ -55,15 +55,11 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; LiteralBoolean other = (LiteralBoolean) obj; - if (value != other.value) - return false; + if (value != other.value) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralInt.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralInt.java index 6a4e97f1..7ff89237 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralInt.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralInt.java @@ -57,15 +57,11 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; LiteralInt other = (LiteralInt) obj; - if (value != other.value) - return false; + if (value != other.value) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralReal.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralReal.java index 2ddc8430..90cb69cc 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralReal.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralReal.java @@ -59,15 +59,11 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; LiteralReal other = (LiteralReal) obj; - if (Double.doubleToLongBits(value) != Double.doubleToLongBits(other.value)) - return false; + if (Double.doubleToLongBits(value) != Double.doubleToLongBits(other.value)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralString.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralString.java index eed7ec71..3223c1ca 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralString.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralString.java @@ -52,18 +52,13 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; LiteralString other = (LiteralString) obj; if (value == null) { - if (other.value != null) - return false; - } else if (!value.equals(other.value)) - return false; + if (other.value != null) return false; + } else if (!value.equals(other.value)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/UnaryExpression.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/UnaryExpression.java index df5eb888..6338f9d5 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/UnaryExpression.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/UnaryExpression.java @@ -24,10 +24,10 @@ public String getOp() { @Override public Expr eval(TranslatorToZ3 ctx) throws Exception { switch (op) { - case "-": - return ctx.makeMinus(getExpression().eval(ctx)); - case "!": - return ctx.mkNot(getExpression().eval(ctx)); + case "-": + return ctx.makeMinus(getExpression().eval(ctx)); + case "!": + return ctx.mkNot(getExpression().eval(ctx)); } return null; } @@ -61,30 +61,24 @@ public boolean isBooleanTrue() { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((getExpression() == null) ? 0 : getExpression().hashCode()); + result = prime * result + + ((getExpression() == null) ? 0 : getExpression().hashCode()); result = prime * result + ((op == null) ? 0 : op.hashCode()); return result; } @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; UnaryExpression other = (UnaryExpression) obj; if (getExpression() == null) { - if (other.getExpression() != null) - return false; - } else if (!getExpression().equals(other.getExpression())) - return false; + if (other.getExpression() != null) return false; + } else if (!getExpression().equals(other.getExpression())) return false; if (op == null) { - if (other.op != null) - return false; - } else if (!op.equals(other.op)) - return false; + if (other.op != null) return false; + } else if (!op.equals(other.op)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Var.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Var.java index 2e5c3b1d..3973fd22 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Var.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Var.java @@ -27,8 +27,7 @@ public String toString() { @Override public void getVariableNames(List toAdd) { - if (!toAdd.contains(name)) - toAdd.add(name); + if (!toAdd.contains(name)) toAdd.add(name); } @Override @@ -56,18 +55,13 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; Var other = (Var) obj; if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; + if (other.name != null) return false; + } else if (!name.equals(other.name)) return false; return true; } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/typing/TypeInfer.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/typing/TypeInfer.java index 8382dfd3..f5635d0b 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/typing/TypeInfer.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/typing/TypeInfer.java @@ -1,9 +1,6 @@ package liquidjava.rj_language.ast.typing; import java.util.Optional; - -import org.apache.commons.lang3.NotImplementedException; - import liquidjava.processor.context.Context; import liquidjava.processor.context.GhostFunction; import liquidjava.rj_language.ast.AliasInvocation; @@ -19,6 +16,7 @@ import liquidjava.rj_language.ast.UnaryExpression; import liquidjava.rj_language.ast.Var; import liquidjava.utils.Utils; +import org.apache.commons.lang3.NotImplementedException; import spoon.reflect.factory.Factory; import spoon.reflect.reference.CtTypeReference; @@ -37,58 +35,42 @@ public static boolean checkCompatibleType(String type, Expression e, Context ctx } public static Optional> getType(Context ctx, Factory factory, Expression e) { - if (e instanceof LiteralString) - return Optional.of(Utils.getType("String", factory)); - else if (e instanceof LiteralInt) - return Optional.of(Utils.getType("int", factory)); - else if (e instanceof LiteralReal) - return Optional.of(Utils.getType("double", factory)); - else if (e instanceof LiteralBoolean) - return boolType(factory); - else if (e instanceof Var) - return varType(ctx, factory, (Var) e); - else if (e instanceof UnaryExpression) - return unaryType(ctx, factory, (UnaryExpression) e); - else if (e instanceof Ite) - return boolType(factory); - else if (e instanceof BinaryExpression) - return binaryType(ctx, factory, (BinaryExpression) e); - else if (e instanceof GroupExpression) - return getType(ctx, factory, ((GroupExpression) e).getExpression()); - else if (e instanceof FunctionInvocation) - return functionType(ctx, factory, (FunctionInvocation) e); - else if (e instanceof AliasInvocation) - return boolType(factory); + if (e instanceof LiteralString) return Optional.of(Utils.getType("String", factory)); + else if (e instanceof LiteralInt) return Optional.of(Utils.getType("int", factory)); + else if (e instanceof LiteralReal) return Optional.of(Utils.getType("double", factory)); + else if (e instanceof LiteralBoolean) return boolType(factory); + else if (e instanceof Var) return varType(ctx, factory, (Var) e); + else if (e instanceof UnaryExpression) return unaryType(ctx, factory, (UnaryExpression) e); + else if (e instanceof Ite) return boolType(factory); + else if (e instanceof BinaryExpression) return binaryType(ctx, factory, (BinaryExpression) e); + else if (e instanceof GroupExpression) return getType(ctx, factory, ((GroupExpression) e).getExpression()); + else if (e instanceof FunctionInvocation) return functionType(ctx, factory, (FunctionInvocation) e); + else if (e instanceof AliasInvocation) return boolType(factory); return Optional.empty(); } private static Optional> varType(Context ctx, Factory factory, Var v) { String name = v.getName(); - if (!ctx.hasVariable(name)) - return Optional.empty(); + if (!ctx.hasVariable(name)) return Optional.empty(); return Optional.of(ctx.getVariableByName(name).getType()); } private static Optional> unaryType(Context ctx, Factory factory, UnaryExpression e) { - if (e.getOp().equals("!")) - return boolType(factory); + if (e.getOp().equals("!")) return boolType(factory); return getType(ctx, factory, e.getExpression()); } private static Optional> binaryType(Context ctx, Factory factory, BinaryExpression e) { - if (e.isLogicOperation()) - return boolType(factory); // &&, ||, --> + if (e.isLogicOperation()) return boolType(factory); // &&, ||, --> else if (e.isBooleanOperation()) { // >, >=, <, <=, ==, != return boolType(factory); } else if (e.isArithmeticOperation()) { Optional> t1 = getType(ctx, factory, e.getFirstOperand()); Optional> t2 = getType(ctx, factory, e.getSecondOperand()); - if (!t1.isPresent() || !t2.isPresent()) - return Optional.empty(); - if (t1.get().equals(t2.get())) - return t1; + if (!t1.isPresent() || !t2.isPresent()) return Optional.empty(); + if (t1.get().equals(t2.get())) return t1; // TODO if the types are different ex: double, int throw new NotImplementedException( "To implement in TypeInfer: Binary type, arithmetic with different arg types"); @@ -97,7 +79,9 @@ else if (e.isBooleanOperation()) { // >, >=, <, <=, ==, != } private static Optional> functionType(Context ctx, Factory factory, FunctionInvocation e) { - Optional gh = ctx.getGhosts().stream().filter(g -> g.getName().equals(e.getName())).findAny(); + Optional gh = ctx.getGhosts().stream() + .filter(g -> g.getName().equals(e.getName())) + .findAny(); return gh.map(i -> i.getReturnType()); } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RJErrorListener.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RJErrorListener.java index 28c0dc82..f48c3997 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RJErrorListener.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RJErrorListener.java @@ -23,15 +23,19 @@ public RJErrorListener() { } @Override - public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, - String msg, RecognitionException e) { + public void syntaxError( + Recognizer recognizer, + Object offendingSymbol, + int line, + int charPositionInLine, + String msg, + RecognitionException e) { // Hint for == instead of = String hint = null; if (e instanceof LexerNoViableAltException) { LexerNoViableAltException l = (LexerNoViableAltException) e; char c = l.getInputStream().toString().charAt(charPositionInLine); - if (c == '=') - hint = "Predicates must be compared with == instead of ="; + if (c == '=') hint = "Predicates must be compared with == instead of ="; } errors++; String ms = "Error in " + msg + ", in the position " + charPositionInLine; @@ -39,19 +43,22 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, int } @Override - public void reportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, boolean exact, - BitSet ambigAlts, ATNConfigSet configs) { - } + public void reportAmbiguity( + Parser recognizer, + DFA dfa, + int startIndex, + int stopIndex, + boolean exact, + BitSet ambigAlts, + ATNConfigSet configs) {} @Override - public void reportAttemptingFullContext(Parser recognizer, DFA dfa, int startIndex, int stopIndex, - BitSet conflictingAlts, ATNConfigSet configs) { - } + public void reportAttemptingFullContext( + Parser recognizer, DFA dfa, int startIndex, int stopIndex, BitSet conflictingAlts, ATNConfigSet configs) {} @Override - public void reportContextSensitivity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, int prediction, - ATNConfigSet configs) { - } + public void reportContextSensitivity( + Parser recognizer, DFA dfa, int startIndex, int stopIndex, int prediction, ATNConfigSet configs) {} public int getErrors() { return errors; @@ -61,8 +68,7 @@ public String getMessages() { StringBuilder sb = new StringBuilder(); String pl = errors == 1 ? "" : "s"; sb.append("Found ").append(errors).append(" error" + pl).append(", with the message" + pl + ":\n"); - for (String s : msgs) - sb.append("* " + s + "\n"); + for (String s : msgs) sb.append("* " + s + "\n"); return sb.toString(); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java index 55daed4a..28391f95 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java @@ -34,15 +34,13 @@ public static Expression createAST(String toParse) throws ParsingException { public static GhostDTO getGhostDeclaration(String s) throws ParsingException { ParseTree rc = compile(s); GhostDTO g = GhostVisitor.getGhostDecl(rc); - if (g == null) - throw new ParsingException(" The ghost should be in format ()"); + if (g == null) throw new ParsingException(" The ghost should be in format ()"); return g; } public static AliasDTO getAliasDeclaration(String s) throws ParsingException { Optional os = getErrors(s); - if (os.isPresent()) - throw new ParsingException(os.get()); + if (os.isPresent()) throw new ParsingException(os.get()); CodePointCharStream input; input = CharStreams.fromString(s); RJErrorListener err = new RJErrorListener(); @@ -63,8 +61,7 @@ public static AliasDTO getAliasDeclaration(String s) throws ParsingException { private static ParseTree compile(String toParse) throws ParsingException { Optional s = getErrors(toParse); - if (s.isPresent()) - throw new ParsingException(s.get()); + if (s.isPresent()) throw new ParsingException(s.get()); CodePointCharStream input = CharStreams.fromString(toParse); RJErrorListener err = new RJErrorListener(); @@ -104,8 +101,7 @@ private static Optional getErrors(String toParse) { parser.removeErrorListeners(); parser.addErrorListener(err); parser.start(); // all consumed - if (err.getErrors() > 0) - return Optional.of(err.getMessages()); + if (err.getErrors() > 0) return Optional.of(err.getMessages()); return Optional.empty(); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java index f0937af2..218c4508 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java @@ -75,7 +75,6 @@ private void auxGetArgsDecl(ArgDeclIDContext argDeclID, List(type, name)); - if (argDeclID.argDeclID() != null) - auxGetArgsDecl(argDeclID.argDeclID(), l); + if (argDeclID.argDeclID() != null) auxGetArgsDecl(argDeclID.argDeclID(), l); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/CreateASTVisitor.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/CreateASTVisitor.java index a66d42b6..45d03b32 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/CreateASTVisitor.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/CreateASTVisitor.java @@ -16,7 +16,6 @@ import liquidjava.rj_language.ast.Var; import org.antlr.v4.runtime.tree.ParseTree; import org.apache.commons.lang3.NotImplementedException; - import rj.grammar.RJParser.AliasCallContext; import rj.grammar.RJParser.ArgsContext; import rj.grammar.RJParser.ExpBoolContext; @@ -57,59 +56,52 @@ public class CreateASTVisitor { public static Expression create(ParseTree rc) { - if (rc instanceof ProgContext) - return progCreate((ProgContext) rc); - else if (rc instanceof StartContext) - return startCreate(rc); - else if (rc instanceof PredContext) - return predCreate(rc); - else if (rc instanceof ExpContext) - return expCreate(rc); - else if (rc instanceof OperandContext) - return operandCreate(rc); - else if (rc instanceof LiteralExpressionContext) - return literalExpressionCreate(rc); - else if (rc instanceof FunctionCallContext) - return functionCallCreate((FunctionCallContext) rc); - else if (rc instanceof LiteralContext) - return literalCreate((LiteralContext) rc); + if (rc instanceof ProgContext) return progCreate((ProgContext) rc); + else if (rc instanceof StartContext) return startCreate(rc); + else if (rc instanceof PredContext) return predCreate(rc); + else if (rc instanceof ExpContext) return expCreate(rc); + else if (rc instanceof OperandContext) return operandCreate(rc); + else if (rc instanceof LiteralExpressionContext) return literalExpressionCreate(rc); + else if (rc instanceof FunctionCallContext) return functionCallCreate((FunctionCallContext) rc); + else if (rc instanceof LiteralContext) return literalCreate((LiteralContext) rc); return null; } private static Expression progCreate(ProgContext rc) { - if (rc.start() != null) - return create(rc.start()); + if (rc.start() != null) return create(rc.start()); return null; } private static Expression startCreate(ParseTree rc) { - if (rc instanceof StartPredContext) - return create(((StartPredContext) rc).pred()); + if (rc instanceof StartPredContext) return create(((StartPredContext) rc).pred()); // alias and ghost do not have evaluation return null; } private static Expression predCreate(ParseTree rc) { - if (rc instanceof PredGroupContext) - return new GroupExpression(create(((PredGroupContext) rc).pred())); + if (rc instanceof PredGroupContext) return new GroupExpression(create(((PredGroupContext) rc).pred())); else if (rc instanceof PredNegateContext) return new UnaryExpression("!", create(((PredNegateContext) rc).pred())); else if (rc instanceof PredLogicContext) - return new BinaryExpression(create(((PredLogicContext) rc).pred(0)), - ((PredLogicContext) rc).LOGOP().getText(), create(((PredLogicContext) rc).pred(1))); + return new BinaryExpression( + create(((PredLogicContext) rc).pred(0)), + ((PredLogicContext) rc).LOGOP().getText(), + create(((PredLogicContext) rc).pred(1))); else if (rc instanceof IteContext) - return new Ite(create(((IteContext) rc).pred(0)), create(((IteContext) rc).pred(1)), + return new Ite( + create(((IteContext) rc).pred(0)), + create(((IteContext) rc).pred(1)), create(((IteContext) rc).pred(2))); - else - return create(((PredExpContext) rc).exp()); + else return create(((PredExpContext) rc).exp()); } private static Expression expCreate(ParseTree rc) { - if (rc instanceof ExpGroupContext) - return new GroupExpression(create(((ExpGroupContext) rc).exp())); + if (rc instanceof ExpGroupContext) return new GroupExpression(create(((ExpGroupContext) rc).exp())); else if (rc instanceof ExpBoolContext) { - return new BinaryExpression(create(((ExpBoolContext) rc).exp(0)), ((ExpBoolContext) rc).BOOLOP().getText(), + return new BinaryExpression( + create(((ExpBoolContext) rc).exp(0)), + ((ExpBoolContext) rc).BOOLOP().getText(), create(((ExpBoolContext) rc).exp(1))); } else { ExpOperandContext eoc = (ExpOperandContext) rc; @@ -118,20 +110,18 @@ else if (rc instanceof ExpBoolContext) { } private static Expression operandCreate(ParseTree rc) { - if (rc instanceof OpLiteralContext) - return create(((OpLiteralContext) rc).literalExpression()); + if (rc instanceof OpLiteralContext) return create(((OpLiteralContext) rc).literalExpression()); else if (rc instanceof OpArithContext) - return new BinaryExpression(create(((OpArithContext) rc).operand(0)), - ((OpArithContext) rc).ARITHOP().getText(), create(((OpArithContext) rc).operand(1))); + return new BinaryExpression( + create(((OpArithContext) rc).operand(0)), + ((OpArithContext) rc).ARITHOP().getText(), + create(((OpArithContext) rc).operand(1))); else if (rc instanceof OpSubContext) - return new BinaryExpression(create(((OpSubContext) rc).operand(0)), "-", - create(((OpSubContext) rc).operand(1))); - else if (rc instanceof OpMinusContext) - return new UnaryExpression("-", create(((OpMinusContext) rc).operand())); - else if (rc instanceof OpNotContext) - return new UnaryExpression("!", create(((OpNotContext) rc).operand())); - else if (rc instanceof OpGroupContext) - return new GroupExpression(create(((OpGroupContext) rc).operand())); + return new BinaryExpression( + create(((OpSubContext) rc).operand(0)), "-", create(((OpSubContext) rc).operand(1))); + else if (rc instanceof OpMinusContext) return new UnaryExpression("-", create(((OpMinusContext) rc).operand())); + else if (rc instanceof OpNotContext) return new UnaryExpression("!", create(((OpNotContext) rc).operand())); + else if (rc instanceof OpGroupContext) return new GroupExpression(create(((OpGroupContext) rc).operand())); assert false; return null; } @@ -139,8 +129,7 @@ else if (rc instanceof OpGroupContext) private static Expression literalExpressionCreate(ParseTree rc) { if (rc instanceof LitGroupContext) return new GroupExpression(create(((LitGroupContext) rc).literalExpression())); - else if (rc instanceof LitContext) - return create(((LitContext) rc).literal()); + else if (rc instanceof LitContext) return create(((LitContext) rc).literal()); else if (rc instanceof VarContext) { return new Var(((VarContext) rc).ID().getText()); } else if (rc instanceof TargetInvocationContext) { diff --git a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/GhostVisitor.java b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/GhostVisitor.java index ac4c5495..5dcb259b 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/GhostVisitor.java +++ b/liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/GhostVisitor.java @@ -18,22 +18,19 @@ public static GhostDTO getGhostDecl(ParseTree rc) { String name = gc.ID().getText(); List> args = getArgsDecl(gc.argDecl()); List ls = args.stream().map(m -> m.getFirst()).collect(Collectors.toList()); - if (ls == null) - ls = new ArrayList<>(); + if (ls == null) ls = new ArrayList<>(); return new GhostDTO(name, ls, type); // return new Triple>>(type, name, args); } else if (rc.getChildCount() > 0) { int i = rc.getChildCount(); - if (i > 0) - return getGhostDecl(rc.getChild(0)); + if (i > 0) return getGhostDecl(rc.getChild(0)); } return null; } private static List> getArgsDecl(ArgDeclContext argDecl) { List> l = new ArrayList>(); - if (argDecl != null) - auxGetArgsDecl(argDecl, l); + if (argDecl != null) auxGetArgsDecl(argDecl, l); return l; } @@ -41,7 +38,6 @@ private static void auxGetArgsDecl(ArgDeclContext argDecl, List(type, name)); - if (argDecl.argDecl() != null) - auxGetArgsDecl(argDecl.argDecl(), l); + if (argDecl.argDecl() != null) auxGetArgsDecl(argDecl.argDecl(), l); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/smt/SMTEvaluator.java b/liquidjava-verifier/src/main/java/liquidjava/smt/SMTEvaluator.java index 621a2420..9a4f92fd 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/smt/SMTEvaluator.java +++ b/liquidjava-verifier/src/main/java/liquidjava/smt/SMTEvaluator.java @@ -40,8 +40,7 @@ public void verifySubtype(Predicate subRef, Predicate supRef, Context c) if (e.getLocalizedMessage().substring(0, 24).equals("Wrong number of argument") || e.getLocalizedMessage().substring(0, 13).equals("Sort mismatch")) throw new GhostFunctionError(e.getLocalizedMessage()); - else - throw new Z3Exception(e.getLocalizedMessage()); + else throw new Z3Exception(e.getLocalizedMessage()); } } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorContextToZ3.java b/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorContextToZ3.java index 2cf2ca7a..7480bdbb 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorContextToZ3.java +++ b/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorContextToZ3.java @@ -17,23 +17,21 @@ public class TranslatorContextToZ3 { - static void translateVariables(Context z3, Map> ctx, - Map> varTranslation) { + static void translateVariables( + Context z3, Map> ctx, Map> varTranslation) { - for (String name : ctx.keySet()) - varTranslation.put(name, getExpr(z3, name, ctx.get(name))); + for (String name : ctx.keySet()) varTranslation.put(name, getExpr(z3, name, ctx.get(name))); varTranslation.put("true", z3.mkBool(true)); varTranslation.put("false", z3.mkBool(false)); } - public static void storeVariablesSubtypes(Context z3, List variables, - Map>> varSuperTypes) { + public static void storeVariablesSubtypes( + Context z3, List variables, Map>> varSuperTypes) { for (RefinedVariable v : variables) { if (!v.getSuperTypes().isEmpty()) { ArrayList> a = new ArrayList<>(); - for (CtTypeReference ctr : v.getSuperTypes()) - a.add(getExpr(z3, v.getName(), ctr)); + for (CtTypeReference ctr : v.getSuperTypes()) a.add(getExpr(z3, v.getName(), ctr)); varSuperTypes.put(v.getName(), a); } } @@ -41,14 +39,10 @@ public static void storeVariablesSubtypes(Context z3, List vari private static Expr getExpr(Context z3, String name, CtTypeReference type) { String typeName = type.getQualifiedName(); - if (typeName.contentEquals("int")) - return z3.mkIntConst(name); - else if (typeName.contentEquals("short")) - return z3.mkIntConst(name); - else if (typeName.contentEquals("boolean")) - return z3.mkBoolConst(name); - else if (typeName.contentEquals("long")) - return z3.mkRealConst(name); + if (typeName.contentEquals("int")) return z3.mkIntConst(name); + else if (typeName.contentEquals("short")) return z3.mkIntConst(name); + else if (typeName.contentEquals("boolean")) return z3.mkBoolConst(name); + else if (typeName.contentEquals("long")) return z3.mkRealConst(name); else if (typeName.contentEquals("float")) { return (FPExpr) z3.mkConst(name, z3.mkFPSort64()); } else if (typeName.contentEquals("double")) { @@ -68,8 +62,8 @@ static void addAlias(Context z3, List alias, Map ghosts, - Map> funcTranslation) { + public static void addGhostFunctions( + Context z3, List ghosts, Map> funcTranslation) { addBuiltinFunctions(z3, funcTranslation); if (!ghosts.isEmpty()) { for (GhostFunction gh : ghosts) { @@ -79,12 +73,15 @@ public static void addGhostFunctions(Context z3, List ghosts, } private static void addBuiltinFunctions(Context z3, Map> funcTranslation) { - funcTranslation.put("length", z3.mkFuncDecl("length", getSort(z3, "int[]"), getSort(z3, "int"))); // ERRRRRRRRRRRRO!!!!!!!!!!!!! + funcTranslation.put( + "length", + z3.mkFuncDecl("length", getSort(z3, "int[]"), getSort(z3, "int"))); // ERRRRRRRRRRRRO!!!!!!!!!!!!! // System.out.println("\nWorks only for int[] now! Change in future. Ignore this // message, it is a glorified // todo"); // TODO add built-in function - Sort[] s = Stream.of(getSort(z3, "int[]"), getSort(z3, "int"), getSort(z3, "int")).toArray(Sort[]::new); + Sort[] s = Stream.of(getSort(z3, "int[]"), getSort(z3, "int"), getSort(z3, "int")) + .toArray(Sort[]::new); funcTranslation.put("addToIndex", z3.mkFuncDecl("addToIndex", s, getSort(z3, "void"))); s = Stream.of(getSort(z3, "int[]"), getSort(z3, "int")).toArray(Sort[]::new); @@ -93,30 +90,30 @@ private static void addBuiltinFunctions(Context z3, Map> fun static Sort getSort(Context z3, String sort) { switch (sort) { - case "int": - return z3.getIntSort(); - case "boolean": - return z3.getBoolSort(); - case "long": - return z3.getRealSort(); - case "float": - return z3.mkFPSort32(); - case "double": - return z3.mkFPSortDouble(); - case "int[]": - return z3.mkArraySort(z3.mkIntSort(), z3.mkIntSort()); - case "String": - return z3.getStringSort(); - case "void": - return z3.mkUninterpretedSort("void"); - // case "List":return z3.mkListSort(name, elemSort) - default: - return z3.mkUninterpretedSort(sort); + case "int": + return z3.getIntSort(); + case "boolean": + return z3.getBoolSort(); + case "long": + return z3.getRealSort(); + case "float": + return z3.mkFPSort32(); + case "double": + return z3.mkFPSortDouble(); + case "int[]": + return z3.mkArraySort(z3.mkIntSort(), z3.mkIntSort()); + case "String": + return z3.getStringSort(); + case "void": + return z3.mkUninterpretedSort("void"); + // case "List":return z3.mkListSort(name, elemSort) + default: + return z3.mkUninterpretedSort(sort); } } - public static void addGhostStates(Context z3, List ghostState, - Map> funcTranslation) { + public static void addGhostStates( + Context z3, List ghostState, Map> funcTranslation) { for (GhostState g : ghostState) { addGhostFunction(z3, g, funcTranslation); // if(g.getRefinement() != null) @@ -127,7 +124,10 @@ public static void addGhostStates(Context z3, List ghostState, private static void addGhostFunction(Context z3, GhostFunction gh, Map> funcTranslation) { List> paramTypes = gh.getParametersTypes(); Sort ret = getSort(z3, gh.getReturnType().toString()); - Sort[] d = paramTypes.stream().map(t -> t.toString()).map(t -> getSort(z3, t)).toArray(Sort[]::new); + Sort[] d = paramTypes.stream() + .map(t -> t.toString()) + .map(t -> getSort(z3, t)) + .toArray(Sort[]::new); funcTranslation.put(gh.getName(), z3.mkFuncDecl(gh.getName(), d, ret)); } } diff --git a/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorToZ3.java b/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorToZ3.java index 63016591..69a727d7 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorToZ3.java +++ b/liquidjava-verifier/src/main/java/liquidjava/smt/TranslatorToZ3.java @@ -16,10 +16,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - -import org.apache.commons.lang3.NotImplementedException; - import liquidjava.processor.context.AliasWrapper; +import org.apache.commons.lang3.NotImplementedException; public class TranslatorToZ3 implements AutoCloseable { @@ -73,13 +71,10 @@ public Expr makeBooleanLiteral(boolean value) { } private Expr getVariableTranslation(String name) throws Exception { - if (!varTranslation.containsKey(name)) - throw new NotFoundError("Variable '" + name.toString() + "' not found"); + if (!varTranslation.containsKey(name)) throw new NotFoundError("Variable '" + name.toString() + "' not found"); Expr e = varTranslation.get(name); - if (e == null) - e = varTranslation.get(String.format("this#%s", name)); - if (e == null) - throw new SyntaxException("Unknown variable:" + name); + if (e == null) e = varTranslation.get(String.format("this#%s", name)); + if (e == null) throw new SyntaxException("Unknown variable:" + name); return e; } @@ -88,13 +83,10 @@ public Expr makeVariable(String name) throws Exception { } public Expr makeFunctionInvocation(String name, Expr[] params) throws Exception { - if (name.equals("addToIndex")) - return makeStore(name, params); - if (name.equals("getFromIndex")) - return makeSelect(name, params); + if (name.equals("addToIndex")) return makeStore(name, params); + if (name.equals("getFromIndex")) return makeSelect(name, params); - if (!funcTranslation.containsKey(name)) - throw new NotFoundError("Function '" + name + "' not found"); + if (!funcTranslation.containsKey(name)) throw new NotFoundError("Function '" + name + "' not found"); FuncDecl fd = funcTranslation.get(name); Sort[] s = fd.getDomain(); @@ -103,10 +95,7 @@ public Expr makeFunctionInvocation(String name, Expr[] params) throws Exce if (!s[i].equals(param.getSort())) { // Look if the function type is a supertype of this List> le = varSuperTypes.get(param.toString().replace("|", "")); - if (le != null) - for (Expr e : le) - if (e.getSort().equals(s[i])) - params[i] = e; + if (le != null) for (Expr e : le) if (e.getSort().equals(s[i])) params[i] = e; } // System.out.println("Expected sort"+s[i]+"; Final sort->" // +params[i].toString() +":"+ @@ -116,14 +105,13 @@ public Expr makeFunctionInvocation(String name, Expr[] params) throws Exce return z3.mkApp(fd, params); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) private Expr makeSelect(String name, Expr[] params) { - if (params.length == 2 && params[0] instanceof ArrayExpr) - return z3.mkSelect((ArrayExpr) params[0], params[1]); + if (params.length == 2 && params[0] instanceof ArrayExpr) return z3.mkSelect((ArrayExpr) params[0], params[1]); return null; } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) private Expr makeStore(String name, Expr[] params) { if (params.length == 3 && params[0] instanceof ArrayExpr) return z3.mkStore((ArrayExpr) params[0], params[1], params[2]); @@ -132,40 +120,35 @@ private Expr makeStore(String name, Expr[] params) { // #####################Boolean Operations##################### public Expr makeEquals(Expr e1, Expr e2) { - if (e1 instanceof FPExpr || e2 instanceof FPExpr) - return z3.mkFPEq(toFP(e1), toFP(e2)); + if (e1 instanceof FPExpr || e2 instanceof FPExpr) return z3.mkFPEq(toFP(e1), toFP(e2)); return z3.mkEq(e1, e2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeLt(Expr e1, Expr e2) { - if (e1 instanceof FPExpr || e2 instanceof FPExpr) - return z3.mkFPLt(toFP(e1), toFP(e2)); + if (e1 instanceof FPExpr || e2 instanceof FPExpr) return z3.mkFPLt(toFP(e1), toFP(e2)); return z3.mkLt((ArithExpr) e1, (ArithExpr) e2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeLtEq(Expr e1, Expr e2) { - if (e1 instanceof FPExpr || e2 instanceof FPExpr) - return z3.mkFPLEq(toFP(e1), toFP(e2)); + if (e1 instanceof FPExpr || e2 instanceof FPExpr) return z3.mkFPLEq(toFP(e1), toFP(e2)); return z3.mkLe((ArithExpr) e1, (ArithExpr) e2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeGt(Expr e1, Expr e2) { - if (e1 instanceof FPExpr || e2 instanceof FPExpr) - return z3.mkFPGt(toFP(e1), toFP(e2)); + if (e1 instanceof FPExpr || e2 instanceof FPExpr) return z3.mkFPGt(toFP(e1), toFP(e2)); return z3.mkGt((ArithExpr) e1, (ArithExpr) e2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeGtEq(Expr e1, Expr e2) { - if (e1 instanceof FPExpr || e2 instanceof FPExpr) - return z3.mkFPGEq(toFP(e1), toFP(e2)); + if (e1 instanceof FPExpr || e2 instanceof FPExpr) return z3.mkFPGEq(toFP(e1), toFP(e2)); return z3.mkGe((ArithExpr) e1, (ArithExpr) e2); } @@ -196,15 +179,14 @@ public Expr makeOr(Expr eval, Expr eval2) { // } // ##################### Unary Operations ##################### - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeMinus(Expr eval) { - if (eval instanceof FPExpr) - return z3.mkFPNeg((FPExpr) eval); + if (eval instanceof FPExpr) return z3.mkFPNeg((FPExpr) eval); return z3.mkUnaryMinus((ArithExpr) eval); } // #####################Arithmetic Operations##################### - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeAdd(Expr eval, Expr eval2) { if (eval instanceof FPExpr || eval2 instanceof FPExpr) return z3.mkFPAdd(z3.mkFPRoundNearestTiesToEven(), toFP(eval), toFP(eval2)); @@ -212,7 +194,7 @@ public Expr makeAdd(Expr eval, Expr eval2) { return z3.mkAdd((ArithExpr) eval, (ArithExpr) eval2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeSub(Expr eval, Expr eval2) { if (eval instanceof FPExpr || eval2 instanceof FPExpr) return z3.mkFPSub(z3.mkFPRoundNearestTiesToEven(), toFP(eval), toFP(eval2)); @@ -220,7 +202,7 @@ public Expr makeSub(Expr eval, Expr eval2) { return z3.mkSub((ArithExpr) eval, (ArithExpr) eval2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeMul(Expr eval, Expr eval2) { if (eval instanceof FPExpr || eval2 instanceof FPExpr) return z3.mkFPMul(z3.mkFPRoundNearestTiesToEven(), toFP(eval), toFP(eval2)); @@ -228,7 +210,7 @@ public Expr makeMul(Expr eval, Expr eval2) { return z3.mkMul((ArithExpr) eval, (ArithExpr) eval2); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public Expr makeDiv(Expr eval, Expr eval2) { if (eval instanceof FPExpr || eval2 instanceof FPExpr) return z3.mkFPDiv(z3.mkFPRoundNearestTiesToEven(), toFP(eval), toFP(eval2)); @@ -237,8 +219,7 @@ public Expr makeDiv(Expr eval, Expr eval2) { } public Expr makeMod(Expr eval, Expr eval2) { - if (eval instanceof FPExpr || eval2 instanceof FPExpr) - return z3.mkFPRem(toFP(eval), toFP(eval2)); + if (eval instanceof FPExpr || eval2 instanceof FPExpr) return z3.mkFPRem(toFP(eval), toFP(eval2)); return z3.mkMod((IntExpr) eval, (IntExpr) eval2); } @@ -246,8 +227,7 @@ private FPExpr toFP(Expr e) { FPExpr f; if (e instanceof FPExpr) { f = (FPExpr) e; - } else if (e instanceof IntNum) - f = z3.mkFP(((IntNum) e).getInt(), z3.mkFPSort64()); + } else if (e instanceof IntNum) f = z3.mkFP(((IntNum) e).getInt(), z3.mkFPSort64()); else if (e instanceof IntExpr) { IntExpr ee = (IntExpr) e; RealExpr re = z3.mkInt2Real(ee); @@ -261,8 +241,7 @@ else if (e instanceof IntExpr) { } public Expr makeIte(Expr c, Expr t, Expr e) { - if (c instanceof BoolExpr) - return z3.mkITE((BoolExpr) c, t, e); + if (c instanceof BoolExpr) return z3.mkITE((BoolExpr) c, t, e); throw new RuntimeException("Condition is not a boolean expression"); } diff --git a/liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java b/liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java index 80a3ee43..a920c4f2 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java +++ b/liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java @@ -37,21 +37,21 @@ public class Utils { public static CtTypeReference getType(String type, Factory factory) { // TODO complete switch (type) { - case INT: - return factory.Type().INTEGER_PRIMITIVE; - case DOUBLE: - return factory.Type().DOUBLE_PRIMITIVE; - case BOOLEAN: - return factory.Type().BOOLEAN_PRIMITIVE; - case INT_LIST: - return factory.createArrayReference(getType("int", factory)); - case STRING: - return factory.Type().STRING; - case LIST: - return factory.Type().LIST; - default: - // return factory.Type().OBJECT; - return factory.createReference(type); + case INT: + return factory.Type().INTEGER_PRIMITIVE; + case DOUBLE: + return factory.Type().DOUBLE_PRIMITIVE; + case BOOLEAN: + return factory.Type().BOOLEAN_PRIMITIVE; + case INT_LIST: + return factory.createArrayReference(getType("int", factory)); + case STRING: + return factory.Type().STRING; + case LIST: + return factory.Type().LIST; + default: + // return factory.Type().OBJECT; + return factory.createReference(type); } } } diff --git a/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java b/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java index b6bea536..b63d20ed 100644 --- a/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java +++ b/liquidjava-verifier/src/test/java/liquidjava/api/tests/TestExamples.java @@ -7,12 +7,10 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; - -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - import liquidjava.api.CommandLineLauncher; import liquidjava.errors.ErrorEmitter; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class TestExamples { @@ -29,7 +27,8 @@ public void testFile(final Path filePath) { String fileName = filePath.getFileName().toString(); // 1. Run the verifier on the file or package - ErrorEmitter errorEmitter = CommandLineLauncher.launchTest(filePath.toAbsolutePath().toString()); + ErrorEmitter errorEmitter = + CommandLineLauncher.launchTest(filePath.toAbsolutePath().toString()); // 2. Check if the file is correct or contains an error if ((fileName.startsWith("Correct") && errorEmitter.foundError()) @@ -55,16 +54,18 @@ public void testFile(final Path filePath) { * if an I/O error occurs or the path does not exist */ private static Stream fileNameSource() throws IOException { - return Files.find(Paths.get("../liquidjava-example/src/main/java/testSuite/"), Integer.MAX_VALUE, + return Files.find( + Paths.get("../liquidjava-example/src/main/java/testSuite/"), + Integer.MAX_VALUE, (filePath, fileAttr) -> { String name = filePath.getFileName().toString(); // 1. Files that start with "Correct" or "Error" - boolean isFileStartingWithCorrectOrError = fileAttr.isRegularFile() - && (name.startsWith("Correct") || name.startsWith("Error")); + boolean isFileStartingWithCorrectOrError = + fileAttr.isRegularFile() && (name.startsWith("Correct") || name.startsWith("Error")); // 2. Folders (directories) that contain "correct" or "error" - boolean isDirectoryWithCorrectOrError = fileAttr.isDirectory() - && (name.contains("correct") || name.contains("error")); + boolean isDirectoryWithCorrectOrError = + fileAttr.isDirectory() && (name.contains("correct") || name.contains("error")); // Return true if either condition matches return isFileStartingWithCorrectOrError || isDirectoryWithCorrectOrError; From e0edc03a38646988b840a618068f703cf11a0624 Mon Sep 17 00:00:00 2001 From: Guilherme Espada Date: Thu, 12 Dec 2024 14:05:07 +0000 Subject: [PATCH 4/4] [chore] blame-ignore previous formatting commit --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..9e1e781a --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +012a81397062e33d44d9dbc5974c44483ca4763b