Anmerkungen zur Type Erasure und weitere Stellen zur Änderung markiert.

This commit is contained in:
Etienne Zink 2022-01-17 18:51:42 +01:00
parent 7eaddd67a3
commit 2ba966a4e7
7 changed files with 12 additions and 0 deletions

View File

@ -876,6 +876,7 @@ public class BytecodeGenMethod implements StatementVisitor {
if(parentBinary || isBinaryExp) {
doUnboxing(resolver.getResolvedType(methodCall.getType()));
}
//ToDo Etienne: Für Type Erasure wichtig?!
} else if(receiverName.contains(CONSTANTS.$$) && !methCallType.equals(Type.getInternalName(Object.class))) {
helper.createCheckCast(methodCall,mv);
}

View File

@ -68,6 +68,7 @@ public class DescriptorToString implements DescriptorVisitor, CONSTANTS {
}
}
}
//ToDo Etienne: Für Type Erasure wichtig?!
//TODO: generate a class java%% ... %%
else if(resultSet.resolveType(fp.getType()).resolvedType.acceptTV(new TypeToDescriptor()).contains(CONSTANTS.ANGLEBRACKET)){
desc += "L"+resultSet.resolveType(fp.getType()).resolvedType.toString().replace(".", "$$").replace(CONSTANTS.ANGLEBRACKET, "$$$").replace(">", "$$$")+ ";";

View File

@ -19,6 +19,12 @@ import java.io.IOException;
import java.util.Iterator;
//ToDo Etienne: Anpassung für TypeErasure
//static Attribut (HashSet<int>) welches Anzahl Attribute hält -> Wenn Anzahl Attribute vorhanden, dann existiert Interface bereits
//schneller als bytecode auf Vorhandensein zu prüfen?!
//Wenn FunN$$ nicht vorhanden, dann erstellen
//Name ändern nach Konvention (FunN$$$_$...$_$)
//Muss FunN$$$_$...$_$ nun Interface sein oder?
//Frage: Worin wird Implementierung "gespeichert"?! --> Was/Wo ist der Bytecode hierfür?
public class ByteCodeForFunNGenerator {
public static void generateBCForFunN(LambdaExpression lambdaExpression, String methDesc, File path) {

View File

@ -185,6 +185,7 @@ public class TypeGenerator {
}else{
Pattern p = Pattern.compile("Fun(\\d+)[$][$]");
Matcher m = p.matcher(name);
//ToDo Etienne: Für Type Erasure wichtig?!
if (m.matches()) {//es ist FunN$$-Type
return new RefType(new JavaClassName(name), convert(typeArguments, reg, generics), offset);
} else {

View File

@ -63,6 +63,7 @@ public class MethodAssumption extends Assumption{
//Die Generics werden alle zu TPHs umgewandelt.
params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken())));
}
//ToDo Etienne: Für Type Erasure wichtig?!
RefTypeOrTPHOrWildcardOrGeneric receiverType;
if(receiver instanceof FunNClass){
receiverType = new RefType(new JavaClassName(receiver.getClassName().toString()+"$$"), params, new NullToken()); // new FunN(params);

View File

@ -68,6 +68,7 @@ public class TYPEStmt implements StatementVisitor{
lambdaParams.add(tphRetType);
//lambdaParams.add(0,tphRetType);
constraintsSet.addUndConstraint(
//ToDo Etienne: Für Type Erasure wichtig?!
new Pair(lambdaExpression.getType(),
new RefType(new JavaClassName("Fun"+(lambdaParams.size()-1)+"$$"), lambdaParams, new NullToken()),
//new FunN(lambdaParams),

View File

@ -21,6 +21,7 @@ public class FunNType extends UnifyType {
/**
* Creates a FunN-Type with the specified TypeParameters.
*/
//ToDo Etienne: Für Type Erasure wichtig?!
protected FunNType(TypeParams p) {
super("Fun"+(p.size()-1)+"$$", p);
}