/* * Copyright 2010-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.eval4j.test; class TestData extends BaseTestData { static void returnVoid() { } static boolean returnBoolean() { return true; } static byte returnByte() { return 2; } static short returnShort() { return 2; } static char returnChar() { return '2'; } static int returnInt() { return 2; } static long returnLong() { return 2; } static float returnFloat() { return 2.0f; } static double returnDouble() { return 2.0d; } static Object returnNull() { return null; } static String returnString() { return "str"; } static Object returnStringAsObject() { return "str"; } static void checkCastNull() { CheckCastToNull klass = new CheckCastToNull(); klass.f1(null); klass.f2(null); klass.f3(null); Integer integer = (Integer) null; Object object = (Object) null; } static class CheckCastToNull { void f1(Integer p) {} void f2(Integer[] p) {} void f3(Integer[][] p) {} } static Integer integerValueOf() { return 1; } static Byte byteValueOf() { return 1; } static Short shortValueOf() { return 1; } static Long longValueOf() { return 1L; } static Float floatValueOf() { return 1.0f; } static Double doubleValueOf() { return 1.0; } static Character charValueOf() { return 1; } static Boolean booleanValueOf() { return true; } static void castFieldTypes() { CastFieldType.i = 1; CastFieldType.b = 1; CastFieldType.s = 1; CastFieldType.c = 1; CastFieldType.bool = true; CastFieldType.l = 1; CastFieldType.f = 1.0f; CastFieldType.d = 1.0; CastFieldType klass = new CastFieldType(); klass.im = 1; klass.bm = 1; klass.sm = 1; klass.cm = 1; klass.boolm = true; klass.lm = 1; klass.fm = 1; klass.dm = 1; Integer i = klass.im; Byte b = klass.bm; Short s = klass.sm; Character c = klass.cm; Boolean bool = klass.boolm; Long l = klass.lm; Float f = klass.fm; Double d = klass.dm; int i2 = klass.bm; int i3 = klass.sm; int i4 = klass.cm; } static class CastFieldType { static int i = 1; static byte b = 1; static short s = 1; static char c = 1; static boolean bool = true; static long l = 1; static float f = 1; static double d = 1; int im = 1; byte bm = 1; short sm = 1; char cm = 1; boolean boolm = true; long lm = 1; float fm = 1; double dm = 1; } static void castArrayElementType() { int[] i = new int[1]; i[0] = 1; short[] s = new short[1]; s[0] = 1; byte[] b = new byte[1]; b[0] = 1; char[] c = new char[1]; c[0] = 1; boolean[] bool = new boolean[1]; bool[0] = true; long[] l = new long[1]; l[0] = 1; float[] f = new float[1]; f[0] = 1; double[] d = new double[1]; d[0] = 1; } static int variable() { int i = 153; return i; } static int unaryMinus() { int i = 153; return -i; } static int ifThen() { boolean a = true; if (a) return 2; return 1; } static int ifElse() { boolean a = false; if (a) { return 2; } else { return 1; } } static int loop() { int i = 0; while (i < 10) i++; return i; } static int loopWithBreak() { int i = 0; while (true) { if (i > 10) break; i++; } return i; } static int loopWithReturn() { int i = 0; while (true) { if (i > 10) return i; i++; } } static int simpleFinally() { int i = 5; try { return i; } finally { i = 3; } } static int simpleFinallyWithReturn() { int i = 5; try { return i; } finally { return 3; } } static int simpleFinallyWithContinueInLoop() { int i = 5; while (true) { try { if (i % 2 == 0) continue; if (i > 10) return i; } finally { i++; } } } static int simpleFinallyWithBreakInLoop() { int i = 5; while (true) { try { if (i % 2 == 0) break; } finally { i++; } } return i; } static Object call() { return Integer.valueOf(1); } static Object callWithObject() { return String.valueOf("str"); } static Object getStaticField() { return C.FOO; } static int FIELD = 0; static int putStaticField() { FIELD = 5; int f1 = FIELD; FIELD = 6; int f2 = FIELD; return f2 + f1; } static class C { static String FOO = "FOO"; int y = 15; C(int y) { this.y = y; } C() {} int getY() { return y; } static C newC() { return new C(); } static void throwException() { throw new RuntimeException(); } } static int getInstanceField() { return C.newC().y; } static int putInstanceField() { C c = C.newC(); c.y = 5; int f1 = c.y; c.y = 6; int f2 = c.y; return f1 + f2; } static int instanceMethod() { return C.newC().getY(); } static int constructorCallNoArgs() { return new C().y; } static int constructorCallWithArgs() { return new C(10).y; } static class MyEx extends RuntimeException { final int x; MyEx(int x) { this.x = x; } } static int tryCatch() { try { throw new MyEx(10); } catch (MyEx e) { return e.x; } } static int tryWiderCatch() { int a = 10; try { if (a > 0) { throw new MyEx(10); } } catch (Exception e) { return ((MyEx) e).x; } return 2; } static int classCastException() { Object a = ""; try { Integer s = (Integer) a; } catch (ClassCastException e) { return 1; } return 2; } static String classLiteral() { return String.class.toString(); } static int callThrowingMethod() { try { C.throwException(); } catch (RuntimeException e) { return 1; } return 0; } static int NPE() { try { Object x = null; x.toString(); } catch (NullPointerException e) { return 1; } return 0; } static Class<?> arrayClass() { return int[].class; } static int arrayOfByte() { byte[] a = new byte[] {1, 2, 3}; int sum = 0; for (int i : a) { sum += i; } return sum; } static int arrayOfShort() { short[] a = new short[] {1, 2, 3}; int sum = 0; for (int i : a) { sum += i; } return sum; } static int arrayOfChar() { char[] a = new char[] {1, 2, 3}; int sum = 0; for (int i : a) { sum += i; } return sum; } static int arrayOfInt() { int[] a = new int[] {1, 2, 3}; int sum = 0; for (int i : a) { sum += i; } return sum; } static int arrayOfLong() { long[] a = new long[] {1, 2, 3}; int sum = 0; for (long i : a) { sum += i; } return sum; } static float arrayOfFloat() { float[] a = new float[] {1, 2, 3}; float sum = 0; for (float i : a) { sum += i; } return sum; } static double arrayOfDouble() { double[] a = new double[] {1, 2, 3}; double sum = 0; for (double i : a) { sum += i; } return sum; } static String arrayOfString() { String[] a = new String[] {"1", "2", "3"}; String sum = ""; for (String i : a) { sum += i; } return sum; } static int arrayOfByte2() { byte[][] a = new byte[][] {{1}, {2}, {3}}; int sum = 0; for (byte[] aa: a) for (int i : aa) { sum += i; } return sum; } static int arrayOfShort2() { short[][] a = new short[][] {{1}, {2}, {3}}; int sum = 0; for (short[] aa: a) for (int i : aa) { sum += i; } return sum; } static int arrayOfChar2() { char[][] a = new char[][] {{1}, {2}, {3}}; int sum = 0; for (char[] aa: a) for (int i : aa) { sum += i; } return sum; } static int arrayOfInt2() { int[][] a = new int[][] {{1}, {2}, {3}}; int sum = 0; for (int[] aa: a) for (int i : aa) { sum += i; } return sum; } static int arrayOfLong2() { long[][] a = new long[][] {{1}, {2}, {3}}; int sum = 0; for (long[] aa: a) for (long i : aa) { sum += i; } return sum; } static float arrayOfFloat2() { float[][] a = new float[][] {{1}, {2}, {3}}; float sum = 0; for (float[] aa: a) for (float i : aa) { sum += i; } return sum; } static double arrayOfDouble2() { double[][] a = new double[][] {{1}, {2}, {3}}; double sum = 0; for (double[] aa: a) for (double i : aa) { sum += i; } return sum; } static String arrayOfString2() { String[][] a = new String[][] {{"1"}, {"2"}, {"3"}}; String sum = ""; for (String[] aa: a) for (String i : aa) { sum += i; } return sum; } static String multiArrayOfInt() { int[][] a = new int[2][2]; String s = ""; for (int[] x : a) for (int y : x) { s += y; } return s; } static String multiArrayOfString() { String[][] a = new String[2][2]; for (String[] x : a) for (int i = 0; i < x.length; i++) { x[i] = i + ""; } String s = ""; for (String[] x : a) for (String y : x) { s += y; } return s; } static void castToArray() { int[] i = (int[]) null; } static void classNotLoadedException() { ClassNotLoadedExceptionTest klass = new ClassNotLoadedExceptionTest(); klass.f1(null); klass.f2(null); klass.f3(null); klass.f4(null, 1); klass.f5(null, null); klass.f6(null, null); ClassNotLoadedExceptionTest.s1(null); ClassNotLoadedExceptionTest.s2(null); ClassNotLoadedExceptionTest.s3(null); ClassNotLoadedExceptionTest.s4(null, 1); ClassNotLoadedExceptionTest.s5(null, null); ClassNotLoadedExceptionTest.s6(null, null); new ClassNotLoadedExceptionTest(null, null, null); new ClassNotLoadedExceptionTest(null, 1, null, null); } static class ClassNotLoadedExceptionTest { ClassNotLoadedExceptionTest() {} // instance methods static class F1 {} void f1(F1 p) {} static class F2 {} void f2(F2[] p) {} static class F3 {} void f3(F3[][] p) {} static class F4 {} void f4(F4[] p, int p2) {} static class F5 {} void f5(F5[] p, int[] p2) {} static class F6 {} void f6(F6[] p, int[][] p2) {} // static methods static class S1 {} static void s1(S1 p) {} static class S2 {} static void s2(S2[] p) {} static class S3 {} static void s3(S3[][] p) {} static class S4 {} static void s4(S4[] p, int p2) {} static class S5 {} static void s5(S5[] p, int[] p2) {} static class S6 {} static void s6(S6[] p, int[][] p2) {} // constructor static class C2 {} static class C1 {} static class C3 {} ClassNotLoadedExceptionTest(C1 p, C2[] p2, C3[][] p3) {} static class C4 {} ClassNotLoadedExceptionTest(C4 p, int p2, int[] p3, int[][] p4) {} } static void loadLibraryClasses() { LoadLibraryClasses klass = new LoadLibraryClasses(); klass.f1(1); klass.f2(LoadLibraryClasses.str()); klass.f3(LoadLibraryClasses.c()); klass.f4(LoadLibraryClasses.cl()); } static class LoadLibraryClasses { void f1(Integer i) {} void f2(String s) {} void f3(Class c) {} void f4(ClassLoader cl) {} static ClassLoader cl() { return null; } static String str() { return null; } static Class c() { return null; } } static int numberIntValue() { Number n = 1; return n.intValue(); } static void getValueFromStack() { int i = 1; boolean b = true; Integer[] IFEQ = new Integer[] { b ? 100 : 200 }; Integer[] IF_ICMPNE = new Integer[] { i == 1 ? 100 : 200 }; long l = 1; Long[] IFEQ_L = new Long[] { b ? 100L : 200L }; } @Override String superCall() { return "Derived"; } @IgnoreInReflectionTests String testInvokeSpecialForSuperCall() { return super.superCall(); } @IgnoreInReflectionTests static String testInvokeSpecial() { TestData td = new TestData(); return td.invokeSpecialPrivateFun(""); } private String invokeSpecialPrivateFun(String s) { return "Base"; } static Throwable exception1() { throw new IllegalStateException(); } static void exception2() { new ExceptionsTest().f1(); } static void exceptionClassCast() { ExceptionsTest.Derived test = (ExceptionsTest.Derived) new ExceptionsTest.Base(); } static class ExceptionsTest { void f1() { throw new IllegalStateException(); } static class Base {} static class Derived extends Base {} } static boolean exceptionIndexOutOfBounds() { int[] ints = new int[1]; try { int i = ints[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { ints[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } short[] shorts = new short[1]; try { short s = shorts[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { shorts[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } char[] chars = new char[1]; try { char c = chars[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { chars[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } byte[] bytes = new byte[1]; try { byte b = bytes[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { bytes[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } long[] longs = new long[1]; try { long l = longs[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { longs[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } double[] doubles = new double[1]; try { double d = doubles[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { doubles[2] = 1.0; return false; } catch (ArrayIndexOutOfBoundsException e) { } float[] floats = new float[1]; try { float f = floats[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { floats[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } boolean[] booleans = new boolean[1]; try { boolean bool = booleans[2];return false; } catch (ArrayIndexOutOfBoundsException e) { } try { booleans[2] = true; return false; } catch (ArrayIndexOutOfBoundsException e) { } Object[] objects = new Object[1]; try { Object o = objects[2]; return false; } catch (ArrayIndexOutOfBoundsException e) { } try { objects[2] = 1; return false; } catch (ArrayIndexOutOfBoundsException e) { } return true; } static boolean indexOutOfBoundsForString() { String str = ""; try { str.charAt(10); return false; } catch (IndexOutOfBoundsException e) { } try { str.substring(10); return false; } catch (IndexOutOfBoundsException e) { } return true; } static int coerceByte() { byte[] b = new byte[2]; return b[1]; } @IgnoreInReflectionTests public static void invokeMethodWithArrayOfInterfaces() { BaseToArray[] c = new BaseToArray[1]; TestInvokeWithObjectArray.invokeStaticFun(c); TestInvokeWithObjectArray.invokeStaticPrivateFun(c); TestInvokeWithObjectArray myObj = new TestInvokeWithObjectArray(); myObj.invokeMemberFun(c); myObj.invokeMemberPrivateFun(c); int i = TestInvokeWithObjectArray.primitiveReturnValue(c) + 1; } private static class TestInvokeWithObjectArray { public static void invokeStaticFun(Object[] o) { } public static void invokeStaticPrivateFun(Object[] o) { } public void invokeMemberFun(Object[] o) { } public void invokeMemberPrivateFun(Object[] o) { } public static int primitiveReturnValue(Object[] o) { return 1; } } private interface BaseToArray { } public TestData() { } }