From f1999805912dcd10122de8f8815131f583344aef Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Wed, 12 Jan 2022 13:29:14 +0100 Subject: [PATCH] [java-decompiler] IDEA-246757 Add type annotation test sources GitOrigin-RevId: 7a066131ee0893c98074f4e18c89f2cd577be533 --- .../ArrayNestedTypeAnnotations.java | 9 ++++ .../typeAnnotations/ArrayTypeAnnotations.java | 6 +-- .../testData/src/typeAnnotations/Bar.java | 4 ++ .../src/typeAnnotations/BarGeneric.java | 4 ++ .../ClassSuperTypeAnnotations.java | 4 ++ .../testData/src/typeAnnotations/E.java | 8 +++ .../testData/src/typeAnnotations/F.java | 8 +++ .../testData/src/typeAnnotations/Foo.java | 4 ++ .../GenericArrayNestedTypeAnnotations.java | 9 ++++ .../GenericArrayTypeAnnotations.java | 30 +++++++++++ .../GenericNestedTypeAnnotations.java | 9 ++++ .../GenericTypeAnnotations.java | 20 +++++++ .../InterfaceSuperTypeAnnotations.java | 4 ++ .../testData/src/typeAnnotations/K.java | 4 ++ .../typeAnnotations/LocalTypeAnnotations.java | 53 +++++++++++++++++++ .../MemberDeclarationTypeAnnotations.java | 22 ++++++++ .../NestedTypeAnnotations.java | 9 ++++ .../testData/src/typeAnnotations/V.java | 7 +++ .../testData/src/typeAnnotations/Z.java | 10 ++++ 19 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayNestedTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/Bar.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/BarGeneric.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/ClassSuperTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/E.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/F.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/Foo.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayNestedTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericNestedTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/InterfaceSuperTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/K.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/LocalTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/MemberDeclarationTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/NestedTypeAnnotations.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/V.java create mode 100644 plugins/java-decompiler/engine/testData/src/typeAnnotations/Z.java diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayNestedTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayNestedTypeAnnotations.java new file mode 100644 index 000000000000..b7936f78c1f5 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayNestedTypeAnnotations.java @@ -0,0 +1,9 @@ +package typeAnnotations; + +public class ArrayNestedTypeAnnotations { + @A Z.Y.X.W[] w1; + Z.@B Y.X.W[] @E [] w2; + Z.Y.@C X.W @F [] @A [] @B [] w3; + Z.Y.X.@D W @D [] w4; + @A Z.@B Y.@C X.@D W[][] w5; +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayTypeAnnotations.java index e5a0582cd843..7bb80e66d104 100644 --- a/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayTypeAnnotations.java +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ArrayTypeAnnotations.java @@ -2,10 +2,10 @@ package typeAnnotations; public class ArrayTypeAnnotations implements ParentInterface { @A String[] s1 = new String[0]; - String @B [] s2 = new String[0]; - String @C [][] s3 = new String[0][0]; - String [] @D [] s4 = new String[0][0]; + @A String[] s5() { return null; } + String @B [] s6() { return null; } + @A String @B [] @C [] @D [] s7() { return null; } } diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/Bar.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Bar.java new file mode 100644 index 000000000000..ff2b8fd2f3b1 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Bar.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public interface Bar { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/BarGeneric.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/BarGeneric.java new file mode 100644 index 000000000000..e9bf55fb308b --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/BarGeneric.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public interface BarGeneric { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/ClassSuperTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ClassSuperTypeAnnotations.java new file mode 100644 index 000000000000..4dfc6418c472 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/ClassSuperTypeAnnotations.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public class ClassSuperTypeAnnotations extends @A Foo implements @B Bar, @B BarGeneric<@F String, @A String @B []> { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/E.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/E.java new file mode 100644 index 000000000000..897ea1eacec4 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/E.java @@ -0,0 +1,8 @@ +package typeAnnotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE_USE) +public @interface E { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/F.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/F.java new file mode 100644 index 000000000000..22338597d49c --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/F.java @@ -0,0 +1,8 @@ +package typeAnnotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE_USE) +public @interface F { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/Foo.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Foo.java new file mode 100644 index 000000000000..f48fe22ef4c7 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Foo.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public abstract class Foo { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayNestedTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayNestedTypeAnnotations.java new file mode 100644 index 000000000000..e61220fe9a40 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayNestedTypeAnnotations.java @@ -0,0 +1,9 @@ +package typeAnnotations; + +public class GenericArrayNestedTypeAnnotations { + @A V.U.T @A [] t1; + V.@B U.T[] t2; + V.U.@C T @B [] @D [] t3; + V.U<@D String>.T @F [] t4; + @B V.@A U<@A String>.@A T<@E Boolean, @F Integer, Float>[] t5; +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayTypeAnnotations.java new file mode 100644 index 000000000000..c33a48fd708f --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericArrayTypeAnnotations.java @@ -0,0 +1,30 @@ +package typeAnnotations; + +import java.util.List; +import java.util.Map; + +public class GenericArrayTypeAnnotations { + @A List> l1; + List<@B Comparable> l2; + List> l3; + List> l4; + List> l5; + List> l6; + @A List<@B Comparable<@F Object @C [] @D [] @E []>> l7; + @A List<@A Comparable<@A Object @A [] @A [] @A []>> l8; + Map>> m1; + @B @A Map<@A Object @F [] @E [], @D List<@F @A Map<@B @D Object @A @D [] @D [], @A @B @D Object>>> m2; + @A @B Map<@B Map<@B Map<@B List<@F ? extends @A String @C [] @D [] @E @F []>, @A List<@B ? super @D String @E @A @F [] @F []>>, @A List<@C ?>>, @D List<@A Map<@E Object @F [] @D [], List<@D Object>> @A []> @B [] @C []> @D [] m3; + + @A Map<@A Object, @B List<@C Object @D [] @E [] @F []>> m12() { + return null; + } + + @A List<@B Object> @E [] @F [] l1() { + return null; + } + + @A List<@B Object @C [] @D []> @E [] @F [] l2() { + return null; + } +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericNestedTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericNestedTypeAnnotations.java new file mode 100644 index 000000000000..decd967bf992 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericNestedTypeAnnotations.java @@ -0,0 +1,9 @@ +package typeAnnotations; + +public class GenericNestedTypeAnnotations { + @A V.U.T t1; + V.@B U.T t2; + V.U.@C T t3; + V.U<@D String>.T t4; + V.U.T<@E Boolean, @F Integer, Float> t5; +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericTypeAnnotations.java new file mode 100644 index 000000000000..9943b99f922b --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/GenericTypeAnnotations.java @@ -0,0 +1,20 @@ +package typeAnnotations; + +import java.util.List; +import java.util.Map; + +public class GenericTypeAnnotations { + @A Map> m1; + Map<@B ? extends String, List> m2; + Map> m3; + Map> m4; + Map> m5; + @A @B Map> m6; + Map<@A @B ? extends String, List> m7; + Map> m8; + Map> m9; + Map> m10; + @A Map<@B ? extends @C String, @D List<@E Object>> m11; + @A Map<@A Object, @B List<@C Object>> m12() { return null; } + @A @B List<@C Object> l1() { return null; } +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/InterfaceSuperTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/InterfaceSuperTypeAnnotations.java new file mode 100644 index 000000000000..87097f8e844e --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/InterfaceSuperTypeAnnotations.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public interface InterfaceSuperTypeAnnotations extends @B Bar, @B BarGeneric<@F String, @A String @B []> { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/K.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/K.java new file mode 100644 index 000000000000..fa0266e3846f --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/K.java @@ -0,0 +1,4 @@ +package typeAnnotations; + +public @interface K { +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/LocalTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/LocalTypeAnnotations.java new file mode 100644 index 000000000000..4cf261300247 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/LocalTypeAnnotations.java @@ -0,0 +1,53 @@ +package typeAnnotations; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.List; +import java.util.function.BiFunction; + +public class LocalTypeAnnotations { +// void simple() { +// @A String hello = "Hello"; +// @B String space = " "; +// @C String world = "World"; +// } +// +// void instanceOf() { +// boolean isobj = "Hello world!" instanceof @B Object; +// } +// +// void newArray() { +// @A String @B [] hw = new @C String @D [0]; +// } +// +// void methodRef() { +// BiFunction stringIntegerCharacterBiFunction = @C String::charAt; +// } +// +// void typeArg() { +// BiFunction<@D String, @E Integer, @F Character> stringIntegerCharacterBiFunction = String::charAt; +// } +// +// void tryWithResources() { +// try (@A BufferedReader br = new @B BufferedReader(new @C FileReader("test"))) { +// } catch (@A FileNotFoundException e) { +// e.printStackTrace(); +// } catch (@B IOException e) { +// e.printStackTrace(); +// } +// } + + void combined() { + @A String hello = "Hello!"; + boolean isobj = hello instanceof @B Object; + @C String world = " World!"; + BiFunction stringIntegerCharacterBiFunction = @D String::charAt; + try (BufferedReader br = new BufferedReader(new FileReader("test"))) { + } catch (@E IOException e) { + e.printStackTrace(); + } + @F String test = " Test!"; + } +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/MemberDeclarationTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/MemberDeclarationTypeAnnotations.java new file mode 100644 index 000000000000..28119c3b0391 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/MemberDeclarationTypeAnnotations.java @@ -0,0 +1,22 @@ +package typeAnnotations; + +import java.io.IOException; +import java.io.Serializable; + +public class MemberDeclarationTypeAnnotations<@A P extends @B Number & @F Serializable> { + @B int f1 = 0; + + @K + public @A MemberDeclarationTypeAnnotations() { + } + + @K + public <@A T extends @B Number & @F Serializable> @C Number foo(@D T @E [] a) { + return 0; + } + + @K + public @C Number bar(@D T @E [] a) throws @A IOException, @B IllegalStateException { + return 0; + } +} \ No newline at end of file diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/NestedTypeAnnotations.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/NestedTypeAnnotations.java new file mode 100644 index 000000000000..8d6104be54e4 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/NestedTypeAnnotations.java @@ -0,0 +1,9 @@ +package typeAnnotations; + +public class NestedTypeAnnotations { + @A Z.Y.X.W w1; + Z.@B Y.X.W w2; + Z.Y.@C X.W w3; + Z.Y.X.@D W w4; + @A Z.@B Y.@C X.@D W w5; +} diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/V.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/V.java new file mode 100644 index 000000000000..8ef057ba1a0e --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/V.java @@ -0,0 +1,7 @@ +package typeAnnotations; + +class V { + class U { + class T {} + } +} \ No newline at end of file diff --git a/plugins/java-decompiler/engine/testData/src/typeAnnotations/Z.java b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Z.java new file mode 100644 index 000000000000..ecc2d7aecfe8 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/typeAnnotations/Z.java @@ -0,0 +1,10 @@ +package typeAnnotations; + +public class Z { + class Y { + class X { + class W { + } + } + } +}