From dc122b6877ca6affd779e0c7ceb8af081f6e4979 Mon Sep 17 00:00:00 2001
From: Michael Leuschel <leuschel@uni-duesseldorf.de>
Date: Thu, 3 Feb 2022 14:39:26 +0100
Subject: [PATCH] add debugging feedback

Signed-off-by: Michael Leuschel <leuschel@uni-duesseldorf.de>
---
 .../java/de/tla2b/analysis/SpecAnalyser.java  | 55 +++++++++++++------
 1 file changed, 38 insertions(+), 17 deletions(-)

diff --git a/src/main/java/de/tla2b/analysis/SpecAnalyser.java b/src/main/java/de/tla2b/analysis/SpecAnalyser.java
index 027d745..cd3b7a1 100644
--- a/src/main/java/de/tla2b/analysis/SpecAnalyser.java
+++ b/src/main/java/de/tla2b/analysis/SpecAnalyser.java
@@ -97,43 +97,47 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 		}
 		
 		if (definitions.containsKey("Spec")) {
-			specAnalyser.spec = definitions.get("Spec");
+			specAnalyser.spec = definitions.get("Spec"); ClausefDetected("Spec","INITIALISATION+OPERATIONS");
 		} else if (definitions.containsKey("SPECIFICATION")) {
-			specAnalyser.spec = definitions.get("SPECIFICATION");
+			specAnalyser.spec = definitions.get("SPECIFICATION"); ClausefDetected("SPECIFICATION","INITIALISATION+OPERATIONS");
 		} else if (definitions.containsKey("SPEC")) {
-			specAnalyser.spec = definitions.get("SPEC");
+			specAnalyser.spec = definitions.get("SPEC"); ClausefDetected("SPEC","INITIALISATION+OPERATIONS");
 		}
 		
 		if (definitions.containsKey("Init")) {
-			specAnalyser.init = definitions.get("Init");
+			specAnalyser.init = definitions.get("Init"); ClausefDetected("Init","INITIALISATION");
 		} else if (definitions.containsKey("INIT")) {
-			specAnalyser.init = definitions.get("INIT");
+			specAnalyser.init = definitions.get("INIT"); ClausefDetected("INIT","INITIALISATION");
 		} else if (definitions.containsKey("Initialisation")) {
-			specAnalyser.init = definitions.get("Initialisation");
+			specAnalyser.init = definitions.get("Initialisation"); ClausefDetected("Initialisation","INITIALISATION");
+		} else if (definitions.containsKey("INITIALISATION")) {
+			specAnalyser.init = definitions.get("INITIALISATION"); ClausefDetected("INITIALISATION","INITIALISATION");
 		}
 		
 		if (definitions.containsKey("Next")) {
-			specAnalyser.next = definitions.get("Next");
+			specAnalyser.next = definitions.get("Next"); ClausefDetected("Next","OPERATIONS");
 		} else if (definitions.containsKey("NEXT")) {
-			specAnalyser.next = definitions.get("NEXT");
+			specAnalyser.next = definitions.get("NEXT"); ClausefDetected("NEXT","OPERATIONS");
 		}
 		
 		if (definitions.containsKey("Inv")) {
-			specAnalyser.invariants.add(definitions.get("Inv"));
+			specAnalyser.invariants.add(definitions.get("Inv")); ClausefDetected("Inv","INVARIANTS");
 		} else if (definitions.containsKey("INVARIANTS")) {
-			specAnalyser.invariants.add(definitions.get("INVARIANTS"));
+			specAnalyser.invariants.add(definitions.get("INVARIANTS")); ClausefDetected("INVARIANTS","INVARIANTS");
 		} else if (definitions.containsKey("INVARIANT")) {
-			specAnalyser.invariants.add(definitions.get("INVARIANT"));
+			specAnalyser.invariants.add(definitions.get("INVARIANT")); ClausefDetected("INVARIANT","INVARIANTS");
 		} else if (definitions.containsKey("INV")) {
-			specAnalyser.invariants.add(definitions.get("INV"));
+			specAnalyser.invariants.add(definitions.get("INV")); ClausefDetected("INV","INVARIANTS");
 		} else if (definitions.containsKey("Invariant")) {
-			specAnalyser.invariants.add(definitions.get("Invariant"));
+			specAnalyser.invariants.add(definitions.get("Invariant")); ClausefDetected("Invariant","INVARIANTS");
 		} else if (definitions.containsKey("Invariants")) {
-			specAnalyser.invariants.add(definitions.get("Invariants"));
+			specAnalyser.invariants.add(definitions.get("Invariants")); ClausefDetected("Invariants","INVARIANTS");
 		} else if (definitions.containsKey("TypeInv")) {
-			specAnalyser.invariants.add(definitions.get("TypeInv"));
+			specAnalyser.invariants.add(definitions.get("TypeInv")); ClausefDetected("TypeInv","INVARIANTS");
 		} else if (definitions.containsKey("TypeOK")) {
-			specAnalyser.invariants.add(definitions.get("TypeOK"));
+			specAnalyser.invariants.add(definitions.get("TypeOK")); ClausefDetected("TypeOK","INVARIANTS");
+		}else if (definitions.containsKey("IndInv")) {
+			specAnalyser.invariants.add(definitions.get("IndInv")); ClausefDetected("IndInv","INVARIANTS");
 		}
 		// TODO are constant in the right order
 
@@ -141,6 +145,15 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 
 		return specAnalyser;
 	}
+	
+	public static void ClausefDetected(String Name, String Clause) {
+	   // TODO: use -verbose OPTION from command line
+	   System.out.println("Detected TLA+ Default Definition "+Name+" for Clause: "+Clause);
+	}
+	public static void DebugMsg(String Msg) {
+	   // TODO: use -verbose OPTION from command line
+	   System.out.println(Msg);
+	}
 
 	public void start()
 			throws SemanticErrorException, FrontEndException, ConfigFileErrorException, NotImplementedException {
@@ -161,14 +174,17 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 				if (opDefNode.getKind() == UserDefinedOpKind && !BBuiltInOPs.contains(opDefNode.getName())) {
 					int i = invariants.indexOf(inv);
 					invariants.set(i, opDefNode);
+					DebugMsg("Adding invariant "+i);
 				}
 			} catch (ClassCastException e) {
 			}
 		}
 
+	    DebugMsg("Detecting OPERATIONS from disjunctions");
 		OperationsFinder operationsFinder = new OperationsFinder(this);
 		bOperations = operationsFinder.getBOperations();
 
+	    DebugMsg("Finding used definitions");
 		UsedDefinitionsFinder definitionFinder = new UsedDefinitionsFinder(this);
 		this.usedDefinitions = definitionFinder.getUsedDefinitions();
 
@@ -176,6 +192,7 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 		this.bDefinitionsSet = bDefinitionFinder.getBDefinitionsSet();
 		// usedDefinitions.addAll(bDefinitionsSet);
 
+	    DebugMsg("Computing variable declarations");
 		// test whether there is a init predicate if there is a variable
 		if (moduleNode.getVariableDecls().length > 0 && inits == null) {
 			throw new SemanticErrorException("No initial predicate is defined.");
@@ -194,9 +211,11 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 		for (OpDeclNode var : moduleNode.getVariableDecls()) {
 			namingHashTable.put(var.getName().toString(), var);
 		}
+	    DebugMsg("Number of variables detected: " + moduleNode.getVariableDecls().length);
 		for (OpDeclNode con : moduleNode.getConstantDecls()) {
 			namingHashTable.put(con.getName().toString(), con);
 		}
+	    DebugMsg("Number of constants detected: " + moduleNode.getConstantDecls().length);
 		for (OpDefNode def : usedDefinitions) {
 			namingHashTable.put(def.getName().toString(), def);
 		}
@@ -205,25 +224,27 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, ToolGlobal
 
 	private void evalInit() {
 		if (init != null) {
+            System.out.println("Using TLA+ Init definition to determine B INITIALISATION");
 			inits.add(init.getBody());
 		}
 	}
 
 	private void evalNext() throws FrontEndException {
 		if (next != null) {
+            System.out.println("Using TLA+ Next definition to determine B OPERATIONS");
 			this.nextExpr = next.getBody();
 		}
 	}
 
 	public void evalSpec() throws SemanticErrorException, FrontEndException {
 		if (spec != null) {
+            System.out.println("Using TLA+ Spec to determine B INITIALISATION and OPERATIONS");
 			processConfigSpec(spec.getBody());
 		}
 
 	}
 
 	private void processConfigSpec(ExprNode exprNode) throws SemanticErrorException, FrontEndException {
-
 		if (exprNode instanceof OpApplNode) {
 			OpApplNode opApp = (OpApplNode) exprNode;
 			ExprOrOpArgNode[] args = opApp.getArgs();
-- 
GitLab