diff --git a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateExtendsWildcard.java b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateExtendsWildcard.java index d1be0aeb..0bfde0ec 100644 --- a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateExtendsWildcard.java +++ b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateExtendsWildcard.java @@ -1,7 +1,5 @@ package de.dhbwstuttgart.intermediate.types; -import de.dhbwstuttgart.parser.scope.JavaClassName; - /** * Represents a Java Wildcard with a extends-operator. * E.g. {@code <? extends String>} diff --git a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateRefType.java b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateRefType.java index d82bbb71..8c3c541f 100644 --- a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateRefType.java +++ b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateRefType.java @@ -13,7 +13,7 @@ import java.util.List; */ public final class IntermediateRefType extends IntermediateInnerType{ - private final List typParameters; + private final List typParameters; private final JavaClassName className; /** @@ -35,7 +35,7 @@ public final class IntermediateRefType extends IntermediateInnerType{ this(className, new ArrayList<>()); } - public IntermediateRefType(JavaClassName className, List typParameters){ + public IntermediateRefType(JavaClassName className, List typParameters){ this.className = className; this.typParameters = Collections.unmodifiableList(typParameters); } diff --git a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateSuperWildcard.java b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateSuperWildcard.java index 2e806828..33b8cf80 100644 --- a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateSuperWildcard.java +++ b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateSuperWildcard.java @@ -1,7 +1,5 @@ package de.dhbwstuttgart.intermediate.types; -import de.dhbwstuttgart.parser.scope.JavaClassName; - /** * Represents a Java Wildcard with a super-operator. * E.g. {@code <? super String>} diff --git a/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateWildcard.java b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateWildcard.java new file mode 100644 index 00000000..28972776 --- /dev/null +++ b/src/main/java/de/dhbwstuttgart/intermediate/types/IntermediateWildcard.java @@ -0,0 +1,33 @@ +package de.dhbwstuttgart.intermediate.types; + +/** + * Represents a Java wildcard {@code <?>}. + * + * @since Studienarbeit Type Erasure + * @author etiennezink + */ +public class IntermediateWildcard extends IntermediateType{ + + /** + * Caches the hashCode after first computation. + */ + private int hashCode; + + @Override + public boolean equals(Object o) { return o instanceof IntermediateWildcard; } + + @Override + public int hashCode() { + int prime = 31; + int hashCode = this.hashCode; + if (hashCode == 0){ + hashCode += "wildcard".hashCode(); + hashCode = prime * hashCode + "*".hashCode(); + this.hashCode = hashCode; + } + return hashCode; + } + + @Override + public String getSignature() { return "*"; } +} diff --git a/src/test/java/intermediate/types/IntermediateExtensWildcardTest.java b/src/test/java/intermediate/types/IntermediateExtensWildcardTest.java index d82e7baf..f097310a 100644 --- a/src/test/java/intermediate/types/IntermediateExtensWildcardTest.java +++ b/src/test/java/intermediate/types/IntermediateExtensWildcardTest.java @@ -1,11 +1,62 @@ package intermediate.types; -import org.junit.Assert; +import de.dhbwstuttgart.intermediate.types.IntermediateExtendsWildcard; +import de.dhbwstuttgart.intermediate.types.IntermediateGenericType; +import de.dhbwstuttgart.intermediate.types.IntermediateRefType; +import de.dhbwstuttgart.parser.scope.JavaClassName; +import org.junit.BeforeClass; import org.junit.Test; +import org.objectweb.asm.Type; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; public class IntermediateExtensWildcardTest { - @Test - public void ToDo(){ - Assert.fail(); + + private static String integerWildcardSignature; + private static IntermediateRefType integerWildcard; + + private static String tWildcardSignature; + private static IntermediateRefType tWildcard; + + private static IntermediateRefType tWildcardSame; + + @BeforeClass + public static void StartUp(){ + + integerWildcardSignature = "Ljava/util/List<+Ljava/lang/Integer;>;"; + integerWildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateExtendsWildcard(new IntermediateRefType(new JavaClassName(Type.getInternalName(Integer.class)))))); + + tWildcardSignature = "Ljava/util/List<+TT;>;"; + tWildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateExtendsWildcard(new IntermediateGenericType("T")))); + + tWildcardSame = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateExtendsWildcard(new IntermediateGenericType("T")))); } + + @Test + public void SignatureTest_Integer(){ assertEquals(integerWildcardSignature, integerWildcard.getSignature()); } + + @Test + public void SignatureTest_T(){ assertEquals(tWildcardSignature, tWildcard.getSignature()); } + + @Test + public void HashCodeTest_Succeed() { assertEquals(tWildcardSame.hashCode(), tWildcard.hashCode());} + + @Test + public void HashCodeTest_Fail() { assertNotEquals(tWildcardSame.hashCode(), integerWildcard.hashCode()); } + + @Test + public void EqualsTest_Succeed() { assertEquals(tWildcardSame, tWildcard); } + + @Test + public void EqualsTest_Fail() { assertNotEquals(tWildcardSame, integerWildcard); } } diff --git a/src/test/java/intermediate/types/IntermediateGenericTypeTest.java b/src/test/java/intermediate/types/IntermediateGenericTypeTest.java index 5ab67f3e..f680e5c3 100644 --- a/src/test/java/intermediate/types/IntermediateGenericTypeTest.java +++ b/src/test/java/intermediate/types/IntermediateGenericTypeTest.java @@ -8,7 +8,6 @@ import org.junit.Test; import org.objectweb.asm.Type; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; diff --git a/src/test/java/intermediate/types/IntermediateSuperWildcardTest.java b/src/test/java/intermediate/types/IntermediateSuperWildcardTest.java index 7ba44c31..4571ddf5 100644 --- a/src/test/java/intermediate/types/IntermediateSuperWildcardTest.java +++ b/src/test/java/intermediate/types/IntermediateSuperWildcardTest.java @@ -1,11 +1,62 @@ package intermediate.types; -import org.junit.Assert; +import de.dhbwstuttgart.intermediate.types.IntermediateGenericType; +import de.dhbwstuttgart.intermediate.types.IntermediateRefType; +import de.dhbwstuttgart.intermediate.types.IntermediateSuperWildcard; +import de.dhbwstuttgart.parser.scope.JavaClassName; +import org.junit.BeforeClass; import org.junit.Test; +import org.objectweb.asm.Type; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; public class IntermediateSuperWildcardTest { - @Test - public void ToDo(){ - Assert.fail(); + + private static String integerWildcardSignature; + private static IntermediateRefType integerWildcard; + + private static String tWildcardSignature; + private static IntermediateRefType tWildcard; + + private static IntermediateRefType tWildcardSame; + + @BeforeClass + public static void StartUp(){ + + integerWildcardSignature = "Ljava/util/List<-Ljava/lang/Integer;>;"; + integerWildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateSuperWildcard(new IntermediateRefType(new JavaClassName(Type.getInternalName(Integer.class)))))); + + tWildcardSignature = "Ljava/util/List<-TT;>;"; + tWildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateSuperWildcard(new IntermediateGenericType("T")))); + + tWildcardSame = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateSuperWildcard(new IntermediateGenericType("T")))); } + + @Test + public void SignatureTest_Integer(){ assertEquals(integerWildcardSignature, integerWildcard.getSignature()); } + + @Test + public void SignatureTest_T(){ assertEquals(tWildcardSignature, tWildcard.getSignature()); } + + @Test + public void HashCodeTest_Succeed() { assertEquals(tWildcardSame.hashCode(), tWildcard.hashCode());} + + @Test + public void HashCodeTest_Fail() { assertNotEquals(tWildcardSame.hashCode(), integerWildcard.hashCode()); } + + @Test + public void EqualsTest_Succeed() { assertEquals(tWildcardSame, tWildcard); } + + @Test + public void EqualsTest_Fail() { assertNotEquals(tWildcardSame, integerWildcard); } } diff --git a/src/test/java/intermediate/types/IntermediateWildcardTest.java b/src/test/java/intermediate/types/IntermediateWildcardTest.java new file mode 100644 index 00000000..b804d9e9 --- /dev/null +++ b/src/test/java/intermediate/types/IntermediateWildcardTest.java @@ -0,0 +1,57 @@ +package intermediate.types; + +import de.dhbwstuttgart.intermediate.types.IntermediateExtendsWildcard; +import de.dhbwstuttgart.intermediate.types.IntermediateGenericType; +import de.dhbwstuttgart.intermediate.types.IntermediateRefType; +import de.dhbwstuttgart.intermediate.types.IntermediateWildcard; +import de.dhbwstuttgart.parser.scope.JavaClassName; +import org.junit.BeforeClass; +import org.junit.Test; +import org.objectweb.asm.Type; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class IntermediateWildcardTest { + + private static String wildcardSignature; + private static IntermediateRefType wildcard; + + private static IntermediateRefType wildcardSame; + private static IntermediateRefType tWildcard; + + @BeforeClass + public static void StartUp(){ + + wildcardSignature = "Ljava/util/List<*>;"; + wildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateWildcard())); + + wildcardSame = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateWildcard())); + + tWildcard = new IntermediateRefType( + new JavaClassName(Type.getInternalName(List.class)), + Arrays.asList(new IntermediateExtendsWildcard(new IntermediateGenericType("T")))); + } + + @Test + public void SignatureTest_Wildcard(){ assertEquals(wildcardSignature, wildcard.getSignature()); } + + @Test + public void HashCodeTest_Succeed() { assertEquals(wildcardSame.hashCode(), wildcard.hashCode());} + + @Test + public void HashCodeTest_Fail() { assertNotEquals(wildcardSame.hashCode(), tWildcard.hashCode()); } + + @Test + public void EqualsTest_Succeed() { assertEquals(wildcardSame, wildcard); } + + @Test + public void EqualsTest_Fail() { assertNotEquals(wildcardSame, tWildcard); } +}