Skip to content

Commit 580cb4c

Browse files
authored
Merge pull request #32 from sinha108/main
Updates to symbol table referenced types method return types
2 parents 7510e5c + 0d6998f commit 580cb4c

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/main/java/com/ibm/northstar/SymbolTable.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,23 @@ private static List<String> getReferencedTypes(Optional<BlockStmt> blockStmt) {
357357
.filter(vd -> vd.getType().isClassOrInterfaceType())
358358
.map(vd -> resolveType(vd.getType()))
359359
.forEach(referencedTypes::add));
360+
361+
// add types of accessed fields to the set of referenced types
362+
blockStmt.ifPresent(bs -> bs.findAll(FieldAccessExpr.class)
363+
.stream()
364+
.filter(faExpr -> faExpr.getParentNode().isPresent() && !(faExpr.getParentNode().get() instanceof FieldAccessExpr))
365+
.map(faExpr -> {
366+
if (faExpr.getParentNode().isPresent() && faExpr.getParentNode().get() instanceof CastExpr) {
367+
return resolveType(((CastExpr)faExpr.getParentNode().get()).getType());
368+
} else {
369+
return resolveExpression(faExpr);
370+
}
371+
})
372+
.filter(type -> !type.isEmpty())
373+
.forEach(referencedTypes::add));
374+
375+
// TODO: add resolved method access expressions
376+
360377
return new ArrayList<>(referencedTypes);
361378
}
362379

@@ -465,8 +482,15 @@ private static List<CallSite> getCallSites(Optional<BlockStmt> callableBody) {
465482
if (declaringTypeName.equals(scopeExpr.toString())) {
466483
isStaticCall = true;
467484
}
485+
}
486+
487+
// compute return type for method call taking into account typecast of return value
488+
if (methodCallExpr.getParentNode().isPresent() && methodCallExpr.getParentNode().get() instanceof CastExpr) {
489+
returnType = resolveType(((CastExpr)methodCallExpr.getParentNode().get()).getType());
490+
} else {
468491
returnType = resolveExpression(methodCallExpr);
469492
}
493+
470494
// resolve arguments of the method call to types
471495
List<String> arguments = methodCallExpr.getArguments().stream()
472496
.map(arg -> resolveExpression(arg)).collect(Collectors.toList());

0 commit comments

Comments
 (0)