From 1aedad0c3c1103c7f39fe910dc109daaa3b90572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Almeida?= Date: Wed, 23 Apr 2025 22:34:26 +0100 Subject: [PATCH 1/2] Added element position to LogInfo --- .../typechecking/LatteAbstractChecker.java | 19 +++++++++- .../typechecking/LatteClassFirstPass.java | 12 +++--- .../java/typechecking/LatteTypeChecker.java | 38 +++++++++---------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/latte/src/main/java/typechecking/LatteAbstractChecker.java b/latte/src/main/java/typechecking/LatteAbstractChecker.java index 593fdf8..0a2a8f0 100644 --- a/latte/src/main/java/typechecking/LatteAbstractChecker.java +++ b/latte/src/main/java/typechecking/LatteAbstractChecker.java @@ -29,14 +29,29 @@ public LatteAbstractChecker( SymbolicEnvironment symbEnv, this.permEnv = permEnv; this.maps = maps; } - - /** + + /** * Log info with indentation * @param text */ protected void logInfo(String text) { logger.info(" ".repeat(4*loggingSpaces) + "|- " + text); } + + /** + * Log info with indentation + * @param text + * @param ce The CtElement to which the Log relates to + */ + protected void logInfo(String text, CtElement ce) { + if(ce.getPosition().getFile() == null) + logger.info(" ".repeat(4*loggingSpaces) + "|- " + text + " " + ce.getPosition()); + else{ + String pos = ce.getPosition().getFile().getName() + ":" + ce.getPosition().getLine(); + logger.info(" ".repeat(4*loggingSpaces) + "|- " + text + " (" + pos + ")"); + } + + } /** * Log error with indentation diff --git a/latte/src/main/java/typechecking/LatteClassFirstPass.java b/latte/src/main/java/typechecking/LatteClassFirstPass.java index a0badc0..1678823 100644 --- a/latte/src/main/java/typechecking/LatteClassFirstPass.java +++ b/latte/src/main/java/typechecking/LatteClassFirstPass.java @@ -22,17 +22,17 @@ public LatteClassFirstPass(SymbolicEnvironment se, PermissionEnvironment pe, @Override public void visitCtClass(CtClass ctClass) { - logInfo("Visiting class: " + ctClass.getSimpleName()); + logInfo("Visiting class: " + ctClass.getSimpleName(), ctClass); // Add the class to the type reference and class map - CtTypeReference typeRef1 = ctClass.getReference(); - maps.addTypeClass(typeRef1, ctClass); + CtTypeReference typeRef = ctClass.getReference(); + maps.addTypeClass(typeRef, ctClass); super.visitCtClass(ctClass); } @Override public void visitCtField(CtField f) { - logInfo("Visiting field: " + f.getSimpleName()); + logInfo("Visiting field: " + f.getSimpleName(), f); loggingSpaces++; CtElement k = f.getParent(); if (k instanceof CtClass){ @@ -54,14 +54,14 @@ public void visitCtField(CtField f) { @Override public void visitCtMethod(CtMethod m) { - logInfo("Visiting method: " + m.getSimpleName()); + logInfo("Visiting method: " + m.getSimpleName(), m); maps.addMethod((CtClass) m.getParent(), m); super.visitCtMethod(m); } @Override public void visitCtConstructor(CtConstructor c) { - logInfo("Visiting constructor: " + c.getSimpleName()); + logInfo("Visiting constructor: " + c.getSimpleName(), c); maps.addConstructor((CtClass) c.getParent(), c); super.visitCtConstructor(c); } diff --git a/latte/src/main/java/typechecking/LatteTypeChecker.java b/latte/src/main/java/typechecking/LatteTypeChecker.java index 16c816e..63d07c6 100644 --- a/latte/src/main/java/typechecking/LatteTypeChecker.java +++ b/latte/src/main/java/typechecking/LatteTypeChecker.java @@ -48,7 +48,7 @@ public LatteTypeChecker( SymbolicEnvironment symbEnv, @Override public void visitCtClass(CtClass ctClass) { - logInfo("Visiting class: <" + ctClass.getSimpleName()+">"); + logInfo("Visiting class: <" + ctClass.getSimpleName()+">", ctClass); enterScopes(); super.visitCtClass(ctClass); exitScopes(); @@ -57,7 +57,7 @@ public void visitCtClass(CtClass ctClass) { @Override public void visitCtConstructor(CtConstructor c) { - logInfo("Visiting constructor <"+ c.getSimpleName()+">"); + logInfo("Visiting constructor <"+ c.getSimpleName()+">", c); enterScopes(); // Assume 'this' is a parameter always borrowed @@ -71,7 +71,7 @@ public void visitCtConstructor(CtConstructor c) { @Override public void visitCtMethod(CtMethod m) { - logInfo("Visiting method <"+ m.getSimpleName()+">"); + logInfo("Visiting method <"+ m.getSimpleName()+">", m); enterScopes(); // Assume 'this' is a parameter always borrowed @@ -85,7 +85,7 @@ public void visitCtMethod(CtMethod m) { @Override public void visitCtParameter(CtParameter parameter) { - logInfo("Visiting parameter <"+ parameter.getSimpleName()+">"); + logInfo("Visiting parameter <"+ parameter.getSimpleName()+">", parameter); loggingSpaces++; super.visitCtParameter(parameter); @@ -125,7 +125,7 @@ public void visitCtParameter(CtParameter parameter) { */ @Override public void visitCtLocalVariable(CtLocalVariable localVariable) { - logInfo("Visiting local variable <"+ localVariable.getSimpleName() +">"); + logInfo("Visiting local variable <"+ localVariable.getSimpleName() +">", localVariable); loggingSpaces++; // CheckVarDecl // 1) Add the variable to the typing context @@ -178,7 +178,7 @@ public void visitCtLocalVariable(CtLocalVariable localVariable) { */ @Override public void visitCtInvocation(CtInvocation invocation) { - logInfo("Visiting invocation <"+ invocation.toStringDebug()+">"); + logInfo("Visiting invocation <"+ invocation.toStringDebug()+">", invocation); super.visitCtInvocation(invocation); String metName = invocation.getExecutable().getSimpleName(); @@ -248,7 +248,7 @@ public void visitCtInvocation(CtInvocation invocation) { */ @Override public void visitCtFieldRead(CtFieldRead fieldRead) { - logInfo("Visiting field read <"+ fieldRead.toStringDebug()+">"); + logInfo("Visiting field read <"+ fieldRead.toStringDebug()+">", fieldRead); loggingSpaces++; super.visitCtFieldRead(fieldRead); @@ -335,7 +335,7 @@ public void visitCtFieldRead(CtFieldRead fieldRead) { */ @Override public void visitCtFieldWrite(CtFieldWrite fieldWrite) { - logInfo("Visiting field write <"+ fieldWrite.toStringDebug()+">"); + logInfo("Visiting field write <"+ fieldWrite.toStringDebug()+">", fieldWrite); super.visitCtFieldWrite(fieldWrite); CtExpression ce = fieldWrite.getTarget(); if (ce instanceof CtVariableReadImpl){ @@ -374,7 +374,7 @@ public void visitCtFieldWrite(CtFieldWrite fieldWrite) { */ @Override public void visitCtAssignment(CtAssignment assignment) { - logInfo("Visiting assignment <"+ assignment.toStringDebug()+">"); + logInfo("Visiting assignment <"+ assignment.toStringDebug()+">", assignment); loggingSpaces++; super.visitCtAssignment(assignment); @@ -439,7 +439,7 @@ public void visitCtAssignment(CtAssignment assignment) { @Override public void visitCtConstructorCall(CtConstructorCall constCall) { - logInfo("Visiting constructor call <"+ constCall.toStringDebug()+">"); + logInfo("Visiting constructor call <"+ constCall.toStringDebug()+">", constCall); super.visitCtConstructorCall(constCall); // Check if all arguments follow the restrictions @@ -472,7 +472,7 @@ private void handleConstructorArgs (CtConstructorCall constCall){ CtConstructor c = maps.geCtConstructor(klass, paramSize); List paramSymbValues = new ArrayList<>(); if (klass == null || c == null){ - logInfo(String.format("Cannot find the constructor for {} in the context", constCall.getType())); + logInfo(String.format("Cannot find the constructor for {} in the context", constCall.getType()), constCall); return; } for (int i = 0; i < paramSize; i++){ @@ -488,7 +488,7 @@ private void handleConstructorArgs (CtConstructorCall constCall){ if (!vvPerm.isGreaterEqualThan(Uniqueness.BORROWED)){ logError(String.format("Symbolic value %s:%s is not greater than BORROWED", vv, vvPerm), arg); } - logInfo(String.format("Checking constructor argument %s:%s, %s <= %s", p.getSimpleName(), vv, vvPerm, expectedUA)); + logInfo(String.format("Checking constructor argument %s:%s, %s <= %s", p.getSimpleName(), vv, vvPerm, expectedUA), constCall); // Ξ£β€² ⊒ 𝑒1, ... , 𝑒𝑛 : 𝛼1, ... , 𝛼𝑛 ⊣ Ξ£β€²β€² if (!permEnv.usePermissionAs(vv, vvPerm, expectedUA)) logError(String.format("Expected %s but got %s", @@ -507,7 +507,7 @@ private void handleConstructorArgs (CtConstructorCall constCall){ @Override public void visitCtIf(CtIf ifElement) { - logInfo("Visiting if <"+ ifElement.toStringDebug()+">"); + logInfo("Visiting if <"+ ifElement.toStringDebug()+">", ifElement); // super.visitCtIf(ifElement); // Evaluate the conditions @@ -543,7 +543,7 @@ public void visitCtIf(CtIf ifElement) { @Override public void visitCtReturn(CtReturn returnStatement) { - logInfo("Visiting return <"+ returnStatement.toStringDebug()+">"); + logInfo("Visiting return <"+ returnStatement.toStringDebug()+">", returnStatement); super.visitCtReturn(returnStatement); CtExpression returned = returnStatement.getReturnedExpression(); @@ -567,7 +567,7 @@ public void visitCtReturn(CtReturn returnStatement) { */ @Override public void visitCtBinaryOperator(CtBinaryOperator operator) { - logInfo("Visiting binary operator <"+ operator.toStringDebug()+">"); + logInfo("Visiting binary operator <"+ operator.toStringDebug()+">", operator); loggingSpaces++; super.visitCtBinaryOperator(operator); @@ -589,7 +589,7 @@ public void visitCtBinaryOperator(CtBinaryOperator operator) { */ @Override public void visitCtUnaryOperator(CtUnaryOperator operator) { - logInfo("Visiting unary operator <"+ operator.toStringDebug()+">"); + logInfo("Visiting unary operator <"+ operator.toStringDebug()+">", operator); loggingSpaces++; super.visitCtUnaryOperator(operator); @@ -611,7 +611,7 @@ public void visitCtUnaryOperator(CtUnaryOperator operator) { */ @Override public void visitCtLocalVariableReference(CtLocalVariableReference reference) { - logInfo("Visiting local variable reference <"+ reference.toString()+">"); + logInfo("Visiting local variable reference <"+ reference.toString()+">", reference); loggingSpaces++; super.visitCtLocalVariableReference(reference); @@ -634,7 +634,7 @@ public void visitCtLocalVariableReference(CtLocalVariableReference refere @Override public void visitCtVariableRead(CtVariableRead variableRead) { loggingSpaces++; - logInfo("Visiting variable read <"+ variableRead.toString()+">"); + logInfo("Visiting variable read <"+ variableRead.toString()+">", variableRead); super.visitCtVariableRead(variableRead); SymbolicValue sv = symbEnv.get(variableRead.getVariable().getSimpleName()); @@ -649,7 +649,7 @@ public void visitCtVariableRead(CtVariableRead variableRead) { */ @Override public void visitCtLiteral(CtLiteral literal) { - logInfo("Visiting literal <"+ literal.toString()+">"); + logInfo("Visiting literal <"+ literal.toString()+">", literal); super.visitCtLiteral(literal); From 73fbf9ed8a99fc9f822b24cde479541d71380a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Almeida?= Date: Wed, 30 Apr 2025 10:53:53 +0100 Subject: [PATCH 2/2] Removed unknown files in the log --- latte/src/main/java/typechecking/LatteAbstractChecker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latte/src/main/java/typechecking/LatteAbstractChecker.java b/latte/src/main/java/typechecking/LatteAbstractChecker.java index 0a2a8f0..c653602 100644 --- a/latte/src/main/java/typechecking/LatteAbstractChecker.java +++ b/latte/src/main/java/typechecking/LatteAbstractChecker.java @@ -44,8 +44,8 @@ protected void logInfo(String text) { * @param ce The CtElement to which the Log relates to */ protected void logInfo(String text, CtElement ce) { - if(ce.getPosition().getFile() == null) - logger.info(" ".repeat(4*loggingSpaces) + "|- " + text + " " + ce.getPosition()); + if(!ce.getPosition().isValidPosition()) + logger.info(" ".repeat(4*loggingSpaces) + "|- " + text); else{ String pos = ce.getPosition().getFile().getName() + ":" + ce.getPosition().getLine(); logger.info(" ".repeat(4*loggingSpaces) + "|- " + text + " (" + pos + ")");