From 77d397fc531e2c4030a5f0d8a64e092f0da263b6 Mon Sep 17 00:00:00 2001 From: Fayez Abu Alia Date: Mon, 13 Aug 2018 18:28:41 +0200 Subject: [PATCH] modified: src/de/dhbwstuttgart/bytecode/BytecodeGen.java modified: src/de/dhbwstuttgart/bytecode/signature/Signature.java modified: src/de/dhbwstuttgart/bytecode/signature/TypeToSignature.java modified: test/bytecode/javFiles/Merge.jav modified: test/bytecode/javFiles/OL.jav modified: test/bytecode/javFiles/Tph.jav modified: test/bytecode/javFiles/Tph3.jav new file: test/bytecode/javFiles/WC.jav --- .../dhbwstuttgart/bytecode/BytecodeGen.java | 1 - .../bytecode/signature/Signature.java | 37 +++++++++++++++++++ .../bytecode/signature/TypeToSignature.java | 4 +- test/bytecode/javFiles/Merge.jav | 4 +- test/bytecode/javFiles/OL.jav | 2 +- test/bytecode/javFiles/Tph.jav | 6 +-- test/bytecode/javFiles/Tph3.jav | 19 ++++++---- test/bytecode/javFiles/WC.jav | 8 ++++ 8 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 test/bytecode/javFiles/WC.jav diff --git a/src/de/dhbwstuttgart/bytecode/BytecodeGen.java b/src/de/dhbwstuttgart/bytecode/BytecodeGen.java index 47a19336..165c888c 100644 --- a/src/de/dhbwstuttgart/bytecode/BytecodeGen.java +++ b/src/de/dhbwstuttgart/bytecode/BytecodeGen.java @@ -247,7 +247,6 @@ public class BytecodeGen implements ASTVisitor { } } } - //TODO: Test if the return-type or any of the parameter is a parameterized type. (VP) //then create the descriptor with the new syntax. diff --git a/src/de/dhbwstuttgart/bytecode/signature/Signature.java b/src/de/dhbwstuttgart/bytecode/signature/Signature.java index 5c5d8d48..4daf3ded 100644 --- a/src/de/dhbwstuttgart/bytecode/signature/Signature.java +++ b/src/de/dhbwstuttgart/bytecode/signature/Signature.java @@ -19,6 +19,7 @@ import de.dhbwstuttgart.syntaxtree.statement.LambdaExpression; import de.dhbwstuttgart.syntaxtree.type.GenericRefType; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric; +import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.result.GenericInsertPair; @@ -442,6 +443,42 @@ public class Signature { sv.visitTypeVariable(sig2.substring(1, sig2.length())); } + break; + + case "SWC": + System.out.println("SWC---Signature"); + SuperWildcardType swc = (SuperWildcardType) t; + String sigInner = swc.getInnerType().acceptTV(new TypeToSignature()); + if(swc.getInnerType() instanceof TypePlaceholder) { + sv.visitTypeArgument('-').visitTypeVariable(sigInner.substring(1, sigInner.length())); + } else if(swc.getInnerType() instanceof RefType) { + if(sigInner.contains("$$")) { + sv.visitTypeArgument('-').visitInterface().visitClassType(sigInner.substring(1,sigInner.length())); + }else { + sv.visitTypeArgument('-').visitClassType(sigInner.substring(1,sigInner.length())); + } + }else { + sv.visitTypeArgument('-').visitTypeVariable(sigInner.substring(1)); + } + + break; + + case "EWC": + System.out.println("EWC---Signature"); + SuperWildcardType ewc = (SuperWildcardType) t; + String esigInner = ewc.getInnerType().acceptTV(new TypeToSignature()); + if(ewc.getInnerType() instanceof TypePlaceholder) { + sv.visitTypeArgument('+').visitTypeVariable(esigInner.substring(1, esigInner.length())); + } else if(ewc.getInnerType() instanceof RefType) { + if(esigInner.contains("$$")) { + sv.visitTypeArgument('+').visitInterface().visitClassType(esigInner.substring(1,esigInner.length())); + }else { + sv.visitTypeArgument('+').visitClassType(esigInner.substring(1,esigInner.length())); + } + }else { + sv.visitTypeArgument('+').visitTypeVariable(esigInner.substring(1)); + } + break; default: if(!isParameterType) diff --git a/src/de/dhbwstuttgart/bytecode/signature/TypeToSignature.java b/src/de/dhbwstuttgart/bytecode/signature/TypeToSignature.java index 2d484ece..6e73d8ee 100644 --- a/src/de/dhbwstuttgart/bytecode/signature/TypeToSignature.java +++ b/src/de/dhbwstuttgart/bytecode/signature/TypeToSignature.java @@ -48,7 +48,7 @@ public class TypeToSignature implements TypeVisitor { @Override public String visit(SuperWildcardType superWildcardType) { // throw new NotImplementedException(); - return "+" + superWildcardType.getInnerType().acceptTV(new TypeToSignature()); + return "-" + superWildcardType.getInnerType().acceptTV(new TypeToSignature()); } @Override @@ -60,7 +60,7 @@ public class TypeToSignature implements TypeVisitor { @Override public String visit(ExtendsWildcardType extendsWildcardType) { // throw new NotImplementedException(); - return "-" + extendsWildcardType.getInnerType().acceptTV(new TypeToSignature()); + return "+" + extendsWildcardType.getInnerType().acceptTV(new TypeToSignature()); } @Override diff --git a/test/bytecode/javFiles/Merge.jav b/test/bytecode/javFiles/Merge.jav index 627e9f45..9240146e 100644 --- a/test/bytecode/javFiles/Merge.jav +++ b/test/bytecode/javFiles/Merge.jav @@ -10,11 +10,11 @@ class Merge { } -/* + sort(in){ var firstHalf = in.subList(1,2); var secondHalf = in.subList(1,2); return merge(sort(firstHalf), sort(secondHalf)); } - */ + } \ No newline at end of file diff --git a/test/bytecode/javFiles/OL.jav b/test/bytecode/javFiles/OL.jav index b231e6a0..68650428 100644 --- a/test/bytecode/javFiles/OL.jav +++ b/test/bytecode/javFiles/OL.jav @@ -14,7 +14,7 @@ public class OL { public class OLMain { - main(java.lang.Integer x) { + main(x) { var ol; ol = new OL(); return ol.m(x); diff --git a/test/bytecode/javFiles/Tph.jav b/test/bytecode/javFiles/Tph.jav index 93233a3a..1160e1a5 100644 --- a/test/bytecode/javFiles/Tph.jav +++ b/test/bytecode/javFiles/Tph.jav @@ -1,9 +1,9 @@ public class Tph { m(a,b){ -// var c = m2(b); -// return c; - return m2(b); + var c = m2(b); + return c; +// return m2(b); } m2(b){ diff --git a/test/bytecode/javFiles/Tph3.jav b/test/bytecode/javFiles/Tph3.jav index 42d5d687..f2bcd2ef 100644 --- a/test/bytecode/javFiles/Tph3.jav +++ b/test/bytecode/javFiles/Tph3.jav @@ -1,10 +1,13 @@ public class Tph3 { - m(a,b){ - var c = m2(a,b); - return c; - } - - m2(a,b){ - return m(a,b); - } +// m(a,b){ +// var c = m2(a,b); +// return c; +// } +// +// m2(a,b){ +// return m(a,b); +// } + m1(x, y) { m2(x); x = y; } + + m2(y) { m1(y, y); } } diff --git a/test/bytecode/javFiles/WC.jav b/test/bytecode/javFiles/WC.jav new file mode 100644 index 00000000..389a4fcd --- /dev/null +++ b/test/bytecode/javFiles/WC.jav @@ -0,0 +1,8 @@ +import java.lang.Integer; +import java.util.List; +public class WC { + + void m (List a, List b) { + + } +} \ No newline at end of file