From dd2842138f050646055f7e98a4c735c045f8c48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krau=C3=9F=2C=20Josefine?= Date: Sun, 30 Jun 2024 13:39:20 +0200 Subject: [PATCH] missing case in methodcall --- .../MethodCallStatementExpression.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java index 2d10bc9..9719712 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java @@ -35,7 +35,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr String classToSearchMethodIn = thisClass; //method is called on something that is not this ??? - if(this.receiver != null) { + if (this.receiver != null) { if (!receiver.thisExpression) { classToSearchMethodIn = localVars.get(receiver.identifier); if (classToSearchMethodIn == null) @@ -46,7 +46,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr String currentType = ""; // receiver is instvar - if(receiver != null) { + if (receiver != null) { if (receiver.instVarExpression != null) { String Subreceiver = receiver.instVarExpression.receivers.get(0).identifier; // e String mostLeftField = receiver.instVarExpression.fieldName; // example1 @@ -56,17 +56,19 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr receiver.instVarExpression.thisClass = typeOfSubreceiver; receiver.instVarExpression.typeCheck(methodContext, typeContext, localVars); currentType = typeContext.get(typeOfSubreceiver).get(mostLeftField); + } else { + currentType = thisClass; } - }else{ + } else { currentType = thisClass; } //if classToSearchMethodIn does not conatin method, throw exception. go through list and check each - for(int i = 0; i < receivingMethods.size(); i++){ + for (int i = 0; i < receivingMethods.size(); i++) { currentType = (String) methodContext.get(currentType).get(receivingMethods.get(i).methodName).keySet().toArray()[0]; - if(currentType == null) - throw new TypeCheckException("The method " + methodName + " was not found in "+ classToSearchMethodIn + "."); + if (currentType == null) + throw new TypeCheckException("The method " + methodName + " was not found in " + classToSearchMethodIn + "."); receivingMethods.get(i).thisClass = this.thisClass; receivingMethods.get(i).checkParameters(methodContext, typeContext, localVars); } @@ -175,7 +177,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr if (o == null || getClass() != o.getClass()) return false; MethodCallStatementExpression methodCallStatementExpression = (MethodCallStatementExpression) o; return (Objects.equals(methodName, methodCallStatementExpression.methodName) - && Objects.equals(arguments, methodCallStatementExpression.arguments) + && Objects.equals(arguments, methodCallStatementExpression.arguments) ); }