Skip to content

Commit bb89aec

Browse files
authored
Element position in LogInfo (#16)
## Description Added the analysed element's source position to the log, both for known and unknown file positions ## Example |- [ Latte Type checker initialized ] |- Visiting class: MyStackTest (MyStackTest.java:4) |- Visiting constructor <init> (unknown file) |- Visiting invocation <super()> (unknown file) |- Visiting method <main> (MyStackTest.java:6) |- Visiting parameter<args> (MyStackTest.java:6) |- args: ­Ø£ê2 |- ­Ø£ê2: SHARED ## Related Issue Closes #4 ## Type of change - [ ] Bug fix - [x] New feature - [ ] Documentation update - [ ] Code refactoring
1 parent e54cc9d commit bb89aec

3 files changed

Lines changed: 42 additions & 27 deletions

File tree

latte/src/main/java/typechecking/LatteAbstractChecker.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,29 @@ public LatteAbstractChecker( SymbolicEnvironment symbEnv,
2929
this.permEnv = permEnv;
3030
this.maps = maps;
3131
}
32-
33-
/**
32+
33+
/**
3434
* Log info with indentation
3535
* @param text
3636
*/
3737
protected void logInfo(String text) {
3838
logger.info(" ".repeat(4*loggingSpaces) + "|- " + text);
3939
}
40+
41+
/**
42+
* Log info with indentation
43+
* @param text
44+
* @param ce The CtElement to which the Log relates to
45+
*/
46+
protected void logInfo(String text, CtElement ce) {
47+
if(!ce.getPosition().isValidPosition())
48+
logger.info(" ".repeat(4*loggingSpaces) + "|- " + text);
49+
else{
50+
String pos = ce.getPosition().getFile().getName() + ":" + ce.getPosition().getLine();
51+
logger.info(" ".repeat(4*loggingSpaces) + "|- " + text + " (" + pos + ")");
52+
}
53+
54+
}
4055

4156
/**
4257
* Log error with indentation

latte/src/main/java/typechecking/LatteClassFirstPass.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ public LatteClassFirstPass(SymbolicEnvironment se, PermissionEnvironment pe,
2222

2323
@Override
2424
public <T> void visitCtClass(CtClass<T> ctClass) {
25-
logInfo("Visiting class: " + ctClass.getSimpleName());
25+
logInfo("Visiting class: " + ctClass.getSimpleName(), ctClass);
2626
// Add the class to the type reference and class map
27-
CtTypeReference<?> typeRef1 = ctClass.getReference();
28-
maps.addTypeClass(typeRef1, ctClass);
27+
CtTypeReference<?> typeRef = ctClass.getReference();
28+
maps.addTypeClass(typeRef, ctClass);
2929
super.visitCtClass(ctClass);
3030
}
3131

3232

3333
@Override
3434
public <T> void visitCtField(CtField<T> f) {
35-
logInfo("Visiting field: " + f.getSimpleName());
35+
logInfo("Visiting field: " + f.getSimpleName(), f);
3636
loggingSpaces++;
3737
CtElement k = f.getParent();
3838
if (k instanceof CtClass){
@@ -54,14 +54,14 @@ public <T> void visitCtField(CtField<T> f) {
5454

5555
@Override
5656
public <T> void visitCtMethod(CtMethod<T> m) {
57-
logInfo("Visiting method: " + m.getSimpleName());
57+
logInfo("Visiting method: " + m.getSimpleName(), m);
5858
maps.addMethod((CtClass<?>) m.getParent(), m);
5959
super.visitCtMethod(m);
6060
}
6161

6262
@Override
6363
public <T> void visitCtConstructor(CtConstructor<T> c) {
64-
logInfo("Visiting constructor: " + c.getSimpleName());
64+
logInfo("Visiting constructor: " + c.getSimpleName(), c);
6565
maps.addConstructor((CtClass<?>) c.getParent(), c);
6666
super.visitCtConstructor(c);
6767
}

latte/src/main/java/typechecking/LatteTypeChecker.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public LatteTypeChecker( SymbolicEnvironment symbEnv,
4848

4949
@Override
5050
public <T> void visitCtClass(CtClass<T> ctClass) {
51-
logInfo("Visiting class: <" + ctClass.getSimpleName()+">");
51+
logInfo("Visiting class: <" + ctClass.getSimpleName()+">", ctClass);
5252
enterScopes();
5353
super.visitCtClass(ctClass);
5454
exitScopes();
@@ -57,7 +57,7 @@ public <T> void visitCtClass(CtClass<T> ctClass) {
5757

5858
@Override
5959
public <T> void visitCtConstructor(CtConstructor<T> c) {
60-
logInfo("Visiting constructor <"+ c.getSimpleName()+">");
60+
logInfo("Visiting constructor <"+ c.getSimpleName()+">", c);
6161
enterScopes();
6262

6363
// Assume 'this' is a parameter always borrowed
@@ -71,7 +71,7 @@ public <T> void visitCtConstructor(CtConstructor<T> c) {
7171

7272
@Override
7373
public <T> void visitCtMethod(CtMethod<T> m) {
74-
logInfo("Visiting method <"+ m.getSimpleName()+">");
74+
logInfo("Visiting method <"+ m.getSimpleName()+">", m);
7575
enterScopes();
7676

7777
// Assume 'this' is a parameter always borrowed
@@ -85,7 +85,7 @@ public <T> void visitCtMethod(CtMethod<T> m) {
8585

8686
@Override
8787
public <T> void visitCtParameter(CtParameter<T> parameter) {
88-
logInfo("Visiting parameter <"+ parameter.getSimpleName()+">");
88+
logInfo("Visiting parameter <"+ parameter.getSimpleName()+">", parameter);
8989
loggingSpaces++;
9090
super.visitCtParameter(parameter);
9191

@@ -125,7 +125,7 @@ public <T> void visitCtParameter(CtParameter<T> parameter) {
125125
*/
126126
@Override
127127
public <T> void visitCtLocalVariable(CtLocalVariable<T> localVariable) {
128-
logInfo("Visiting local variable <"+ localVariable.getSimpleName() +">");
128+
logInfo("Visiting local variable <"+ localVariable.getSimpleName() +">", localVariable);
129129
loggingSpaces++;
130130
// CheckVarDecl
131131
// 1) Add the variable to the typing context
@@ -178,7 +178,7 @@ public <T> void visitCtLocalVariable(CtLocalVariable<T> localVariable) {
178178
*/
179179
@Override
180180
public <T> void visitCtInvocation(CtInvocation<T> invocation) {
181-
logInfo("Visiting invocation <"+ invocation.toStringDebug()+">");
181+
logInfo("Visiting invocation <"+ invocation.toStringDebug()+">", invocation);
182182
super.visitCtInvocation(invocation);
183183

184184
String metName = invocation.getExecutable().getSimpleName();
@@ -248,7 +248,7 @@ public <T> void visitCtInvocation(CtInvocation<T> invocation) {
248248
*/
249249
@Override
250250
public <T> void visitCtFieldRead(CtFieldRead<T> fieldRead) {
251-
logInfo("Visiting field read <"+ fieldRead.toStringDebug()+">");
251+
logInfo("Visiting field read <"+ fieldRead.toStringDebug()+">", fieldRead);
252252
loggingSpaces++;
253253

254254
super.visitCtFieldRead(fieldRead);
@@ -335,7 +335,7 @@ public <T> void visitCtFieldRead(CtFieldRead<T> fieldRead) {
335335
*/
336336
@Override
337337
public <T> void visitCtFieldWrite(CtFieldWrite<T> fieldWrite) {
338-
logInfo("Visiting field write <"+ fieldWrite.toStringDebug()+">");
338+
logInfo("Visiting field write <"+ fieldWrite.toStringDebug()+">", fieldWrite);
339339
super.visitCtFieldWrite(fieldWrite);
340340
CtExpression<?> ce = fieldWrite.getTarget();
341341
if (ce instanceof CtVariableReadImpl){
@@ -374,7 +374,7 @@ public <T> void visitCtFieldWrite(CtFieldWrite<T> fieldWrite) {
374374
*/
375375
@Override
376376
public <T, A extends T> void visitCtAssignment(CtAssignment<T, A> assignment) {
377-
logInfo("Visiting assignment <"+ assignment.toStringDebug()+">");
377+
logInfo("Visiting assignment <"+ assignment.toStringDebug()+">", assignment);
378378
loggingSpaces++;
379379
super.visitCtAssignment(assignment);
380380

@@ -439,7 +439,7 @@ public <T, A extends T> void visitCtAssignment(CtAssignment<T, A> assignment) {
439439

440440
@Override
441441
public <T> void visitCtConstructorCall(CtConstructorCall<T> constCall) {
442-
logInfo("Visiting constructor call <"+ constCall.toStringDebug()+">");
442+
logInfo("Visiting constructor call <"+ constCall.toStringDebug()+">", constCall);
443443
super.visitCtConstructorCall(constCall);
444444

445445
// Check if all arguments follow the restrictions
@@ -472,7 +472,7 @@ private void handleConstructorArgs (CtConstructorCall<?> constCall){
472472
CtConstructor<?> c = maps.geCtConstructor(klass, paramSize);
473473
List<SymbolicValue> paramSymbValues = new ArrayList<>();
474474
if (klass == null || c == null){
475-
logInfo(String.format("Cannot find the constructor for {} in the context", constCall.getType()));
475+
logInfo(String.format("Cannot find the constructor for {} in the context", constCall.getType()), constCall);
476476
return;
477477
}
478478
for (int i = 0; i < paramSize; i++){
@@ -488,7 +488,7 @@ private void handleConstructorArgs (CtConstructorCall<?> constCall){
488488
if (!vvPerm.isGreaterEqualThan(Uniqueness.BORROWED)){
489489
logError(String.format("Symbolic value %s:%s is not greater than BORROWED", vv, vvPerm), arg);
490490
}
491-
logInfo(String.format("Checking constructor argument %s:%s, %s <= %s", p.getSimpleName(), vv, vvPerm, expectedUA));
491+
logInfo(String.format("Checking constructor argument %s:%s, %s <= %s", p.getSimpleName(), vv, vvPerm, expectedUA), constCall);
492492
// Σ′ ⊢ 𝑒1, ... , 𝑒𝑛 : 𝛼1, ... , 𝛼𝑛 ⊣ Σ′′
493493
if (!permEnv.usePermissionAs(vv, vvPerm, expectedUA))
494494
logError(String.format("Expected %s but got %s",
@@ -507,7 +507,7 @@ private void handleConstructorArgs (CtConstructorCall<?> constCall){
507507

508508
@Override
509509
public void visitCtIf(CtIf ifElement) {
510-
logInfo("Visiting if <"+ ifElement.toStringDebug()+">");
510+
logInfo("Visiting if <"+ ifElement.toStringDebug()+">", ifElement);
511511
// super.visitCtIf(ifElement);
512512

513513
// Evaluate the conditions
@@ -543,7 +543,7 @@ public void visitCtIf(CtIf ifElement) {
543543

544544
@Override
545545
public <R> void visitCtReturn(CtReturn<R> returnStatement) {
546-
logInfo("Visiting return <"+ returnStatement.toStringDebug()+">");
546+
logInfo("Visiting return <"+ returnStatement.toStringDebug()+">", returnStatement);
547547
super.visitCtReturn(returnStatement);
548548

549549
CtExpression<?> returned = returnStatement.getReturnedExpression();
@@ -567,7 +567,7 @@ public <R> void visitCtReturn(CtReturn<R> returnStatement) {
567567
*/
568568
@Override
569569
public <T> void visitCtBinaryOperator(CtBinaryOperator<T> operator) {
570-
logInfo("Visiting binary operator <"+ operator.toStringDebug()+">");
570+
logInfo("Visiting binary operator <"+ operator.toStringDebug()+">", operator);
571571
loggingSpaces++;
572572
super.visitCtBinaryOperator(operator);
573573

@@ -589,7 +589,7 @@ public <T> void visitCtBinaryOperator(CtBinaryOperator<T> operator) {
589589
*/
590590
@Override
591591
public <T> void visitCtUnaryOperator(CtUnaryOperator<T> operator) {
592-
logInfo("Visiting unary operator <"+ operator.toStringDebug()+">");
592+
logInfo("Visiting unary operator <"+ operator.toStringDebug()+">", operator);
593593
loggingSpaces++;
594594
super.visitCtUnaryOperator(operator);
595595

@@ -611,7 +611,7 @@ public <T> void visitCtUnaryOperator(CtUnaryOperator<T> operator) {
611611
*/
612612
@Override
613613
public <T> void visitCtLocalVariableReference(CtLocalVariableReference<T> reference) {
614-
logInfo("Visiting local variable reference <"+ reference.toString()+">");
614+
logInfo("Visiting local variable reference <"+ reference.toString()+">", reference);
615615
loggingSpaces++;
616616
super.visitCtLocalVariableReference(reference);
617617

@@ -634,7 +634,7 @@ public <T> void visitCtLocalVariableReference(CtLocalVariableReference<T> refere
634634
@Override
635635
public <T> void visitCtVariableRead(CtVariableRead<T> variableRead) {
636636
loggingSpaces++;
637-
logInfo("Visiting variable read <"+ variableRead.toString()+">");
637+
logInfo("Visiting variable read <"+ variableRead.toString()+">", variableRead);
638638
super.visitCtVariableRead(variableRead);
639639

640640
SymbolicValue sv = symbEnv.get(variableRead.getVariable().getSimpleName());
@@ -649,7 +649,7 @@ public <T> void visitCtVariableRead(CtVariableRead<T> variableRead) {
649649
*/
650650
@Override
651651
public <T> void visitCtLiteral(CtLiteral<T> literal) {
652-
logInfo("Visiting literal <"+ literal.toString()+">");
652+
logInfo("Visiting literal <"+ literal.toString()+">", literal);
653653

654654
super.visitCtLiteral(literal);
655655

0 commit comments

Comments
 (0)