| // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package lambdadesugaring; | |
| import java.io.Serializable; | |
| public class ValueAdjustments { | |
| interface B2i { | |
| int foo(Byte i); | |
| } | |
| interface BnUnB { | |
| Object foo(boolean z, Boolean Z, byte b, Byte B, char c, Character C, short s, Short S, | |
| int i, Integer I, long l, Long L, float f, Float F, double d, Double D); | |
| } | |
| interface it<T> { | |
| T t(); | |
| } | |
| interface iz { | |
| boolean f(); | |
| } | |
| interface iBoolean { | |
| Boolean f(); | |
| } | |
| interface ib { | |
| byte f(); | |
| } | |
| interface iObject { | |
| Object f(); | |
| } | |
| interface iNumber { | |
| Number f(); | |
| } | |
| interface iSerializableOut { | |
| Serializable f(); | |
| } | |
| interface iSerializableInt { | |
| Object f(Serializable s); | |
| } | |
| interface iComparableOut<T> { | |
| Comparable<T> f(); | |
| } | |
| interface iComparableInt<T> { | |
| Object f(Comparable<T> c); | |
| } | |
| interface iByte { | |
| Byte f(); | |
| } | |
| interface ic { | |
| char f(); | |
| } | |
| interface iCharacter { | |
| Character f(); | |
| } | |
| interface is { | |
| short f(); | |
| } | |
| interface iShort { | |
| Short f(); | |
| } | |
| interface ii { | |
| int f(); | |
| } | |
| interface iInteger { | |
| Integer f(); | |
| } | |
| interface ij { | |
| long f(); | |
| } | |
| interface iLong { | |
| Long f(); | |
| } | |
| interface if_ { | |
| float f(); | |
| } | |
| interface iFloat { | |
| Float f(); | |
| } | |
| interface id { | |
| double f(); | |
| } | |
| interface iDouble { | |
| Double f(); | |
| } | |
| static class B70348575_A { | |
| String greet() { | |
| return "Hello from A"; | |
| } | |
| } | |
| static class B70348575_A1 extends B70348575_A { | |
| @Override | |
| String greet() { | |
| return "Hello from A1"; | |
| } | |
| } | |
| interface B70348575_B { | |
| B70348575_A1 get(); | |
| } | |
| static class B70348575_C<B70348575_AA extends B70348575_A> { | |
| private B70348575_AA a; | |
| B70348575_C(B70348575_AA a) { | |
| this.a = a; | |
| } | |
| B70348575_AA getA() { | |
| return a; | |
| } | |
| } | |
| static class B70348575_C1 extends B70348575_C<B70348575_A1> { | |
| B70348575_C1() { | |
| super(new B70348575_A1()); | |
| } | |
| B70348575_B getB() { | |
| return this::getA; | |
| } | |
| } | |
| private static void checkObject(StringBuffer builder) { | |
| builder | |
| .append(((iObject) ValueAdjustments::z).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::Z).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::b).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::B).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::c).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::C).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::s).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::S).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::i).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::I).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::j).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::J).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::f).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::F).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::d).f()).append(' ') | |
| .append(((iObject) ValueAdjustments::D).f()).append('\n'); | |
| } | |
| private static void checkNumber(StringBuffer builder) { | |
| builder | |
| .append(((iNumber) ValueAdjustments::b).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::B).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::s).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::S).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::i).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::I).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::j).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::J).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::f).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::F).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::d).f()).append(' ') | |
| .append(((iNumber) ValueAdjustments::D).f()).append('\n'); | |
| } | |
| private static void checkSerializableOut(StringBuffer builder) { | |
| builder | |
| .append(((iSerializableOut) ValueAdjustments::z).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::c).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::b).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::s).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::i).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::j).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::f).f()).append(' ') | |
| .append(((iSerializableOut) ValueAdjustments::d).f()).append(' '); | |
| } | |
| private static void checkComparableOut(StringBuffer builder) { | |
| builder | |
| .append(((iComparableOut) ValueAdjustments::z).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::c).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::b).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::s).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::i).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::j).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::f).f()).append(' ') | |
| .append(((iComparableOut) ValueAdjustments::d).f()).append(' '); | |
| } | |
| private static void checkBoxes(StringBuffer builder) { | |
| builder | |
| .append(((iBoolean) ValueAdjustments::z).f()).append(' ') | |
| .append(((iByte) ValueAdjustments::b).f()).append(' ') | |
| .append(((iCharacter) ValueAdjustments::c).f()).append(' ') | |
| .append(((iShort) ValueAdjustments::s).f()).append(' ') | |
| .append(((iInteger) ValueAdjustments::i).f()).append(' ') | |
| .append(((iLong) ValueAdjustments::j).f()).append(' ') | |
| .append(((iFloat) ValueAdjustments::f).f()).append(' ') | |
| .append(((iDouble) ValueAdjustments::d).f()).append('\n'); | |
| } | |
| private static void checkDouble(StringBuffer builder) { | |
| builder | |
| .append(((id) new it<Double>() { | |
| @Override public Double t() { | |
| return (double) (Integer.MAX_VALUE) + 1; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((id) ValueAdjustments::b).f()).append(' ') | |
| .append(((id) ValueAdjustments::B).f()).append(' ') | |
| .append(((id) ValueAdjustments::s).f()).append(' ') | |
| .append(((id) ValueAdjustments::S).f()).append(' ') | |
| .append(((id) ValueAdjustments::c).f()).append(' ') | |
| .append(((id) ValueAdjustments::C).f()).append(' ') | |
| .append(((id) ValueAdjustments::i).f()).append(' ') | |
| .append(((id) ValueAdjustments::I).f()).append(' ') | |
| .append(((id) ValueAdjustments::j).f()).append(' ') | |
| .append(((id) ValueAdjustments::J).f()).append(' ') | |
| .append(((id) ValueAdjustments::f).f()).append(' ') | |
| .append(((id) ValueAdjustments::F).f()).append(' ') | |
| .append(((id) ValueAdjustments::d).f()).append(' ') | |
| .append(((id) ValueAdjustments::D).f()).append('\n'); | |
| } | |
| private static void checkFloat(StringBuffer builder) { | |
| builder | |
| .append(((if_) new it<Float>() { | |
| @Override public Float t() { | |
| return (float) (Short.MAX_VALUE) + 1; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((if_) ValueAdjustments::b).f()).append(' ') | |
| .append(((if_) ValueAdjustments::B).f()).append(' ') | |
| .append(((if_) ValueAdjustments::s).f()).append(' ') | |
| .append(((if_) ValueAdjustments::S).f()).append(' ') | |
| .append(((if_) ValueAdjustments::c).f()).append(' ') | |
| .append(((if_) ValueAdjustments::C).f()).append(' ') | |
| .append(((if_) ValueAdjustments::i).f()).append(' ') | |
| .append(((if_) ValueAdjustments::I).f()).append(' ') | |
| .append(((if_) ValueAdjustments::j).f()).append(' ') | |
| .append(((if_) ValueAdjustments::J).f()).append(' ') | |
| .append(((if_) ValueAdjustments::f).f()).append(' ') | |
| .append(((if_) ValueAdjustments::F).f()).append('\n'); | |
| } | |
| private static void checkLong(StringBuffer builder) { | |
| builder | |
| .append(((ij) new it<Long>() { | |
| @Override public Long t() { | |
| return (long) (Integer.MAX_VALUE) + 1; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((ij) ValueAdjustments::b).f()).append(' ') | |
| .append(((ij) ValueAdjustments::B).f()).append(' ') | |
| .append(((ij) ValueAdjustments::s).f()).append(' ') | |
| .append(((ij) ValueAdjustments::S).f()).append(' ') | |
| .append(((ij) ValueAdjustments::c).f()).append(' ') | |
| .append(((ij) ValueAdjustments::C).f()).append(' ') | |
| .append(((ij) ValueAdjustments::i).f()).append(' ') | |
| .append(((ij) ValueAdjustments::I).f()).append(' ') | |
| .append(((ij) ValueAdjustments::j).f()).append(' ') | |
| .append(((ij) ValueAdjustments::J).f()).append('\n'); | |
| } | |
| private static void checkInt(StringBuffer builder) { | |
| builder | |
| .append(((ii) new it<Integer>() { | |
| @Override public Integer t() { | |
| return Short.MAX_VALUE + 1; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((ii) ValueAdjustments::b).f()).append(' ') | |
| .append(((ii) ValueAdjustments::B).f()).append(' ') | |
| .append(((ii) ValueAdjustments::s).f()).append(' ') | |
| .append(((ii) ValueAdjustments::S).f()).append(' ') | |
| .append(((ii) ValueAdjustments::c).f()).append(' ') | |
| .append(((ii) ValueAdjustments::C).f()).append(' ') | |
| .append(((ii) ValueAdjustments::i).f()).append(' ') | |
| .append(((ii) ValueAdjustments::I).f()).append('\n'); | |
| } | |
| private static void checkShort(StringBuffer builder) { | |
| builder | |
| .append(((is) new it<Short>() { | |
| @Override public Short t() { | |
| return 256; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((is) ValueAdjustments::b).f()).append(' ') | |
| .append(((is) ValueAdjustments::B).f()).append(' ') | |
| .append(((is) ValueAdjustments::s).f()).append(' ') | |
| .append(((is) ValueAdjustments::S).f()).append('\n'); | |
| } | |
| private static void checkChar(StringBuffer builder) { | |
| builder | |
| .append(((ic) new it<Character>() { | |
| @Override public Character t() { | |
| return 'C'; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((ic) ValueAdjustments::c).f()).append(' ') | |
| .append(((ic) ValueAdjustments::C).f()).append('\n'); | |
| } | |
| private static void checkByte(StringBuffer builder) { | |
| builder | |
| .append(((ib) new it<Byte>() { | |
| @Override public Byte t() { | |
| return 11; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((ib) ValueAdjustments::b).f()).append(' ') | |
| .append(((ib) ValueAdjustments::B).f()).append('\n'); | |
| } | |
| private static void checkBoolean(StringBuffer builder) { | |
| builder | |
| .append(((iz) new it<Boolean>() { | |
| @Override public Boolean t() { | |
| return true; | |
| } | |
| }::t).f()).append(' ') | |
| .append(((iz) ValueAdjustments::z).f()).append(' ') | |
| .append(((iz) ValueAdjustments::Z).f()).append('\n'); | |
| } | |
| private static void checkMisc(StringBuffer builder) { | |
| builder | |
| .append(((BnUnB) ValueAdjustments::boxingAndUnboxing).foo(true, false, (byte) 1, (byte) 2, | |
| (char) 33, (char) 44, (short) 5, (short) 6, 7, 8, 9, 10L, 11, 12f, 13, 14d)) | |
| .append('\n') | |
| .append(((BnUnB) ValueAdjustments::boxingAndUnboxingW).foo(true, false, (byte) 1, (byte) 2, | |
| (char) 33, (char) 44, (short) 5, (short) 6, 7, 8, 9, 10L, 11, 12f, 13, 14d)) | |
| .append('\n') | |
| .append(((BnUnB) ValueAdjustments::allSerializable).foo(true, false, (byte) 1, (byte) 2, | |
| (char) 33, (char) 44, (short) 5, (short) 6, 7, 8, 9, 10L, 11, 12f, 13, 14d)) | |
| .append('\n') | |
| .append(((BnUnB) ValueAdjustments::allComparable).foo(true, false, (byte) 1, (byte) 2, | |
| (char) 33, (char) 44, (short) 5, (short) 6, 7, 8, 9, 10L, 11, 12f, 13, 14d)) | |
| .append('\n') | |
| .append(((B2i) (Integer::new)).foo(Byte.valueOf((byte) 44))).append('\n'); | |
| } | |
| static String boxingAndUnboxing(Boolean Z, boolean z, Byte B, byte b, Character C, char c, | |
| Short S, short s, Integer I, int i, Long L, long l, Float F, float f, Double D, double d) { | |
| return "boxingAndUnboxing: " + Z + ":" + z + ":" + B + ":" + b + ":" + C + ":" + c + ":" + S + | |
| ":" + s + ":" + I + ":" + i + ":" + L + ":" + l + ":" + F + ":" + f + ":" + D + ":" + d; | |
| } | |
| static String boxingAndUnboxingW(boolean Z, boolean z, double B, double b, | |
| double C, double c, double S, double s, double I, double i, double L, double l, | |
| double F, double f, double D, double d) { | |
| return "boxingAndUnboxingW: " + Z + ":" + z + ":" + B + ":" + b + ":" + C + ":" + c + ":" + S + | |
| ":" + s + ":" + I + ":" + i + ":" + L + ":" + l + ":" + F + ":" + f + ":" + D + ":" + d; | |
| } | |
| static String allSerializable( | |
| Serializable Z, Serializable z, Serializable B, Serializable b, | |
| Serializable C, Serializable c, Serializable S, Serializable s, | |
| Serializable I, Serializable i, Serializable L, Serializable l, | |
| Serializable F, Serializable f, Serializable D, Serializable d) { | |
| return "allSerializable: " + Z + ":" + z + ":" + B + ":" + b + ":" + C + ":" + c + ":" + S + | |
| ":" + s + ":" + I + ":" + i + ":" + L + ":" + l + ":" + F + ":" + f + ":" + D + ":" + d; | |
| } | |
| static String allComparable( | |
| Comparable Z, Comparable z, Comparable B, Comparable b, | |
| Comparable C, Comparable c, Comparable S, Comparable s, | |
| Comparable I, Comparable i, Comparable L, Comparable l, | |
| Comparable F, Comparable f, Comparable D, Comparable d) { | |
| return "allComparable: " + Z + ":" + z + ":" + B + ":" + b + ":" + C + ":" + c + ":" + S + | |
| ":" + s + ":" + I + ":" + i + ":" + L + ":" + l + ":" + F + ":" + f + ":" + D + ":" + d; | |
| } | |
| static boolean z() { | |
| return true; | |
| } | |
| static byte b() { | |
| return 8; | |
| } | |
| static char c() { | |
| return 'c'; | |
| } | |
| static short s() { | |
| return 16; | |
| } | |
| static int i() { | |
| return 32; | |
| } | |
| static long j() { | |
| return 64; | |
| } | |
| static float f() { | |
| return 0.32f; | |
| } | |
| static double d() { | |
| return 0.64; | |
| } | |
| static Boolean Z() { | |
| return false; | |
| } | |
| static Byte B() { | |
| return -8; | |
| } | |
| static Character C() { | |
| return 'C'; | |
| } | |
| static Short S() { | |
| return -16; | |
| } | |
| static Integer I() { | |
| return -32; | |
| } | |
| static Long J() { | |
| return -64L; | |
| } | |
| static Float F() { | |
| return -0.32f; | |
| } | |
| static Double D() { | |
| return -0.64; | |
| } | |
| private static void bB70348575(StringBuffer builder) { | |
| B70348575_C1 c1 = new B70348575_C1(); | |
| B70348575_A1 a = c1.getB().get(); | |
| builder.append(a.greet()).append('\n'); | |
| } | |
| // Make the test independent of libraries by not using java.util.function.Function. | |
| interface MyFunction<T, R> { | |
| R apply(T var1); | |
| } | |
| static class Observable<T> { | |
| } | |
| static class Handler<T> { | |
| T elements; | |
| Handler(T e) { | |
| elements = e; | |
| } | |
| public T handleErrors(T result) { | |
| System.out.println(result.getClass().getName()); | |
| return null; | |
| } | |
| public final Observable<T> map(MyFunction<? super T, ? extends T> mapper) { | |
| System.out.println("Handler.map"); | |
| mapper.apply(elements); | |
| return null; | |
| } | |
| } | |
| static class B116542124 { | |
| private Handler<String[]> approvalManagersHandler = new Handler<>(new String[] { "asdf" }); | |
| public void test() { | |
| approvalManagersHandler.map(approvalManagersHandler::handleErrors); | |
| } | |
| } | |
| public static void main(String[] args) { | |
| StringBuffer builder = new StringBuffer(); | |
| checkBoolean(builder); | |
| checkByte(builder); | |
| checkChar(builder); | |
| checkShort(builder); | |
| checkInt(builder); | |
| checkLong(builder); | |
| checkFloat(builder); | |
| checkDouble(builder); | |
| checkBoxes(builder); | |
| checkNumber(builder); | |
| checkSerializableOut(builder); | |
| checkComparableOut(builder); | |
| checkObject(builder); | |
| checkMisc(builder); | |
| bB70348575(builder); | |
| new B116542124().test(); | |
| System.out.println(builder.toString()); | |
| } | |
| } |