diff --git a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java index 9dc64b73..321be6b0 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java @@ -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); } diff --git a/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java b/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java index 94e4eb4e..5e48713d 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java @@ -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(">", "$$$")+ ";"; diff --git a/src/main/java/de/dhbwstuttgart/bytecode/utilities/ByteCodeForFunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/utilities/ByteCodeForFunNGenerator.java index 2ab3633d..d7035ec5 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/utilities/ByteCodeForFunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/utilities/ByteCodeForFunNGenerator.java @@ -19,6 +19,12 @@ import java.io.IOException; import java.util.Iterator; //ToDo Etienne: Anpassung für TypeErasure +//static Attribut (HashSet) 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) { diff --git a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java index d55e9349..038cc1ef 100644 --- a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java +++ b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java @@ -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 { diff --git a/src/main/java/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java b/src/main/java/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java index 6e6c5c5a..a1130596 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/assumptions/MethodAssumption.java @@ -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); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 2860e71b..d0c58635 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -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), diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/FunNType.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/FunNType.java index f46ac918..f07b18e3 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/FunNType.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/FunNType.java @@ -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); }