feat: add Constraints for Records in Parameterlist
Some checks failed
Build and Test with Maven / Build-and-test-with-Maven (push) Failing after 5m6s
Some checks failed
Build and Test with Maven / Build-and-test-with-Maven (push) Failing after 5m6s
This commit is contained in:
parent
85d70378ca
commit
6ee308a712
@ -1,6 +1,8 @@
|
|||||||
package de.dhbwstuttgart.typeinference.typeAlgo;
|
package de.dhbwstuttgart.typeinference.typeAlgo;
|
||||||
|
|
||||||
import de.dhbwstuttgart.exceptions.DebugException;
|
import de.dhbwstuttgart.exceptions.DebugException;
|
||||||
|
import de.dhbwstuttgart.parser.SourceLoc;
|
||||||
|
import de.dhbwstuttgart.parser.antlr.Java17Parser;
|
||||||
import de.dhbwstuttgart.parser.scope.JavaClassName;
|
import de.dhbwstuttgart.parser.scope.JavaClassName;
|
||||||
import de.dhbwstuttgart.syntaxtree.*;
|
import de.dhbwstuttgart.syntaxtree.*;
|
||||||
import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
|
import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
|
||||||
@ -9,7 +11,10 @@ import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
|
|||||||
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceBlockInformation;
|
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceBlockInformation;
|
||||||
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation;
|
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation;
|
||||||
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
|
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
|
||||||
|
import de.dhbwstuttgart.typeinference.constraints.Pair;
|
||||||
|
import de.dhbwstuttgart.typeinference.unify.model.PairOperator;
|
||||||
import de.dhbwstuttgart.util.BiRelation;
|
import de.dhbwstuttgart.util.BiRelation;
|
||||||
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -79,8 +84,46 @@ public class TYPE {
|
|||||||
if(m.block == null)return new ConstraintSet(); //Abstrakte Methoden generieren keine Constraints
|
if(m.block == null)return new ConstraintSet(); //Abstrakte Methoden generieren keine Constraints
|
||||||
TypeInferenceBlockInformation blockInfo = new TypeInferenceBlockInformation(info.getAvailableClasses(), currentClass, m);
|
TypeInferenceBlockInformation blockInfo = new TypeInferenceBlockInformation(info.getAvailableClasses(), currentClass, m);
|
||||||
TYPEStmt methodScope = new TYPEStmt(blockInfo);
|
TYPEStmt methodScope = new TYPEStmt(blockInfo);
|
||||||
|
ConstraintSet constraintSet = new ConstraintSet();
|
||||||
|
m.getParameterList().getFormalparalist().forEach(el -> {
|
||||||
|
if(el instanceof RecordPattern){
|
||||||
|
constraintSet.addAll(addRecursiveParameterConstraints((RecordPattern) el, blockInfo));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
m.block.accept(methodScope);
|
m.block.accept(methodScope);
|
||||||
return methodScope.getConstraints();
|
constraintSet.addAll(methodScope.getConstraints());
|
||||||
|
return constraintSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConstraintSet addRecursiveParameterConstraints(RecordPattern recordPattern, TypeInferenceBlockInformation blockInformation){
|
||||||
|
ConstraintSet constraintSet = new ConstraintSet();
|
||||||
|
|
||||||
|
var subPatternList = recordPattern.getSubPattern();
|
||||||
|
|
||||||
|
int counter = 0;
|
||||||
|
for(Pattern el : subPatternList){
|
||||||
|
|
||||||
|
if(el instanceof RecordPattern){
|
||||||
|
constraintSet.addAll(addRecursiveParameterConstraints((RecordPattern) el, blockInformation));
|
||||||
|
}else{
|
||||||
|
var allClasses = blockInformation.getAvailableClasses();
|
||||||
|
RefTypeOrTPHOrWildcardOrGeneric type;
|
||||||
|
|
||||||
|
for (ClassOrInterface allClass : allClasses) {
|
||||||
|
var typename = recordPattern.getType().toString();
|
||||||
|
var className = allClass.getClassName().getClassName();
|
||||||
|
if(className.equals(typename)){
|
||||||
|
type = allClass.getConstructors().get(0).getParameterList().getParameterAt(counter).getType();
|
||||||
|
constraintSet.addUndConstraint(new Pair(el.getType(), type, PairOperator.SMALLERDOT, new SourceLoc(blockInformation.getCurrentClass().getFileName(), el.getOffset().getLine())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return constraintSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConstraintSet getConstraintsConstructor(Constructor m, TypeInferenceInformation info, ClassOrInterface currentClass) {
|
private ConstraintSet getConstraintsConstructor(Constructor m, TypeInferenceInformation info, ClassOrInterface currentClass) {
|
||||||
|
Loading…
Reference in New Issue
Block a user