From 77a6dae94f121a906755347c44001bcda2ad07a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krau=C3=9F=2C=20Josefine?= Date: Wed, 26 Jun 2024 15:55:34 +0200 Subject: [PATCH] added check if there is a main method --- src/main/java/abstractSyntaxTree/Class/RefType.java | 2 +- src/main/java/abstractSyntaxTree/Program.java | 10 ++++++++++ .../MethodCallStatementExpression.java | 7 ------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/abstractSyntaxTree/Class/RefType.java b/src/main/java/abstractSyntaxTree/Class/RefType.java index 93c4927..218b8bd 100644 --- a/src/main/java/abstractSyntaxTree/Class/RefType.java +++ b/src/main/java/abstractSyntaxTree/Class/RefType.java @@ -20,7 +20,7 @@ public class RefType extends AbstractType implements Node { public String name; // Class Name public List fieldDecls; public List methodDecls; - boolean hasMain; + public boolean hasMain; public RefType(String name, List fieldDecls, diff --git a/src/main/java/abstractSyntaxTree/Program.java b/src/main/java/abstractSyntaxTree/Program.java index e84ca9c..eb2508b 100644 --- a/src/main/java/abstractSyntaxTree/Program.java +++ b/src/main/java/abstractSyntaxTree/Program.java @@ -53,6 +53,16 @@ public class Program implements Node { methodContext.put(oneClass.name, identifierAndMethod); } + + int mainCounter = 0; + // check if main exists + for(RefType oneClass : classes){ + if(oneClass.hasMain) + mainCounter++; + } + if(mainCounter != 1) + throw new TypeCheckException("There is not 1 Main method."); + // typecheck each class TypeCheckResult result = new TypeCheckResult(); for(RefType oneClass : classes){ diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java index 2013599..ee71bde 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java @@ -58,7 +58,6 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr //if classToSearchMethodIn does not conatin method, throw exception. go through list and check each for(int i = 0; i < receivingMethods.size(); i++){ - //todo throw exception 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 + "."); @@ -67,12 +66,6 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr } currentType = (String) methodContext.get(currentType).get(methodName).keySet().toArray()[0]; - // todo checkparameter -// if(method == null) -// throw new TypeCheckException("The method " + methodName + " was not found in "+ classToSearchMethodIn + "."); - - // typecheck arguments - TypeCheckResult result = new TypeCheckResult(); result.type = currentType;