missing case in methodcall
This commit is contained in:
parent
4bc38c0ff9
commit
dd2842138f
@ -35,7 +35,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr
|
|||||||
String classToSearchMethodIn = thisClass;
|
String classToSearchMethodIn = thisClass;
|
||||||
|
|
||||||
//method is called on something that is not this ???
|
//method is called on something that is not this ???
|
||||||
if(this.receiver != null) {
|
if (this.receiver != null) {
|
||||||
if (!receiver.thisExpression) {
|
if (!receiver.thisExpression) {
|
||||||
classToSearchMethodIn = localVars.get(receiver.identifier);
|
classToSearchMethodIn = localVars.get(receiver.identifier);
|
||||||
if (classToSearchMethodIn == null)
|
if (classToSearchMethodIn == null)
|
||||||
@ -46,7 +46,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr
|
|||||||
String currentType = "";
|
String currentType = "";
|
||||||
|
|
||||||
// receiver is instvar
|
// receiver is instvar
|
||||||
if(receiver != null) {
|
if (receiver != null) {
|
||||||
if (receiver.instVarExpression != null) {
|
if (receiver.instVarExpression != null) {
|
||||||
String Subreceiver = receiver.instVarExpression.receivers.get(0).identifier; // e
|
String Subreceiver = receiver.instVarExpression.receivers.get(0).identifier; // e
|
||||||
String mostLeftField = receiver.instVarExpression.fieldName; // example1
|
String mostLeftField = receiver.instVarExpression.fieldName; // example1
|
||||||
@ -56,17 +56,19 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr
|
|||||||
receiver.instVarExpression.thisClass = typeOfSubreceiver;
|
receiver.instVarExpression.thisClass = typeOfSubreceiver;
|
||||||
receiver.instVarExpression.typeCheck(methodContext, typeContext, localVars);
|
receiver.instVarExpression.typeCheck(methodContext, typeContext, localVars);
|
||||||
currentType = typeContext.get(typeOfSubreceiver).get(mostLeftField);
|
currentType = typeContext.get(typeOfSubreceiver).get(mostLeftField);
|
||||||
|
} else {
|
||||||
|
currentType = thisClass;
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
currentType = thisClass;
|
currentType = thisClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if classToSearchMethodIn does not conatin method, throw exception. go through list and check each
|
//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];
|
currentType = (String) methodContext.get(currentType).get(receivingMethods.get(i).methodName).keySet().toArray()[0];
|
||||||
if(currentType == null)
|
if (currentType == null)
|
||||||
throw new TypeCheckException("The method " + methodName + " was not found in "+ classToSearchMethodIn + ".");
|
throw new TypeCheckException("The method " + methodName + " was not found in " + classToSearchMethodIn + ".");
|
||||||
receivingMethods.get(i).thisClass = this.thisClass;
|
receivingMethods.get(i).thisClass = this.thisClass;
|
||||||
receivingMethods.get(i).checkParameters(methodContext, typeContext, localVars);
|
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;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
MethodCallStatementExpression methodCallStatementExpression = (MethodCallStatementExpression) o;
|
MethodCallStatementExpression methodCallStatementExpression = (MethodCallStatementExpression) o;
|
||||||
return (Objects.equals(methodName, methodCallStatementExpression.methodName)
|
return (Objects.equals(methodName, methodCallStatementExpression.methodName)
|
||||||
&& Objects.equals(arguments, methodCallStatementExpression.arguments)
|
&& Objects.equals(arguments, methodCallStatementExpression.arguments)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user