diff --git a/CHANGELOG.md b/CHANGELOG.md index c8704136e..c0e5d03f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,27 @@ -Android Runtime Changelog -============================== +# Android Runtime Changelog -0.10.0 (2015, April 17) -== +## 1.0.0 (2015, April 29) + +### New + +* Updated the V8 version to 4.1.0.27. +* Re-implemented debugger support (no more spontaneous dead locks). ### Fixed +* An issue with the error reporting routine. + +### Breaking Changes + +* Renamed global functions: + * `__log` (was `Log`) + * `__debugbreak` (was `waitForDebugger`) + * `__enableVerboseLogging` (was `enableVerboseLogging`) + * `__disableVerboseLogging` (was `disableVerboseLogging`) + * `__exit` (was `fail`) + +## 0.10.0 (2015, April 17) + ### New * Added Dynamic Generator for binding proxies. This boosts the initial loading time, especially on Android 5.0+ devices. diff --git a/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java b/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java index 06eb391b3..91b7f32f3 100644 --- a/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java +++ b/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java @@ -5,8 +5,4 @@ public interface NativeScriptHashCodeProvider int hashCode__super(); boolean equals__super(Object other); - -// void setNativeScriptOverrides(String[] overrides); - - void setNativeScriptOverride(String override); } diff --git a/binding-generator/Generator/src/com/tns/bindings/Dump.java b/binding-generator/Generator/src/com/tns/bindings/Dump.java index 4c63756fe..53307fe6c 100644 --- a/binding-generator/Generator/src/com/tns/bindings/Dump.java +++ b/binding-generator/Generator/src/com/tns/bindings/Dump.java @@ -12,6 +12,8 @@ public class Dump { + public static final char CLASS_NAME_LOCATION_SEPARATOR = '_'; + private static final String callJsMethodSignatureCtor = "Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Z[Ljava/lang/Object;"; private static final String callJsMethodSignatureMethod = "Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;"; private static final String LCOM_TNS = "Lcom/tns/gen/"; @@ -25,7 +27,9 @@ public class Dump static final String initInstanceMethodName = "initInstance"; static final StringBuffer methodDescriptorBuilder = new StringBuffer(); - /** + + + /** * Returns the dex descriptor corresponding to the given method. * * @param m @@ -44,6 +48,24 @@ public String getDexMethodDescriptor(final Method method) return methodDescriptorBuilder.toString(); } + /** + * Returns the dex descriptor corresponding to the given method. + * + * @param m + * a {@link Method Method} object. + * @return the descriptor of the given method. + */ + public String getMethodOverloadDescriptor(final Method method) + { + Class[] parameters = method.getParameterTypes(); + methodDescriptorBuilder.setLength(0); + for (int i = 0; i < parameters.length; ++i) + { + getDexDescriptor(methodDescriptorBuilder, parameters[i]); + } + return methodDescriptorBuilder.toString(); + } + /** * Returns the dex descriptor corresponding to the given method. * @@ -208,20 +230,20 @@ public void generateProxy(ApplicationWriter aw, String proxyName, Class class //String methodSignature = org.objectweb.asm.Type.getMethodDescriptor(Object.class.getMethods()[0]); String tnsClassSignature = LCOM_TNS + classSignature.substring(1, classSignature.length() - 1).replace("$", "_") - + "-" + proxyName + ";"; + + CLASS_NAME_LOCATION_SEPARATOR + proxyName + ";"; ClassVisitor cv = generateClass(aw, classTo, classSignature, tnsClassSignature); Method[] methods = getSupportedMethods(classTo, methodOverrides); methods = groupMethodsByName(methods); - int overridenFieldsCount = (int)Math.ceil(methods.length / 6.0);// + ((methods.length / 8) % 8 != 0 ? 1 : 0); - String[] fieldNames = generateOverrideFields(cv, overridenFieldsCount); + generateFields(cv); Constructor[] ctors = classTo.getConstructors(); - generateCtors(cv, classTo, ctors, classSignature, tnsClassSignature); - - generateMethods(cv, classTo, methods, classSignature, tnsClassSignature, fieldNames); + + boolean hasOverridenCtor = ((methodOverrides != null) && methodOverrides.contains("init")); + generateCtors(cv, classTo, ctors, classSignature, tnsClassSignature, hasOverridenCtor); + generateMethods(cv, classTo, methods, classSignature, tnsClassSignature); cv.visitEnd(); } @@ -233,6 +255,8 @@ private Method[] groupMethodsByName(Method[] methods) { Method method = methods[i]; String methodName = method.getName(); + String methodOverLoadDescriptor = getMethodOverloadDescriptor(method); + methodName += "_" + methodOverLoadDescriptor; if (!result.containsKey(methodName)) { result.put(methodName, method); @@ -397,13 +421,13 @@ private static boolean areMethodSignaturesEqual(Method x, Method y) return result; } - private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] ctors, String classSignature, String tnsClassSignature) + private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] ctors, String classSignature, String tnsClassSignature, boolean hasOverridenCtor) { if (classTo.isInterface()) { try { - generateCtor(cv, classTo, Object.class.getConstructor(), classSignature, tnsClassSignature); + generateCtor(cv, classTo, Object.class.getConstructor(), classSignature, tnsClassSignature, false); } catch (NoSuchMethodException e) { @@ -415,13 +439,13 @@ private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] c { for (Constructor ctor : ctors) { - generateCtor(cv, classTo, ctor, classSignature, tnsClassSignature); + generateCtor(cv, classTo, ctor, classSignature, tnsClassSignature, hasOverridenCtor); } } } - private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor, String classSignature, String tnsClassSignature) + private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor, String classSignature, String tnsClassSignature, boolean hasOverridenCtor) { //TODO: handle generic and vararg ctors if needed String ctorSignature = getDexConstructorDescriptor(ctor); @@ -451,7 +475,10 @@ private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor } generateInitializedBlock(mv, thisRegister, classSignature, tnsClassSignature); - generateCtorOverridenBlock(mv, thisRegister, classSignature, tnsClassSignature); + if (hasOverridenCtor) + { + generateCtorOverridenBlock(mv, thisRegister, ctor, classSignature, tnsClassSignature); + } generateReturnVoid(mv); } @@ -461,17 +488,13 @@ private void generateReturnVoid(MethodVisitor mv) mv.visitEnd(); } - private void generateCtorOverridenBlock(MethodVisitor mv, int thisRegister, String classSignature, String tnsClassSignature) + private void generateCtorOverridenBlock(MethodVisitor mv, int thisRegister, Constructor ctor, String classSignature, String tnsClassSignature) { - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BOOLEAN, tnsClassSignature, "__ctorOverridden", "Z", 1, thisRegister); - Label label = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, label, 1, 0); - mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 0, 0); //put null in register 0 //support creation of params array for callJSMethod invokation + int argCount = generateArrayForCallJsArguments(mv, ctor.getParameterTypes(), thisRegister, classSignature, tnsClassSignature); mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, "init"); //put "init" in register 1 mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 2, 1); //put true to register 2 == isConstructor argument mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, LCOM_TNS_PLATFORM, "callJSMethod", callJsMethodSignatureCtor, new int[] { 3, 1, 2, 0 }); //invoke callJSMethod(this, "init", true, params) - mv.visitLabel(label); } private void generateInitializedBlock(MethodVisitor mv, int thisRegister, String classSignature, String tnsClassSignature) @@ -485,7 +508,7 @@ private void generateInitializedBlock(MethodVisitor mv, int thisRegister, String mv.visitLabel(label); } - private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature, String[] fieldNames) + private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature) { //for (Method method : methods) int fieldNameCounter = 0; @@ -500,13 +523,11 @@ private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods Method sourceMethod = methods[i]; - String fieldName = fieldNames[fieldNameCounter]; - generateMethod(cv, classTo, sourceMethod, i, classSignature, tnsClassSignature, fieldName, bitCounter); + generateMethod(cv, classTo, sourceMethod, i, classSignature, tnsClassSignature, bitCounter); bitCounter *= 2; } - generateSetNativeOverrides(cv, classTo, methods, classSignature, tnsClassSignature, fieldNames); generateEqualsSuper(cv); generateHashCodeSuper(cv); } @@ -533,69 +554,7 @@ private void generateHashCodeSuper(ClassVisitor cv) mv.visitEnd(); } - private void generateSetNativeOverrides(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature, String[] fieldNames) - { - int locaVarsCount = 0; - int thisRegister = locaVarsCount + 1; - - MethodVisitor mv = cv.visitMethod(org.ow2.asmdex.Opcodes.ACC_PUBLIC, "setNativeScriptOverride", "VLjava/lang/String;", null, null); - mv.visitCode(); - mv.visitMaxs(3, 0); - if (classTo.isInterface()) - { - mv.visitInsn(org.ow2.asmdex.Opcodes.INSN_RETURN_VOID); - mv.visitEnd(); - return; - } - - //check if "init" and set __ctorOverriden - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 0, "init"); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_VIRTUAL, "Ljava/lang/String;", "equals", "ZLjava/lang/Object;", new int[] { 2, 0 }); - mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT, 0); - Label skipCtorOverridenLabel = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, skipCtorOverridenLabel, 0, 0); - mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 0, 1); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IPUT_BOOLEAN, tnsClassSignature, "__ctorOverridden", "Z", 0, thisRegister); - Label returnLabel = new Label(); - mv.visitLabel(skipCtorOverridenLabel); - - int fieldNameCounter = 0; - int bitCounter = 1; - for (int i = 0; i < methods.length; i++) - { - if (bitCounter == 128) - { - bitCounter = 1; - fieldNameCounter++; - } - - Method sourceMethod = methods[i]; - String fieldName = fieldNames[fieldNameCounter]; - - - //generate bit set for method - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 0, sourceMethod.getName()); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_VIRTUAL, "Ljava/lang/String;", "equals", "ZLjava/lang/Object;", new int[] { 2, 0 }); - mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT, 0); - Label skipMethod = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, skipMethod, 0, 0); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BYTE, tnsClassSignature, fieldName, "B", 0, thisRegister); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_OR_INT_LIT8, 0, 0, 0, bitCounter); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_INT_TO_BYTE, 0, 0, 0, 0); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IPUT_BYTE, tnsClassSignature, fieldName, "B", 0, thisRegister); //classSignature should be"Ldummy;" - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); //jump to return - mv.visitLabel(skipMethod); - - bitCounter *= 2; - } - - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); //jump to return if the last method is not overriden - mv.visitLabel(returnLabel); - mv.visitInsn(org.ow2.asmdex.Opcodes.INSN_RETURN_VOID); - mv.visitEnd(); - } - - private void generateMethod(ClassVisitor cv, Class classTo, Method method, int methodNumber, String classSignature, String tnsClassSignature, String fieldName, int fieldBit) + private void generateMethod(ClassVisitor cv, Class classTo, Method method, int methodNumber, String classSignature, String tnsClassSignature, int fieldBit) { if (ProxyGenerator.IsLogEnabled) Log.d("TNS.Rungime.Proxy.Generator", "generatingMethod " + method.getName()); @@ -615,12 +574,8 @@ private void generateMethod(ClassVisitor cv, Class classTo, Method method, in if (!classTo.isInterface()) { generateInitializedBlock(mv, thisRegister, classSignature, tnsClassSignature); - generateFieldOverrideCheckBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldName, fieldBit); - } - else - { - generateCallOverrideBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldName, fieldBit); } + generateCallOverrideBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldBit); mv.visitEnd(); } @@ -693,43 +648,10 @@ else if (paramType == Long.TYPE || paramType == Double.TYPE) return thisRegister; } - private void generateFieldOverrideCheckBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, String fieldName, int fieldBit) + private void generateCallOverrideBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, int fieldBit) { - //String methodSignature = org.objectweb.asm.Type.getMethodDescriptor(method); - - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BYTE, tnsClassSignature, fieldName, "B", 1, thisRegister); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_AND_INT_LIT8, 1, 1, 0, fieldBit); - Label callSuperLabel = new Label(); - - //goto "call super implementation" if Less or equal to zero - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_LEZ, callSuperLabel, 1, 0); - //call the override - int argCount = generateArrayForCallJsArguments(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature); - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, method.getName()); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, platformClass, callJSMethodName, callJsMethodSignatureMethod, new int[] { thisRegister, 1, 0 }); - - //Label returnLabel = new Label(); - //mv.visitLabel(returnLabel); - generateReturnFromObject(mv, method.getReturnType(), thisRegister, 1); - - //call super implementation - - //TODO: pass the arguments to the super call - mv.visitLabel(callSuperLabel); - int[] args = generateArgsArray(thisRegister, argCount, method); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_SUPER_RANGE, classSignature, method.getName(), methodDexSignature, args); - generateReturn(mv, method.getReturnType(), thisRegister, 1); - //mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT_OBJECT, 1); - - //goto return - //mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); - } - - private void generateCallOverrideBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, String fieldName, int fieldBit) - { - //call the override - int argCount = generateArrayForCallJsArguments(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature); + int argCount = generateArrayForCallJsArguments(mv, method.getParameterTypes() , thisRegister, classSignature, tnsClassSignature); mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, method.getName()); mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, platformClass, callJSMethodName, callJsMethodSignatureMethod, new int[] { thisRegister, 1, 0 }); @@ -780,54 +702,11 @@ else if (paramType == Long.TYPE || paramType == Double.TYPE) return Arrays.copyOf(argsForSuper, argsForSuperIndex); } - private int[] generateArgsArray(int thisRegister, int argCount, Method method) - { - Class[] paramTypes = method.getParameterTypes(); - int argumentsCount = paramTypes.length; - int[] argsForSuper = new int[1 + argumentsCount*2]; //thisRegister + argCount * 2 since it long and double take 2 registers - - int argsForSuperIndex = 0; - argsForSuper[argsForSuperIndex] = thisRegister; - argsForSuperIndex++; - - int arrayIndex = 0; - while (arrayIndex < argumentsCount) - { - Class paramType = paramTypes[arrayIndex]; - if (paramType.isPrimitive()) - { - if (paramType == Integer.TYPE || paramType == Character.TYPE || paramType == Byte.TYPE || paramType == Short.TYPE || - paramType == Boolean.TYPE || paramType == Float.TYPE) - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - } - else if (paramType == Long.TYPE || paramType == Double.TYPE) - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 2; - argsForSuperIndex++; - } - } - else - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - } - - arrayIndex++; - } - - return Arrays.copyOf(argsForSuper, argsForSuperIndex); - } - /** * Creates new Object[] or null value (when no arguments) and puts it in register 0 */ - private int generateArrayForCallJsArguments(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature) + private int generateArrayForCallJsArguments(MethodVisitor mv, Class[] paramTypes, int thisRegister, String classSignature, String tnsClassSignature) { - Class[] paramTypes = method.getParameterTypes(); int argumentsCount = paramTypes.length; if (argumentsCount == 0) @@ -1098,24 +977,9 @@ else if (targetReturnType.isPrimitive() && (targetReturnType == Double.TYPE || t } } - private String[] generateOverrideFields(ClassVisitor cv, int count) + private void generateFields(ClassVisitor cv) { - String[] fieldNames = new String[count]; - generateCtorOverridenField(cv); generateInitializedField(cv); - for (int i = 0; i < count; i++) - { - fieldNames[i] = "__ho" + i; - generateOverridenField(cv, fieldNames[i]); - } - - return fieldNames; - } - - private void generateOverridenField(ClassVisitor cv, String fieldName) - { - FieldVisitor fv = cv.visitField(org.ow2.asmdex.Opcodes.ACC_PRIVATE, fieldName, "B", null, null); - fv.visitEnd(); } private void generateInitializedField(ClassVisitor cv) @@ -1124,12 +988,6 @@ private void generateInitializedField(ClassVisitor cv) fv.visitEnd(); } - private void generateCtorOverridenField(ClassVisitor cv) - { - FieldVisitor fv = cv.visitField(org.ow2.asmdex.Opcodes.ACC_PRIVATE, "__ctorOverridden", "Z", null, null); - fv.visitEnd(); - } - static final String[] classImplentedInterfaces = new String[] { "Lcom/tns/NativeScriptHashCodeProvider;" }; static final String[] interfaceImplementedInterfaces = new String[] { "Lcom/tns/NativeScriptHashCodeProvider;", "" }; private ClassVisitor generateClass(ApplicationWriter aw, Class classTo, String classSignature, String tnsClassSignature) diff --git a/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java b/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java index 94a9f4cc4..2fce6d093 100644 --- a/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java +++ b/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java @@ -53,7 +53,7 @@ public String generateProxy(String proxyName, Class classToProxy, HashSet clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject"+ CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.TargetObject", clazz); Constructor ctor = clazz.getConstructor(); @@ -133,7 +133,7 @@ private T loadAnyProxy(File proxyFile, T implementationObject) throws Except Platform.implementationObject = (Object)implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen." + implementationObject.getClass().getSuperclass().getCanonicalName() + "-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen." + implementationObject.getClass().getSuperclass().getCanonicalName() + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); Constructor ctor = clazz.getConstructor(); @@ -144,7 +144,7 @@ private T loadAnyProxy(File proxyFile, T implementationObject) throws Except private T loadAnyProxyByClass(File proxyFile, Class proxyClass) throws Exception { DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen." + proxyClass.getName().replace('$', '_') + "-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen." + proxyClass.getName().replace('$', '_') + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); if (!proxyClass.getName().contains("ViewGroup")) @@ -168,7 +168,7 @@ private Button1 loadButton1Proxy(File proxyFile, Button1 implementationObject) t Platform.implementationObject = implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.Button1-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.Button1" + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); Constructor ctor = clazz.getConstructor(); @@ -181,7 +181,7 @@ private TargetObject.TargetInterface loadInterfaceProxy(File proxyFile, TargetOb Platform.implementationObject = implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject_TargetInterface-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject_TargetInterface" + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.TargetObject", clazz); Constructor ctor = clazz.getConstructor(); @@ -189,6 +189,65 @@ private TargetObject.TargetInterface loadInterfaceProxy(File proxyFile, TargetOb return proxy; } + public void test_When_generating_proxy_on_overloaded_method() throws Throwable + { + dump.generateProxy(aw, TargetObject.class, new String[] {"methodWithOverload"}, 0); + aw.visitEnd(); + byte[] generatedBytes = aw.toByteArray(); + + + File proxyFile = saveProxy(generatedBytes); + final Object resultNoArg = new Object(); + class ImplementationObject extends TargetObject + { + @Override + public void methodWithOverload(int o) + { + arg = o; + overrideCalled = true; + } + + @Override + public void methodWithOverload(byte o) + { + arg = o; + overrideCalled = true; + } + + @Override + public void methodWithOverload() + { + arg = resultNoArg; + overrideCalled = true; + } + } + + ImplementationObject implementationObject = new ImplementationObject(); + TargetObject proxy = loadProxy(proxyFile, implementationObject); + implementationObject.arg = null; + implementationObject.overrideCalled = false; + + proxy.methodWithOverload((int)6); + assertTrue("Override should be called with int", implementationObject.overrideCalled == true); + assertTrue("Override should be called with int 6", implementationObject.arg instanceof Integer); + assertEquals(6, implementationObject.arg); + + implementationObject.arg = null; + implementationObject.overrideCalled = false; + proxy.methodWithOverload((byte)8); + assertTrue("Override should be called with byte", implementationObject.overrideCalled == true); + assertTrue("Override should be called with byte 8", implementationObject.arg instanceof Byte); + assertEquals(8, (byte)implementationObject.arg); + + implementationObject.arg = null; + implementationObject.overrideCalled = false; + proxy.methodWithOverload(); + assertTrue("Override should be called with no args", implementationObject.overrideCalled == true); + assertTrue("Override should be called with no args", implementationObject.arg instanceof Object); + assertEquals(resultNoArg, implementationObject.arg); + } + + public void test_When_generating_proxy_on_method_with_object_argument() throws Throwable { dump.generateProxy(aw, TargetObject.class); @@ -209,11 +268,6 @@ public void methodWithObjectArg(Object o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithObjectArg(new Object()); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithObjectArg"); //this cast should succeed - proxy.methodWithObjectArg(new Object()); assertTrue("Override should be called", implementationObject.overrideCalled == true); } @@ -239,12 +293,6 @@ public void methodWithStringArg(String o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithStringArg("not overriden"); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals("not overriden", proxy.arg); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithStringArg"); //this cast should succeed - proxy.methodWithStringArg("overriden"); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals("overriden", implementationObject.arg); @@ -271,12 +319,6 @@ public void methodWithIntArg(int o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithIntArg(5); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(5, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithIntArg"); //this cast should succeed - proxy.methodWithIntArg(6); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(6, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -303,12 +345,6 @@ public void methodWithBooleanArg(boolean o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithBooleanArg(true); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(true, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithBooleanArg"); //this cast should succeed - proxy.methodWithBooleanArg(true); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(true, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -335,12 +371,6 @@ public void methodWithCharArg(char o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithCharArg('x'); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals('x', proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithCharArg"); //this cast should succeed - proxy.methodWithCharArg('b'); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals('b', implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -367,12 +397,6 @@ public void methodWithLongArg(long o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithLongArg(6L); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(6L, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithLongArg"); //this cast should succeed - proxy.methodWithLongArg(7L); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(7L, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -399,12 +423,6 @@ public void methodWithDoubleArg(double o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithDoubleArg(4.0); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(4.0, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithDoubleArg"); //this cast should succeed - proxy.methodWithDoubleArg(5.0); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(5.0, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -431,12 +449,6 @@ public void methodWithFloatArg(float o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithFloatArg((float)33.0); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((float)33.0, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithFloatArg"); //this cast should succeed - proxy.methodWithFloatArg((float)44.0); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((float)44.0, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -463,12 +475,6 @@ public void methodWithByteArg(byte o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithByteArg((byte)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((byte)154, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithByteArg"); //this cast should succeed - proxy.methodWithByteArg((byte)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)164, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -495,13 +501,6 @@ public void methodWithByteArrayArg(byte[] o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithByteArrayArg(new byte[] { (byte)141 }); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - - assertEquals((byte)141, ((byte[])proxy.arg)[0]); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithByteArrayArg"); //this cast should succeed - proxy.methodWithByteArrayArg(new byte[] { (byte)111 }); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)111, ((byte[]) implementationObject.arg)[0]); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -532,15 +531,7 @@ public void methodWithLongAndDoubleArgs(Object arg0, long arg1, Object arg2, dou Object first = new Object(); Object second = new Object(); - proxy.methodWithLongAndDoubleArgs(first, 334534L, second, 345.345); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(first, proxy.arg0); - assertEquals(334534L, proxy.arg1); - assertEquals(second, proxy.arg2); - assertEquals(345.345, proxy.arg3); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithLongAndDoubleArgs"); //this cast should succeed - + proxy.methodWithLongAndDoubleArgs(first, 11222L, second, 346.3456); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(first, implementationObject.arg0); @@ -577,14 +568,7 @@ public byte methodReturningByte(byte o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - byte result = proxy.methodReturningByte((byte)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((byte)154, proxy.arg); - assertEquals((byte)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningByte"); //this cast should succeed - - result = proxy.methodReturningByte((byte)164); + byte result = proxy.methodReturningByte((byte)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)167, implementationObject.arg); assertEquals((byte)168, result); @@ -612,14 +596,7 @@ public char methodReturningChar(char o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - char result = proxy.methodReturningChar('j'); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals('j', proxy.arg); - assertEquals('j', result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningChar"); //this cast should succeed - - result = proxy.methodReturningChar('b'); + char result = proxy.methodReturningChar('b'); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals('v', implementationObject.arg); assertEquals('c', result); @@ -647,14 +624,7 @@ public short methodReturningShort(short o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - short result = proxy.methodReturningShort((short)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((short)154, proxy.arg); - assertEquals((short)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningShort"); //this cast should succeed - - result = proxy.methodReturningShort((short)164); + short result = proxy.methodReturningShort((short)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((short)167, implementationObject.arg); assertEquals((short)168, result); @@ -682,14 +652,7 @@ public int methodReturningInt(int o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - int result = proxy.methodReturningInt((int)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((int)154, proxy.arg); - assertEquals((int)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningInt"); //this cast should succeed - - result = proxy.methodReturningInt((int)164); + int result = proxy.methodReturningInt((int)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((int)167, implementationObject.arg); assertEquals((int)168, result); @@ -717,14 +680,7 @@ public float methodReturningFloat(float o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - float result = proxy.methodReturningFloat((float)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((float)154, proxy.arg); - assertEquals((float)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningFloat"); //this cast should succeed - - result = proxy.methodReturningFloat((float)164); + float result = proxy.methodReturningFloat((float)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((float)167, implementationObject.arg); assertEquals((float)168, result); @@ -752,14 +708,7 @@ public double methodReturningDouble(double o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - double result = proxy.methodReturningDouble((double)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((double)154, proxy.arg); - assertEquals((double)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningDouble"); //this cast should succeed - - result = proxy.methodReturningDouble((float)164); + double result = proxy.methodReturningDouble((float)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((double)167, implementationObject.arg); assertEquals((double)168, result); @@ -787,14 +736,7 @@ public long methodReturningLong(long o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - long result = proxy.methodReturningLong((long)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((long)154, proxy.arg); - assertEquals((long)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningLong"); //this cast should succeed - - result = proxy.methodReturningLong((long)164); + long result = proxy.methodReturningLong((long)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((long)167, implementationObject.arg); assertEquals((long)168, result); @@ -822,14 +764,7 @@ public String methodReturningString(String s) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - String result = proxy.methodReturningString("return string"); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals("return string", proxy.arg); - assertEquals("return string", result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningString"); //this cast should succeed - - result = proxy.methodReturningString("override string"); + String result = proxy.methodReturningString("override string"); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals("override string indeed", implementationObject.arg); assertEquals("override string indeed", result); @@ -857,16 +792,8 @@ public Object methodReturningObject(Object s) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - Object first = new Object(); - Object result = proxy.methodReturningObject(first); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(first, proxy.arg); - assertEquals(first, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningObject"); //this cast should succeed - Object second = new Object(); - result = proxy.methodReturningObject(second); + Object result = proxy.methodReturningObject(second); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(second, implementationObject.arg); assertEquals(overrideResult, result); @@ -1038,66 +965,23 @@ public void methodWithAllTypesOfArgs( TargetObject proxy = loadProxy(proxyFile, implementationObject); Object param0 = new Object(); - int param1 = 42; - Integer param2 = 43; - char param3 = 'p'; - Character param4 = 'j'; - byte param5 = 3; - Byte param6 = 4; - short param7 = 60; - Short param8 = 61; + int param1 = 43; + Integer param2 = 44; + char param3 = 'a'; + Character param4 = 'c'; + byte param5 = 4; + Byte param6 = 5; + short param7 = 61; + Short param8 = 62; boolean param9 = true; Boolean param10 = true; - long param11 = 123456L; - Long param12 = 1234567L; - float param13 = 45.0F; - Float param14 = 46.0F; - double param15 = 456.45; - Double param16 = 456.47; - String param17 = "the string"; - - - proxy.methodWithAllTypesOfArgs(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(param0, proxy.arg0); - assertEquals(param1, proxy.arg1); - assertEquals(param2, proxy.arg2); - assertEquals(param3, proxy.arg3); - assertEquals(param4, proxy.arg4); - assertEquals(param5, proxy.arg5); - assertEquals(param6, proxy.arg6); - assertEquals(param7, proxy.arg7); - assertEquals(param8, proxy.arg8); - assertEquals(param9, proxy.arg9); - assertEquals(param10, proxy.arg10); - assertEquals(param11, proxy.arg11); - assertEquals(param12, proxy.arg12); - assertEquals(param13, proxy.arg13); - assertEquals(param14, proxy.arg14); - assertEquals(param15, proxy.arg15); - assertEquals(param16, proxy.arg16); - assertEquals(param17, proxy.arg17); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithAllTypesOfArgs"); //this cast should succeed - - param0 = new Object(); - param1 = 43; - param2 = 44; - param3 = 'a'; - param4 = 'c'; - param5 = 4; - param6 = 5; - param7 = 61; - param8 = 62; - param9 = true; - param10 = true; - param11 = 1123456L; - param12 = 11234567L; - param13 = 46.0F; - param14 = 47.0F; - param15 = 1456.45; - param16 = 1456.47; - param17 = "overriden string"; + long param11 = 1123456L; + Long param12 = 11234567L; + float param13 = 46.0F; + Float param14 = 47.0F; + double param15 = 1456.45; + Double param16 = 1456.47; + String param17 = "overriden string"; proxy.methodWithAllTypesOfArgs(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17); assertTrue("Override should be called", implementationObject.overrideCalled == true); @@ -1161,7 +1045,7 @@ public void test_When_generating_prox_for_every_cuttenessio_class() throws Throw Dump dump = new Dump(); Class classForName = Class.forName(clazz); //Log.d("Binding.Gen.Test", "Generating Class " + classForName.getName()); - dump.generateProxy(aw, classForName); + dump.generateProxy(aw, classForName, new String[0], 0); aw.visitEnd(); byte[] generatedBytes = aw.toByteArray(); File proxyFile = saveProxy(classForName.getName().replace('$', '_'), generatedBytes); diff --git a/build/project-template/custom_rules.xml b/build/project-template/custom_rules.xml index cf684e470..999b13a63 100644 --- a/build/project-template/custom_rules.xml +++ b/build/project-template/custom_rules.xml @@ -1,6 +1,15 @@ + + + + + + + + + diff --git a/build/project-template/res/values-v21/styles.xml b/build/project-template/res/values-v21/styles.xml index dba3c417b..27a342b99 100644 --- a/build/project-template/res/values-v21/styles.xml +++ b/build/project-template/res/values-v21/styles.xml @@ -1,5 +1,18 @@ + + @style/SpinnerDatePicker + @style/SpinnerTimePicker + + + + + + + diff --git a/build/project-template/res/values/styles.xml b/build/project-template/res/values/styles.xml index 22901efd2..154e78656 100644 --- a/build/project-template/res/values/styles.xml +++ b/build/project-template/res/values/styles.xml @@ -1,20 +1,6 @@ - - - - - - - - + + + + diff --git a/gruntfile.js b/gruntfile.js index 20896e8b6..5be46baf8 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -195,7 +195,19 @@ module.exports = function(grunt) { }, runMetadataGenerator: { cmd: "./node_modules/.bin/generate-metadata " + localCfg.libsDir + " ./dist/framework/assets/metadata" - } + }, + runTests: { + cmd: "npm install && grunt --verbose", + cwd: "./test-app" + }, + antCleanBindingGenerator: { + cmd: "ant clean", + cwd: "./binding-generator/Generator/" + }, + antCleanRunTime: { + cmd: "ant clean", + cwd: "./src/" + }, } }); @@ -206,7 +218,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks("grunt-replace"); grunt.registerTask("generateRuntime", [ - "exec:generateRuntime" + "exec:generateRuntime" ]); grunt.registerTask("generateMetadata", [ @@ -230,6 +242,12 @@ module.exports = function(grunt) { return []; } })()); + + grunt.registerTask("test", [ + "exec:antCleanBindingGenerator", + "exec:antCleanRunTime", + "exec:runTests" + ]); grunt.registerTask("default", [ "clean:build", diff --git a/src/assets/app/bootstrap.js b/src/assets/app/bootstrap.js index 4d762b59f..0e23b86ae 100644 --- a/src/assets/app/bootstrap.js +++ b/src/assets/app/bootstrap.js @@ -1,7 +1,7 @@ global.__onUncaughtError = function(error){ if(error.nativeException){ - Log("err.message: " + error.message); - Log("err.stackTrace: " + error.stackTrace); + __log("err.message: " + error.message); + __log("err.stackTrace: " + error.stackTrace); // false == do not continue execution return false; } diff --git a/src/assets/internal/prepareExtend.js b/src/assets/internal/prepareExtend.js index 94ccff617..376bf9448 100644 --- a/src/assets/internal/prepareExtend.js +++ b/src/assets/internal/prepareExtend.js @@ -57,7 +57,7 @@ var __extends = function(Child, Parent) { } function extend(child, parent) { - Log("TS extend called"); + __log("TS extend called"); if (!child.__extended) { child.__extended = parent.extend(child.name, child.prototype); } @@ -66,7 +66,7 @@ var __extends = function(Child, Parent) { }; Parent.__activityExtend = function(parent, name, implementationObject) { - Log("__activityExtend called"); + __log("__activityExtend called"); return parent.extend(name, implementationObject); }; diff --git a/src/jni/Android.mk b/src/jni/Android.mk index b59d1422a..92850f5ef 100644 --- a/src/jni/Android.mk +++ b/src/jni/Android.mk @@ -62,7 +62,7 @@ include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CPPFLAGS += -std=c++11 LOCAL_MODULE := NativeScript -LOCAL_SRC_FILES := com_tns_Platform.cpp com_tns_JsDebugger.cpp com_tns_AssetExtractor.cpp \ +LOCAL_SRC_FILES := com_tns_Platform.cpp com_tns_JsDebugger.cpp com_tns_AssetExtractor.cpp com_tns_NativeScriptActity.cpp \ JEnv.cpp DirectBuffer.cpp \ JsDebugger.cpp \ NativeScriptRuntime.cpp MetadataNode.cpp MetadataTreeNode.cpp MetadataReader.cpp \ diff --git a/src/jni/ArgConverter.cpp b/src/jni/ArgConverter.cpp index 65c36b64e..ebf4ca53f 100644 --- a/src/jni/ArgConverter.cpp +++ b/src/jni/ArgConverter.cpp @@ -39,6 +39,46 @@ void ArgConverter::Init(JavaVM *jvm) JniLocalRef encoding(env.NewStringUTF("UTF-8")); UTF_8_ENCODING = (jstring)env.NewGlobalRef(encoding); assert(UTF_8_ENCODING != nullptr); + + auto charClass = env.FindClass("java/lang/Character"); + assert(charClass != nullptr); + CHAR_VALUE_METHOD_ID = env.GetMethodID(charClass, "charValue", "()C"); + assert(CHAR_VALUE_METHOD_ID != nullptr); + + auto booleanClass = env.FindClass("java/lang/Boolean"); + assert(booleanClass != nullptr); + BOOLEAN_VALUE_METHOD_ID = env.GetMethodID(booleanClass, "booleanValue", "()Z"); + assert(BOOLEAN_VALUE_METHOD_ID != nullptr); + + auto byteClass = env.FindClass("java/lang/Byte"); + assert(byteClass != nullptr); + BYTE_VALUE_METHOD_ID = env.GetMethodID(byteClass, "byteValue", "()B"); + assert(BYTE_VALUE_METHOD_ID != nullptr); + + auto shortClass = env.FindClass("java/lang/Short"); + assert(shortClass != nullptr); + SHORT_VALUE_METHOD_ID = env.GetMethodID(shortClass, "shortValue", "()S"); + assert(SHORT_VALUE_METHOD_ID != nullptr); + + auto integerClass = env.FindClass("java/lang/Integer"); + assert(integerClass != nullptr); + INT_VALUE_METHOD_ID = env.GetMethodID(integerClass, "intValue", "()I"); + assert(INT_VALUE_METHOD_ID != nullptr); + + auto longClass = env.FindClass("java/lang/Long"); + assert(longClass != nullptr); + LONG_VALUE_METHOD_ID = env.GetMethodID(longClass, "longValue", "()J"); + assert(LONG_VALUE_METHOD_ID != nullptr); + + auto floatClass = env.FindClass("java/lang/Float"); + assert(floatClass != nullptr); + FLOAT_VALUE_METHOD_ID = env.GetMethodID(floatClass, "floatValue", "()F"); + assert(FLOAT_VALUE_METHOD_ID != nullptr); + + auto doubleClass = env.FindClass("java/lang/Double"); + assert(doubleClass != nullptr); + DOUBLE_VALUE_METHOD_ID = env.GetMethodID(doubleClass, "doubleValue", "()D"); + assert(DOUBLE_VALUE_METHOD_ID != nullptr); } void ArgConverter::NativeScriptLongValueOfFunctionCallback(const v8::FunctionCallbackInfo& args) @@ -67,36 +107,21 @@ jlong ArgConverter::ObjectToLong(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "longValue", "()J"); - - return env.CallLongMethod(object, methodID); + return env.CallLongMethod(object, LONG_VALUE_METHOD_ID); } jboolean ArgConverter::ObjectToBoolean(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "booleanValue", "()Z"); - - return env.CallBooleanMethod(object, methodID); + return env.CallBooleanMethod(object, BOOLEAN_VALUE_METHOD_ID); } jchar ArgConverter::ObjectToChar(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "characterValue", "()C"); - - return env.CallCharMethod(object, methodID); + return env.CallCharMethod(object, CHAR_VALUE_METHOD_ID); } @@ -104,36 +129,21 @@ jbyte ArgConverter::ObjectToByte(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "byteValue", "()B"); - - return env.CallByteMethod(object, methodID); + return env.CallByteMethod(object, BYTE_VALUE_METHOD_ID); } jshort ArgConverter::ObjectToShort(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "shortValue", "()S"); - - return env.CallShortMethod(object, methodID); + return env.CallShortMethod(object, SHORT_VALUE_METHOD_ID); } jint ArgConverter::ObjectToInt(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "intValue", "()I"); - - return env.CallIntMethod(object, methodID); + return env.CallIntMethod(object, INT_VALUE_METHOD_ID); } @@ -141,24 +151,14 @@ jfloat ArgConverter::ObjectToFloat(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "floatValue", "()F"); - - return env.CallFloatMethod(object, methodID); + return env.CallFloatMethod(object, FLOAT_VALUE_METHOD_ID); } jdouble ArgConverter::ObjectToDouble(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "doubleValue", "()D"); - - return env.CallDoubleMethod(object, methodID); + return env.CallDoubleMethod(object, DOUBLE_VALUE_METHOD_ID); } @@ -179,9 +179,9 @@ Handle ArgConverter::ConvertJavaArgsToJsArgs(jobjectArray args) int jArrayIndex = 0; for (int i = 0; i < argc; i++) { - jobject argTypeIDObj = env.GetObjectArrayElement(args, jArrayIndex++); - jobject arg = env.GetObjectArrayElement(args, jArrayIndex++); - jobject argJavaClassPath = env.GetObjectArrayElement(args, jArrayIndex++); + JniLocalRef argTypeIDObj(env.GetObjectArrayElement(args, jArrayIndex++)); + JniLocalRef arg(env.GetObjectArrayElement(args, jArrayIndex++)); + JniLocalRef argJavaClassPath(env.GetObjectArrayElement(args, jArrayIndex++)); jint length; jint argTypeID = ObjectToInt(argTypeIDObj); @@ -246,7 +246,7 @@ Handle ArgConverter::jcharToV8String(jchar value) { JEnv env; - jstring str = env.NewString(&value, 1); + JniLocalRef str(env.NewString(&value, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); auto v8String = ConvertToV8String(resP, 1); @@ -347,4 +347,12 @@ Persistent* ArgConverter::NATIVESCRIPT_NUMERA_CTOR_FUNC = nullptr; Persistent* ArgConverter::NAN_NUMBER_OBJECT = nullptr; jclass ArgConverter::STRING_CLASS = nullptr; jmethodID ArgConverter::GET_BYTES_METHOD_ID = nullptr; +jmethodID ArgConverter::CHAR_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::BOOLEAN_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::BYTE_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::SHORT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::INT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::LONG_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::FLOAT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::DOUBLE_VALUE_METHOD_ID = nullptr; jstring ArgConverter::UTF_8_ENCODING = nullptr; diff --git a/src/jni/ArgConverter.h b/src/jni/ArgConverter.h index 55015cfe3..e7b30e346 100644 --- a/src/jni/ArgConverter.h +++ b/src/jni/ArgConverter.h @@ -82,6 +82,14 @@ namespace tns static jclass STRING_CLASS; static jmethodID GET_BYTES_METHOD_ID; + static jmethodID CHAR_VALUE_METHOD_ID; + static jmethodID BOOLEAN_VALUE_METHOD_ID; + static jmethodID BYTE_VALUE_METHOD_ID; + static jmethodID SHORT_VALUE_METHOD_ID; + static jmethodID INT_VALUE_METHOD_ID; + static jmethodID LONG_VALUE_METHOD_ID; + static jmethodID FLOAT_VALUE_METHOD_ID; + static jmethodID DOUBLE_VALUE_METHOD_ID; static jstring UTF_8_ENCODING; }; diff --git a/src/jni/ArrayElementAccessor.cpp b/src/jni/ArrayElementAccessor.cpp index 3edb67873..bc53dce1e 100644 --- a/src/jni/ArrayElementAccessor.cpp +++ b/src/jni/ArrayElementAccessor.cpp @@ -52,7 +52,7 @@ Handle ArrayElementAccessor::GetArrayElement(const Handle& array, jcharArray charArr = reinterpret_cast(arr); jchar charArrValue; env.GetCharArrayRegion(charArr, startIndex, length, &charArrValue); - jstring s = env.NewString(&charArrValue, 1); + JniLocalRef s(env.NewString(&charArrValue, 1)); const char* singleChar = env.GetStringUTFChars(s, &isCopy); value = CheckForArrayAccessException(env, elementSignature, singleChar); env.ReleaseStringUTFChars(s, singleChar); @@ -129,7 +129,7 @@ void ArrayElementAccessor::SetArrayElement(const Handle& array, uint32_t else if (elementSignature == "C") { String::Utf8Value utf8(value->ToString()); - jstring s = env.NewString((jchar*) *utf8, 1); + JniLocalRef s(env.NewString((jchar*) *utf8, 1)); const char* singleChar = env.GetStringUTFChars(s, &isCopy); jchar charElementValue = *singleChar; env.ReleaseStringUTFChars(s, singleChar); diff --git a/src/jni/Constants.h b/src/jni/Constants.h index 32f00dc87..c970e4062 100644 --- a/src/jni/Constants.h +++ b/src/jni/Constants.h @@ -8,6 +8,8 @@ class Constants const static int PRIMITIVE_TYPE_OFFSET = 1; + const static char CLASS_NAME_LOCATION_SEPARATOR = '_'; + private: Constants() {} }; diff --git a/src/jni/ExceptionUtil.cpp b/src/jni/ExceptionUtil.cpp index b73a27282..8642c9fa0 100644 --- a/src/jni/ExceptionUtil.cpp +++ b/src/jni/ExceptionUtil.cpp @@ -241,7 +241,7 @@ string ExceptionUtil::GetErrorStackTrace(const Handle& stackTrace) return ss.str(); } -bool ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMessage) +void ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMessage) { Isolate *isolate = Isolate::GetCurrent(); auto ex = tc.Exception(); @@ -265,7 +265,7 @@ bool ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMess if (tc.CanContinue()) { jweak javaThrowable = nullptr; - if (ex->IsObject()) + if (!ex.IsEmpty() && ex->IsObject()) { javaThrowable = TryGetJavaThrowableObject(env, ex->ToObject()); } diff --git a/src/jni/ExceptionUtil.h b/src/jni/ExceptionUtil.h index 4d05c5a12..15c06c28e 100644 --- a/src/jni/ExceptionUtil.h +++ b/src/jni/ExceptionUtil.h @@ -16,7 +16,7 @@ namespace tns bool CheckForJavaException(JEnv& env); - bool ThrowExceptionToJava(v8::TryCatch& tc, const std::string& prependMessage = ""); + void ThrowExceptionToJava(v8::TryCatch& tc, const std::string& prependMessage = ""); void ThrowExceptionToJs(const std::string& exceptionMessage); diff --git a/src/jni/FieldAccessor.cpp b/src/jni/FieldAccessor.cpp index 9b80a9e24..c043d2782 100644 --- a/src/jni/FieldAccessor.cpp +++ b/src/jni/FieldAccessor.cpp @@ -106,11 +106,11 @@ Handle FieldAccessor::GetJavaField(const Handle& target, FieldCal result = env.GetCharField(targetJavaObject, fieldId); } - jstring str = env.NewString(&result, 1); + JniLocalRef str(env.NewString(&result, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); - env.ReleaseStringUTFChars(str, resP); fieldResult = handleScope.Escape(ConvertToV8String(resP, 1)); + env.ReleaseStringUTFChars(str, resP); break; } case 'S': //short diff --git a/src/jni/JsArgToArrayConverter.cpp b/src/jni/JsArgToArrayConverter.cpp index 45e5f6479..e3e367af3 100644 --- a/src/jni/JsArgToArrayConverter.cpp +++ b/src/jni/JsArgToArrayConverter.cpp @@ -293,8 +293,8 @@ bool JsArgToArrayConverter::ConvertArg(const Handle& arg, int index) jchar value = '\0'; if (hidden->IsString()) { - string value = ConvertToString(hidden->ToString()); - value = (jchar)value[0]; + string str = ConvertToString(hidden->ToString()); + value = (jchar)str[0]; } jclass clazz = env.FindClass("java/lang/Character"); diff --git a/src/jni/JsDebugger.cpp b/src/jni/JsDebugger.cpp index 95e2b3662..7139177a2 100644 --- a/src/jni/JsDebugger.cpp +++ b/src/jni/JsDebugger.cpp @@ -21,6 +21,9 @@ void JsDebugger::Init(v8::Isolate *isolate, const string& packageName) s_EnqueueMessage = env.GetStaticMethodID(s_JsDebuggerClass, "enqueueMessage", "(Ljava/lang/String;)V"); assert(s_EnqueueMessage != nullptr); + + s_EnableAgent = env.GetStaticMethodID(s_JsDebuggerClass, "enableAgent", "(Ljava/lang/String;IZ)V"); + assert(s_EnqueueMessage != nullptr); } string JsDebugger::GetPackageName() @@ -82,8 +85,27 @@ void JsDebugger::SendCommand(uint16_t *cmd, int length) v8::Debug::SendCommand(isolate, cmd, length, nullptr); } +void JsDebugger::DebugBreakCallback(const v8::FunctionCallbackInfo& args) +{ + JEnv env; + JniLocalRef packageName(env.NewStringUTF(s_packageName.c_str())); + + jint port = 8181; + if ((args.Length() > 0) && args[0]->IsInt32()) + { + port = args[0]->Int32Value(); + } + jboolean jniFalse = JNI_FALSE; + + env.CallStaticVoidMethod(s_JsDebuggerClass, s_EnableAgent, (jstring)packageName, port, jniFalse); + + DebugBreak(); +} + + v8::Isolate* JsDebugger::s_isolate = nullptr; string JsDebugger::s_packageName = ""; jclass JsDebugger::s_JsDebuggerClass = nullptr; jmethodID JsDebugger::s_EnqueueMessage = nullptr; +jmethodID JsDebugger::s_EnableAgent = nullptr; diff --git a/src/jni/JsDebugger.h b/src/jni/JsDebugger.h index 4698b5cee..177e93343 100644 --- a/src/jni/JsDebugger.h +++ b/src/jni/JsDebugger.h @@ -25,6 +25,8 @@ namespace tns static void SendCommand(uint16_t *cmd, int length); + static void DebugBreakCallback(const v8::FunctionCallbackInfo& args); + private: JsDebugger(); @@ -33,6 +35,7 @@ namespace tns static std::string s_packageName; static jclass s_JsDebuggerClass; static jmethodID s_EnqueueMessage; + static jmethodID s_EnableAgent; static v8::Isolate *s_isolate; static const int INVALID_PORT = -1; diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index 516662381..1434a3a35 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -37,8 +37,8 @@ void MetadataNode::SubscribeCallbacks(ObjectManager *objectManager, s_getArrayLength = getArrayLengthCallback; auto isolate = Isolate::GetCurrent(); - auto key = Symbol::New(isolate, ConvertToV8String("tns::MetadataKey")); - s_metadataKey = new Persistent(isolate, key); + auto key = ConvertToV8String("tns::MetadataKey"); + s_metadataKey = new Persistent(isolate, key); } @@ -58,7 +58,7 @@ MetadataNode::MetadataNode(MetadataTreeNode *treeNode) : if (!m_isArray && isInterface) { bool isPrefix; - string impTypeName = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); + auto impTypeName = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); m_implType = isPrefix ? (impTypeName + m_name) : impTypeName; @@ -635,8 +635,8 @@ void MetadataNode::SetTypeMetadata(Isolate *isolate, Handle value, Typ MetadataNode* MetadataNode::GetInstanceMetadata(Isolate *isolate, const Handle& value) { MetadataNode *node = nullptr; - auto key = Local::New(isolate, *s_metadataKey); - auto ext = value->Get(key); + auto key = Local::New(isolate, *s_metadataKey); + auto ext = value->GetHiddenValue(key); if (!ext.IsEmpty()) { node = reinterpret_cast(ext.As()->Value()); @@ -646,8 +646,8 @@ MetadataNode* MetadataNode::GetInstanceMetadata(Isolate *isolate, const Handle value, MetadataNode *node) { - auto key = Local::New(isolate, *s_metadataKey); - value->Set(key, External::New(isolate, node)); + auto key = Local::New(isolate, *s_metadataKey); + value->SetHiddenValue(key, External::New(isolate, node)); } MetadataNode* MetadataNode::GetPackageMetadata(Isolate *isolate, const Handle& value) @@ -734,7 +734,7 @@ void MetadataNode::InterfaceConstructorCallback(const v8::FunctionCallbackInfoSetHiddenValue(ConvertToV8String("implClassName"), ConvertToV8String(fullName)); // @@ -1051,6 +1051,13 @@ MetadataNode::ExtendedClassCacheData MetadataNode::GetCachedExtendedClassData(Is void MetadataNode::ExtendCallMethodHandler(const v8::FunctionCallbackInfo& info) { + if (info.IsConstructCall()) + { + string exMsg("Cannot call 'extend' as constructor"); + ExceptionUtil::GetInstance()->ThrowExceptionToJs(exMsg); + return; + } + SET_PROFILER_FRAME(); Handle implementationObject; @@ -1066,7 +1073,7 @@ void MetadataNode::ExtendCallMethodHandler(const v8::FunctionCallbackInfom_name + '-' + extendNameAndLocation; //ConvertToString(extendName); + auto fullClassName = node->m_name + Constants::CLASS_NAME_LOCATION_SEPARATOR + extendNameAndLocation; //ConvertToString(extendName); auto fullExtendedName = TNS_PREFIX + fullClassName; DEBUG_WRITE("ExtendsCallMethodHandler: extend full name %s", fullClassName.c_str()); @@ -1155,8 +1162,8 @@ bool MetadataNode::GetExtendLocation(string& extendLocation) } string srcFileName = ConvertToString(scriptName); - std::replace(srcFileName.begin(), srcFileName.end(), '/', '-'); - std::replace(srcFileName.begin(), srcFileName.end(), '.', '-'); + std::replace(srcFileName.begin(), srcFileName.end(), '/', '_'); + std::replace(srcFileName.begin(), srcFileName.end(), '.', '_'); int lineNumber = frame->GetLineNumber(); if (lineNumber < 0) { @@ -1179,7 +1186,7 @@ bool MetadataNode::GetExtendLocation(string& extendLocation) } - extendLocationStream << "f" << srcFileName.c_str() << "-l" << lineNumber << "-c" << column << "--"; + extendLocationStream << "f" << srcFileName.c_str() << "_l" << lineNumber << "_c" << column << "__"; //DEBUG_WRITE("EXTEND_LOCATION %s", extendLocationStream.str().c_str()); } } @@ -1261,8 +1268,17 @@ void MetadataNode::CreateTopLevelNamespaces(const Handle& global) } } +void MetadataNode::InjectPrototype(Handle& target, Handle& implementationObject) +{ + auto isolate = Isolate::GetCurrent(); + + implementationObject->SetAccessor(ConvertToV8String("super"), SuperAccessorGetterCallback, nullptr, implementationObject); + implementationObject->SetPrototype(target->GetPrototype()); + target->SetPrototype(implementationObject); +} +string MetadataNode::TNS_PREFIX = "com/tns/gen/"; std::map MetadataNode::s_name2NodeCache; std::map MetadataNode::s_name2TreeNodeCache; std::map MetadataNode::s_treeNode2NodeCache; @@ -1276,10 +1292,9 @@ RegisterInstanceCallback MetadataNode::s_registerInstance = nullptr; GetTypeMetadataCallback MetadataNode::s_getTypeMetadata = nullptr; FindClassCallback MetadataNode::s_findClass = nullptr; GetArrayLengthCallback MetadataNode::s_getArrayLength = nullptr; -string MetadataNode::TNS_PREFIX = "com/tns/gen/"; MetadataReader MetadataNode::s_metadataReader; ObjectManager* MetadataNode::s_objectManager = nullptr; -Persistent* MetadataNode::s_metadataKey = nullptr; +Persistent* MetadataNode::s_metadataKey = nullptr; map*> MetadataNode::s_ctorFuncCache; map MetadataNode::s_extendedCtorFuncCache; diff --git a/src/jni/MetadataNode.h b/src/jni/MetadataNode.h index ff0c6e740..8e25aed49 100644 --- a/src/jni/MetadataNode.h +++ b/src/jni/MetadataNode.h @@ -86,6 +86,8 @@ namespace tns static void BuildMetadata(uint32_t nodesLength, uint8_t *nodeData, uint32_t nameLength, uint8_t *nameData, uint32_t valueLength, uint8_t *valueData); + static void InjectPrototype(v8::Handle& target, v8::Handle& implementationObject); + private: struct MethodCallbackData @@ -259,7 +261,7 @@ namespace tns static MetadataReader s_metadataReader; - static v8::Persistent *s_metadataKey; + static v8::Persistent *s_metadataKey; static ObjectManager *s_objectManager; diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index ded162eb3..657ddd24c 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -41,10 +41,7 @@ void NativeScriptRuntime::Init(JavaVM *jvm, ObjectManager *objectManager) RequireClass = env.FindClass("com/tns/Require"); assert(RequireClass != nullptr); - MAKE_CLASS_INSTANCE_OF_TYPE_STRONG = env.GetStaticMethodID(PlatformClass, "makeClassInstanceOfTypeStrong", "(Ljava/lang/String;)I"); - assert(MAKE_CLASS_INSTANCE_OF_TYPE_STRONG != nullptr); - - CREATE_INSTANCE_METHOD_ID = env.GetStaticMethodID(PlatformClass, "createInstance", "([Ljava/lang/Object;[Ljava/lang/String;II)Ljava/lang/Object;"); + CREATE_INSTANCE_METHOD_ID = env.GetStaticMethodID(PlatformClass, "createInstance", "([Ljava/lang/Object;II)Ljava/lang/Object;"); assert(CREATE_INSTANCE_METHOD_ID != nullptr); CACHE_CONSTRUCTOR_METHOD_ID = env.GetStaticMethodID(PlatformClass, "cacheConstructor", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/String;)I"); @@ -126,17 +123,6 @@ bool NativeScriptRuntime::RegisterInstance(const Handle& jsObject, const return success; } -void NativeScriptRuntime::MakeClassInstanceOfTypeStrong(const string& className, const Handle& classObj) -{ - JEnv env; - - JniLocalRef param(env.NewStringUTF(className.c_str())); - jint javaObjectID = env.CallStaticIntMethod(PlatformClass, MAKE_CLASS_INSTANCE_OF_TYPE_STRONG, (jstring)param); - - jclass clazz = env.FindClass(className); - objectManager->Link(classObj, javaObjectID, clazz); -} - Handle NativeScriptRuntime::GetArrayElement(const Handle& array, uint32_t index, const string& arraySignature) { return arrayElementAccessor.GetArrayElement(array, index, arraySignature); @@ -311,8 +297,8 @@ void NativeScriptRuntime::CallJavaMethod(const Handle& caller, const str JniLocalRef str(env.NewString(&result, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); - env.ReleaseStringUTFChars(str, resP); args.GetReturnValue().Set(ConvertToV8String(resP, 1)); + env.ReleaseStringUTFChars(str, resP); break; } case 'S': //short @@ -544,34 +530,18 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& JEnv env; auto& args = argWrapper.args; - bool hasImplementationObject = !implementationObject.IsEmpty(); - - bool hasImplementationObjectInArgs = isInterface; - - JsArgToArrayConverter argConverter(args, hasImplementationObjectInArgs, argWrapper.outerThis); + JsArgToArrayConverter argConverter(args, isInterface, argWrapper.outerThis); if (argConverter.IsValid()) { - jobjectArray methodOverrides; - if (hasImplementationObject) - { - methodOverrides = GetMethodOverrides(env, implementationObject); - } - else - { - Handle emptyObject; - methodOverrides = GetMethodOverrides(env, emptyObject); - } - jobjectArray javaArgs = argConverter.ToJavaArray(); - int ctorId = GetCachedConstructorId(env, args, name, className, javaArgs, methodOverrides); + int ctorId = GetCachedConstructorId(env, args, name, className, javaArgs, implementationObject); jobject obj = env.CallStaticObjectMethod(PlatformClass, CREATE_INSTANCE_METHOD_ID, javaArgs, - methodOverrides, (jint) objectID, ctorId); @@ -592,10 +562,10 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& return instance; } -int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbackInfo& args, const string& name, const string& className, jobjectArray javaArgs, jobjectArray methodOverrides) +int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbackInfo& args, const string& name, const string& className, jobjectArray javaArgs, const Handle& implementationObject) { int ctorId = -1; - string fullClassName = className + '-' + name; + string fullClassName = className + Constants::CLASS_NAME_LOCATION_SEPARATOR + name; string encodedCtorArgs = MethodCache::EncodeSignature(fullClassName, "", args, false); auto itFound = s_constructorCache.find(encodedCtorArgs); @@ -608,6 +578,7 @@ int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbac { JniLocalRef javaName(env.NewStringUTF(name.c_str())); JniLocalRef javaClassName(env.NewStringUTF(className.c_str())); + jobjectArray methodOverrides = GetMethodOverrides(env, implementationObject); jint id = env.CallStaticIntMethod(PlatformClass, CACHE_CONSTRUCTOR_METHOD_ID, (jstring)javaName, (jstring)javaClassName, javaArgs, methodOverrides); @@ -671,7 +642,7 @@ void NativeScriptRuntime::LogMethodCallback(const v8::FunctionCallbackInfoIsString(), "Log should be called with string parameter"); String::Utf8Value message(args[0]->ToString()); - DEBUG_WRITE(*message); + DEBUG_WRITE("%s", *message); } void NativeScriptRuntime::DumpReferenceTablesMethodCallback(const v8::FunctionCallbackInfo& args) @@ -688,11 +659,6 @@ void NativeScriptRuntime::DumpReferenceTablesMethodCallback(const v8::FunctionCa } } -void NativeScriptRuntime::WaitForDebuggerMethodCallback(const v8::FunctionCallbackInfo& args) -{ - // TODO: -} - void NativeScriptRuntime::EnableVerboseLoggingMethodCallback(const v8::FunctionCallbackInfo& args) { JEnv env; @@ -705,7 +671,7 @@ void NativeScriptRuntime::DisableVerboseLoggingMethodCallback(const v8::Function env.CallStaticVoidMethod(PlatformClass, DISABLE_VERBOSE_LOGGING_METHOD_ID); } -void NativeScriptRuntime::FailMethodCallback(const v8::FunctionCallbackInfo& args) +void NativeScriptRuntime::ExitMethodCallback(const v8::FunctionCallbackInfo& args) { auto msg = ConvertToString(args[0].As()); ASSERT_MESSAGE(false, "%s", msg.c_str()); @@ -930,7 +896,7 @@ void NativeScriptRuntime::BuildMetadata(JEnv& env, jstring filesPath) long millis1 = (time1.tv_sec * 1000) + (time1.tv_usec / 1000); long millis2 = (time2.tv_sec * 1000) + (time2.tv_usec / 1000); - __android_log_print(ANDROID_LOG_DEBUG, "TNS.Native", "time=%d", (millis2 - millis1)); + __android_log_print(ANDROID_LOG_DEBUG, "TNS.Native", "time=%ld", (millis2 - millis1)); MetadataNode::BuildMetadata(lenNodes, reinterpret_cast(nodes), lenNames, reinterpret_cast(names), lenValues, reinterpret_cast(values)); @@ -945,7 +911,7 @@ void NativeScriptRuntime::CreateTopLevelNamespaces(const Handle& global) MetadataNode::CreateTopLevelNamespaces(global); } -Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const Handle& jsObject, jstring methodName, jobjectArray args, TryCatch& tc) +Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const Handle& jsObject, const string& methodName, jobjectArray args, TryCatch& tc) { SET_PROFILER_FRAME(); @@ -956,18 +922,13 @@ Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const HandleGet(ConvertToV8String(name2)); + auto method = jsObject->Get(ConvertToV8String(methodName)); if (method.IsEmpty() || method->IsUndefined()) { - string name = ConvertToString(jsMethodName); - stringstream ss; - ss << "Cannot find method '" << name << "' implementation"; + ss << "Cannot find method '" << methodName << "' implementation"; ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str()); @@ -975,10 +936,8 @@ Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const HandleIsFunction()) { - string name = ConvertToString(jsMethodName); - stringstream ss; - ss << "Property '" << name << "' is not a function"; + ss << "Property '" << methodName << "' is not a function"; ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str()); @@ -1059,7 +1018,6 @@ JavaVM* NativeScriptRuntime::jvm = nullptr; jclass NativeScriptRuntime::PlatformClass = nullptr; jclass NativeScriptRuntime::RequireClass = nullptr; jclass NativeScriptRuntime::JAVA_LANG_STRING = nullptr; -jmethodID NativeScriptRuntime::MAKE_CLASS_INSTANCE_OF_TYPE_STRONG = nullptr; jmethodID NativeScriptRuntime::CREATE_INSTANCE_METHOD_ID = nullptr; jmethodID NativeScriptRuntime::CACHE_CONSTRUCTOR_METHOD_ID = nullptr; jmethodID NativeScriptRuntime::APP_FAIL_METHOD_ID = nullptr; diff --git a/src/jni/NativeScriptRuntime.h b/src/jni/NativeScriptRuntime.h index b9bccbd75..a115d8a9a 100644 --- a/src/jni/NativeScriptRuntime.h +++ b/src/jni/NativeScriptRuntime.h @@ -33,8 +33,6 @@ namespace tns static bool RegisterInstance(const v8::Handle& jsObject, const std::string& name, const std::string& className, const ArgsWrapper& argWrapper, const v8::Handle& implementationObject, bool isInterface); - static void MakeClassInstanceOfTypeStrong(const std::string& className, const v8::Handle& classObj); - // static v8::Handle GetArrayElement(const v8::Handle& array, uint32_t index, const std::string& arraySignature); @@ -45,7 +43,7 @@ namespace tns static void CallJavaMethod(const v8::Handle& caller, const std::string& className, const std::string& methodName, MetadataEntry *entry, bool isStatic, bool isSuper, const v8::FunctionCallbackInfo& args); - static v8::Handle CallJSMethod(JNIEnv *_env, const v8::Handle& jsObject, jstring methodName, jobjectArray args, v8::TryCatch& tc); + static v8::Handle CallJSMethod(JNIEnv *_env, const v8::Handle& jsObject, const std::string& methodName, jobjectArray args, v8::TryCatch& tc); // @@ -61,9 +59,7 @@ namespace tns static void DumpReferenceTablesMethodCallback(const v8::FunctionCallbackInfo& args); - static void WaitForDebuggerMethodCallback(const v8::FunctionCallbackInfo& args); - - static void FailMethodCallback(const v8::FunctionCallbackInfo& args); + static void ExitMethodCallback(const v8::FunctionCallbackInfo& args); static void OverridesWeakCallback(v8::Isolate* isolate, v8::Persistent* target, void* arg); @@ -106,7 +102,7 @@ namespace tns private: NativeScriptRuntime() {} - static int GetCachedConstructorId(JEnv& env, const v8::FunctionCallbackInfo& args, const std::string& name, const std::string& className, jobjectArray javaArgs, jobjectArray methodOverrides); + static int GetCachedConstructorId(JEnv& env, const v8::FunctionCallbackInfo& args, const std::string& name, const std::string& className, jobjectArray javaArgs, const v8::Handle& implementationObject); static v8::Handle FindClass(const std::string& className); @@ -120,8 +116,6 @@ namespace tns static JavaVM *jvm; - static jmethodID MAKE_CLASS_INSTANCE_OF_TYPE_STRONG; - static jmethodID CREATE_INSTANCE_METHOD_ID; static jmethodID CACHE_CONSTRUCTOR_METHOD_ID; diff --git a/src/jni/com_tns_NativeScriptActity.cpp b/src/jni/com_tns_NativeScriptActity.cpp new file mode 100644 index 000000000..cb91bcb6a --- /dev/null +++ b/src/jni/com_tns_NativeScriptActity.cpp @@ -0,0 +1,73 @@ +#include "NativeScriptRuntime.h" +#include "MetadataNode.h" +#include "JniLocalRef.h" +#include "JsArgConverter.h" +#include "JsArgToArrayConverter.h" +#include "ArgConverter.h" +#include "Util.h" +#include "V8GlobalHelpers.h" +#include "V8StringConstants.h" +#include "ExceptionUtil.h" +#include "v8.h" +#include "JEnv.h" +#include "NativeScriptAssert.h" +#include +#include +#include +#include + +using namespace v8; +using namespace std; +using namespace tns; + +extern Isolate *g_isolate; +extern ObjectManager *g_objectManager; +extern int AppJavaObjectID; + + +jobject ConvertJsValueToJavaObject(JEnv& env, const Handle& value); + +extern "C" jobjectArray Java_com_tns_NativeScriptActivity_getMethodOverrides(JNIEnv *_env, jobject obj, jint objectId, jobjectArray packagedArgs) +{ + DEBUG_WRITE("getMethodOverrides called"); + + auto isolate = g_isolate; + Isolate::Scope isolate_scope(isolate); + + JEnv env(_env); + + HandleScope handleScope(isolate); + + TryCatch tc; + + auto appInstance = g_objectManager->GetJsObjectByJavaObject(AppJavaObjectID); + if (appInstance.IsEmpty()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Missing the global app object initialization."); + return nullptr; + } + + string createActivityMethodName = "getActivity"; + auto createActivityFunction = appInstance->Get(ConvertToV8String(createActivityMethodName.c_str())); + + if (createActivityFunction.IsEmpty() || !createActivityFunction->IsFunction()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. No function 'createActivity' found on the application object."); + return nullptr; + } + + auto jsResult = NativeScriptRuntime::CallJSMethod(env, appInstance, createActivityMethodName, packagedArgs, tc); + auto jsInstance = jsResult.As(); + if (jsInstance.IsEmpty() || jsInstance->IsNull() || jsInstance->IsUndefined()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. getActivity method returned invalid value."); + return nullptr; + } + + auto jsActivity = g_objectManager->GetJsObjectByJavaObject(objectId); + + MetadataNode::InjectPrototype(jsActivity, jsInstance); + + jobjectArray methodOverrides = NativeScriptRuntime::GetMethodOverrides(env, jsInstance); + return methodOverrides; +} diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index 9c9c88599..ec6c358d9 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -99,11 +99,6 @@ void PrepareExtendFunction(Isolate *isolate, jstring filesPath) DEBUG_WRITE("Executed prepareExtend.js script"); } -void PrintHashCallback(const FunctionCallbackInfo& args) -{ - DEBUG_WRITE("%s, hashid=%d", ConvertToString(args[0]->ToString()).c_str(), args[1].As()->GetIdentityHash()); -} - void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring packageName) { const char v8flags[] = "--expose_gc"; @@ -113,21 +108,21 @@ void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring pa auto globalTemplate = ObjectTemplate::New(); + const auto readOnlyFlags = static_cast(PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly); + globalTemplate->Set(ConvertToV8String("__startNDKProfiler"), FunctionTemplate::New(isolate, Profiler::StartNDKProfilerCallback)); globalTemplate->Set(ConvertToV8String("__stopNDKProfiler"), FunctionTemplate::New(isolate, Profiler::StopNDKProfilerCallback)); globalTemplate->Set(ConvertToV8String("__startCPUProfiler"), FunctionTemplate::New(isolate, Profiler::StartCPUProfilerCallback)); globalTemplate->Set(ConvertToV8String("__stopCPUProfiler"), FunctionTemplate::New(isolate, Profiler::StopCPUProfilerCallback)); globalTemplate->Set(ConvertToV8String("__heapSnapshot"), FunctionTemplate::New(isolate, Profiler::HeapSnapshotMethodCallback)); - globalTemplate->Set(ConvertToV8String("Log"), FunctionTemplate::New(isolate, NativeScriptRuntime::LogMethodCallback)); - globalTemplate->Set(ConvertToV8String("dumpReferenceTables"), FunctionTemplate::New(isolate, NativeScriptRuntime::DumpReferenceTablesMethodCallback)); - globalTemplate->Set(ConvertToV8String("waitForDebugger"), FunctionTemplate::New(isolate, NativeScriptRuntime::WaitForDebuggerMethodCallback)); - globalTemplate->Set(ConvertToV8String("enableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::EnableVerboseLoggingMethodCallback)); - globalTemplate->Set(ConvertToV8String("disableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::DisableVerboseLoggingMethodCallback)); - globalTemplate->Set(ConvertToV8String("fail"), FunctionTemplate::New(isolate, NativeScriptRuntime::FailMethodCallback)); + globalTemplate->Set(ConvertToV8String("__log"), FunctionTemplate::New(isolate, NativeScriptRuntime::LogMethodCallback)); + globalTemplate->Set(ConvertToV8String("__dumpReferenceTables"), FunctionTemplate::New(isolate, NativeScriptRuntime::DumpReferenceTablesMethodCallback)); + globalTemplate->Set(ConvertToV8String("__debugbreak"), FunctionTemplate::New(isolate, JsDebugger::DebugBreakCallback)); + globalTemplate->Set(ConvertToV8String("__enableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::EnableVerboseLoggingMethodCallback)); + globalTemplate->Set(ConvertToV8String("__disableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::DisableVerboseLoggingMethodCallback)); + globalTemplate->Set(ConvertToV8String("__exit"), FunctionTemplate::New(isolate, NativeScriptRuntime::ExitMethodCallback)); globalTemplate->Set(ConvertToV8String("require"), FunctionTemplate::New(isolate, NativeScriptRuntime::RequireCallback)); globalTemplate->Set(ConvertToV8String("WeakRef"), FunctionTemplate::New(isolate, WeakRef::ConstructorCallback)); - // - globalTemplate->Set(ConvertToV8String("printhash"), FunctionTemplate::New(isolate, PrintHashCallback)); SimpleProfiler::Init(isolate, globalTemplate); @@ -143,10 +138,10 @@ void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring pa auto appTemplate = ObjectTemplate::New(); appTemplate->Set(ConvertToV8String("init"), FunctionTemplate::New(isolate, AppInitCallback)); auto appInstance = appTemplate->NewInstance(); - global->Set(ConvertToV8String("app"), appInstance); + global->ForceSet(ConvertToV8String("app"), appInstance, readOnlyFlags); - global->Set(ConvertToV8String("global"), global); - global->Set(ConvertToV8String("__global"), global); + global->ForceSet(ConvertToV8String("global"), global, readOnlyFlags); + global->ForceSet(ConvertToV8String("__global"), global, readOnlyFlags); ArgConverter::Init(g_jvm); @@ -346,21 +341,21 @@ extern "C" jobject Java_com_tns_Platform_callJSMethodNative(JNIEnv *_env, jobjec string method_name = ArgConverter::jstringToString(methodName); - auto jsResult = NativeScriptRuntime::CallJSMethod(env, jsObject, methodName, packagedArgs, tc); + auto jsResult = NativeScriptRuntime::CallJSMethod(env, jsObject, method_name, packagedArgs, tc); stringstream ss; ss << "Calling js method " << method_name << " failed"; string exceptionMessage = ss.str(); if (ExceptionUtil::GetInstance()->HandleTryCatch(tc, exceptionMessage)) { - DEBUG_WRITE(exceptionMessage.c_str()); + DEBUG_WRITE("%s", exceptionMessage.c_str()); } jobject javaObject = ConvertJsValueToJavaObject(env, jsResult); return javaObject; } -extern "C" jobjectArray Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_env, jobject obj, jobject javaObject, jint javaObjectID, jstring className, jboolean createActivity, jobjectArray packagedCreationArgs) +extern "C" void Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_env, jobject obj, jobject javaObject, jint javaObjectID, jstring className) { SET_PROFILER_FRAME(); @@ -380,139 +375,31 @@ extern "C" jobjectArray Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_en Handle jsInstance; Handle implementationObject; - bool isActivity = createActivity == JNI_TRUE; - - if (isActivity) + auto proxyClassName = g_objectManager->GetClassName(javaObject); + // + if (proxyClassName == "com/tns/NativeScriptActivity") { - auto appInstance = g_objectManager->GetJsObjectByJavaObject(AppJavaObjectID); - if (appInstance.IsEmpty()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Missing the global app object initialization."); - return nullptr; - } - - string createActivityMethodName = "getActivity"; - auto createActivityFunction = appInstance->Get(ConvertToV8String(createActivityMethodName.c_str())); - - if (createActivityFunction.IsEmpty() || !createActivityFunction->IsFunction()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. No function 'createActivity' found on the application object."); - return nullptr; - } - - JniLocalRef jMethodName(env.NewStringUTF(createActivityMethodName.c_str())); - TryCatch tc; - auto jsResult = NativeScriptRuntime::CallJSMethod(env, appInstance, jMethodName, packagedCreationArgs, tc); - jsInstance = jsResult.As(); - if (jsInstance.IsEmpty() || jsInstance->IsNull() || jsInstance->IsUndefined()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. getActivity method returned invalid value."); - return nullptr; - } - -//@@@ -// auto node = MetadataNode::GetNodeFromHandle(jsInstance); -// string nodeName = node->GetName(); -// -// if (nodeName != jniName) -// { -// ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. createActivity returned wrong type."); -// return nullptr; -// } + return; } - else + // + DEBUG_WRITE("createJSInstanceNative class %s", proxyClassName.c_str()); + jsInstance = MetadataNode::CreateExtendedJSWrapper(isolate, proxyClassName); + if (jsInstance.IsEmpty()) { - auto proxyClassName = g_objectManager->GetClassName(javaObject); - DEBUG_WRITE("createJSInstanceNative class %s", proxyClassName.c_str()); - jsInstance = MetadataNode::CreateExtendedJSWrapper(isolate, proxyClassName); - if (jsInstance.IsEmpty()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Cannot create extended JS wrapper."); - return nullptr; - } + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Cannot create extended JS wrapper."); + return; } implementationObject = MetadataNode::GetImplementationObject(jsInstance); if (implementationObject.IsEmpty()) { NativeScriptRuntime::APP_FAIL("createJSInstanceNative: implementationObject is empty"); - return nullptr; + return; } DEBUG_WRITE("createJSInstanceNative: implementationObject :%d", implementationObject->GetIdentityHash()); - bool createTypeScriptActivity = isActivity && jsInstance->HasOwnProperty(V8StringConstants::GetIsPrototypeImplementationObject()); - - if (isActivity && !createTypeScriptActivity) - { - DEBUG_WRITE("createJSInstanceNative: creating js activity with classProxy: %d", jsInstance->GetIdentityHash()); - } - - if (createTypeScriptActivity) - { - DEBUG_WRITE("createJSInstanceNative: creating typescript activity with classProxy: %d", jsInstance->GetIdentityHash()); - - auto node = MetadataNode::GetNodeFromHandle(jsInstance); - - //call extends function on the prototype which must the be Parent function - auto parent = jsInstance->GetPrototype().As(); - auto extendsFunc = parent->Get(String::NewFromUtf8(isolate, "__activityExtend")).As(); - ASSERT_MESSAGE(!extendsFunc.IsEmpty(), "__activityExtend support function not found on activity parent"); - - - Handle arguments[3]; - arguments[0] = parent; - arguments[1] = jsInstance.As()->GetName(); - arguments[2] = implementationObject; - auto extended = extendsFunc->Call(parent, 3, arguments).As(); - ASSERT_MESSAGE(!extended.IsEmpty(), "extend result is not an function"); - - extended->SetHiddenValue(ConvertToV8String("t::TypescriptActivity::DonNotRegisterInstance"), Boolean::New(isolate, true)); - auto extendedObject = extended->CallAsConstructor(0, nullptr).As(); - DEBUG_WRITE("createJSInstanceNative: typescript activity extendedObject's prototype : %d", extendedObject->GetPrototype().As()->GetIdentityHash()); - - - extendedObject->SetPrototype(implementationObject); - //@@@ - //extendedObject->SetHiddenValue(ConvertToV8String(MetadataNode::METADATA_NODE_KEY_NAME), External::New(isolate, node)); - - bool success = extendedObject->SetHiddenValue(ConvertToV8String("t::ActivityImplementationObject"), implementationObject); - ASSERT_MESSAGE(success == true, "Setting up the typescript activity implementation object failed"); - - //This will cause the Link to link the extendedObject not the empty object instance. This is on par with all typescript objects created through JS - jsInstance = extendedObject; - g_objectManager->Unlink(jsInstance); - } - -//@@@ jclass clazz = env.FindClass(jniName); g_objectManager->Link(jsInstance, javaObjectID, clazz); - - vector methods; - - auto propNames = implementationObject->GetOwnPropertyNames(); - auto propsLen = propNames->Length(); - for (auto i = 0; i < propsLen; i++) - { - auto name = propNames->Get(i).As(); - auto method = implementationObject->Get(name); - - if (method->IsFunction()) - { - String::Utf8Value stringValue(name); - jstring value = env.NewStringUTF(*stringValue); - - methods.push_back(value); - } - } - - jclass stringClass = env.FindClass("java/lang/String"); - jobjectArray methodOverrides = env.NewObjectArray(methods.size(), stringClass, nullptr); - for (int i = 0; i < methods.size(); i++) - { - env.SetObjectArrayElement(methodOverrides, i, methods[i]); - } - - return methodOverrides; } extern "C" jint Java_com_tns_Platform_generateNewObjectId(JNIEnv *env, jobject obj) diff --git a/src/src/com/tns/AssetExtractor.java b/src/src/com/tns/AssetExtractor.java index a0cdf5440..ff006228b 100644 --- a/src/src/com/tns/AssetExtractor.java +++ b/src/src/com/tns/AssetExtractor.java @@ -1,9 +1,18 @@ package com.tns; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; + import com.tns.internal.ExtractPolicy; import com.tns.internal.FileExtractor; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.util.Log; public class AssetExtractor @@ -16,11 +25,14 @@ public static void extractAssets(Context context, ExtractPolicy extractPolicy) if (extractor != null) { boolean success = extractor.extract(context); - if (Platform.IsLogEnabled) Log.d(Platform.DEFAULT_LOG_TAG, "extract returned " + success); + if (Platform.IsLogEnabled) + { + Log.d(Platform.DEFAULT_LOG_TAG, "extract returned " + success); + } } else if (extractPolicy.shouldExtract(context)) { - String appRoot = context.getFilesDir().getPath() + "/"; + String appRoot = context.getFilesDir().getPath() + File.separator; String apkPath = context.getPackageCodePath(); boolean forceOverwrite = extractPolicy.forceOverwrite(); diff --git a/src/src/com/tns/Async.java b/src/src/com/tns/Async.java index 1369bd3fd..473dbd942 100644 --- a/src/src/com/tns/Async.java +++ b/src/src/com/tns/Async.java @@ -208,7 +208,7 @@ public static void MakeRequest(RequestOptions options, CompleteCallback callback options.screenWidth = metrics.widthPixels; options.screenHeight = metrics.heightPixels; } - new HttpRequestTask(callback, context).execute(options); + new HttpRequestTask(callback, context).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, options); } static class HttpRequestTask extends AsyncTask diff --git a/src/src/com/tns/DexFactory.java b/src/src/com/tns/DexFactory.java index 28293d5e6..c0f93a22c 100644 --- a/src/src/com/tns/DexFactory.java +++ b/src/src/com/tns/DexFactory.java @@ -10,14 +10,14 @@ import java.io.InputStreamReader; import java.io.InvalidClassException; import java.io.OutputStreamWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; -import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import com.tns.bindings.ProxyGenerator; -import com.tns.multidex.MultiDex; +import dalvik.system.DexClassLoader; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -26,34 +26,42 @@ public class DexFactory { - private Context context; - private static final String SECONDARY_DEX_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes"; + private static final char CLASS_NAME_LOCATION_SEPARATOR = '_'; - private String proxyPath; + private String dexPath; + private String odexPath; + private String dexThumb; + private Context context; private ProxyGenerator proxyGenerator; - - private File odexDir; - - private HashSet injectedProxyClasses = new HashSet(); + private HashMap> injectedDexClasses = new HashMap>(); - private String proxyThumb; - public DexFactory(Context context) { this.context = context; - ApplicationInfo applicationInfo = context.getApplicationInfo(); - proxyPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator; - proxyGenerator = new ProxyGenerator(proxyPath); + ApplicationInfo applicationInfo = this.context.getApplicationInfo(); + this.dexPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator; + this.odexPath = this.dexPath + "odex" + File.separator; + this.proxyGenerator = new ProxyGenerator(dexPath); ProxyGenerator.IsLogEnabled = Platform.IsLogEnabled; - File dexDir = new File(proxyPath); - odexDir = new File(dexDir.getAbsolutePath() + File.separator + "odex" + File.separator); - odexDir.mkdirs(); - - updateProxyThumbAndPurgeCachedProxies(dexDir); - proxyGenerator.setProxyThumb(proxyThumb); + + File dexDir = new File(dexPath); + + if (!dexDir.exists()) + { + dexDir.mkdirs(); + } + + File odexDir = new File(odexPath); + if (!odexDir.exists()) + { + odexDir.mkdir(); + } + + this.updateDexThumbAndPurgeCache(); + this.proxyGenerator.setProxyThumb(this.dexThumb); } static long totalGenTime = 0; @@ -62,92 +70,80 @@ public DexFactory(Context context) public Class resolveClass(String name, String className, String[] methodOverrides) throws ClassNotFoundException, IOException { - String fullClassName = className.replace("$", "_") + "-" + name; - - if (!injectedProxyClasses.contains(fullClassName)) + if(className.contains("NativeScriptActivity")) { - File proxyFile = getProxyFile(fullClassName); - - if (proxyFile == null) - { - long startGenTime = System.nanoTime(); - String proxyFilePath = ""; - - if (Platform.IsLogEnabled) - { - Log.d(Platform.DEFAULT_LOG_TAG, "generating proxy in place"); - } - proxyFilePath = generateProxy(name, className, methodOverrides); - proxyFile = new File(proxyFilePath); - long stopGenTime = System.nanoTime(); - totalGenTime += stopGenTime - startGenTime; - if (Platform.IsLogEnabled) - { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished inplace gen took: " + (stopGenTime - startGenTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalGenTime: " + totalGenTime / 1000000.0 + "ms"); - } - } + // Do not extend NativeScriptActivity - it is already extended + return NativeScriptActivity.class; + } + + String fullClassName = className.replace("$", "_") + CLASS_NAME_LOCATION_SEPARATOR + name; + Class existingClass = this.injectedDexClasses.get(fullClassName); + if(existingClass != null) + { + return existingClass; + } - long startMultiDexTime = System.nanoTime(); - List files = new ArrayList(); - files.add(proxyFile); - try - { - MultiDex.installSecondaryDexes(context.getClassLoader(), odexDir, files); - injectedProxyClasses.add(fullClassName); - } - catch (IllegalArgumentException e) - { - e.printStackTrace(); - } - catch (IllegalAccessException e) - { - e.printStackTrace(); - } - catch (NoSuchFieldException e) - { - e.printStackTrace(); - } - catch (InvocationTargetException e) - { - e.printStackTrace(); - } - catch (NoSuchMethodException e) - { - e.printStackTrace(); - } - long stopMultiDexTime = System.nanoTime(); - totalMultiDexTime += (stopMultiDexTime - startMultiDexTime); + String classToProxy = this.getClassToProxyName(className); + String dexFilePath = classToProxy + CLASS_NAME_LOCATION_SEPARATOR + name; + File dexFile = this.getDexFile(dexFilePath); + + if (dexFile == null) + { + long startGenTime = System.nanoTime(); if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished injecting into multidex: " + proxyFile.getAbsolutePath() + " took: " + (stopMultiDexTime - startMultiDexTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalMultiDexTime: " + totalMultiDexTime / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "generating proxy in place"); } - - - long startLoadDexTime = System.nanoTime(); - // String classToProxyName = className.replace("$", "_"); - // className = classToProxyName; - - Class loaded = context.getClassLoader().loadClass(fullClassName); - long stopLoadDexTime = System.nanoTime(); - totalLoadDexTime += (stopLoadDexTime - startLoadDexTime); + + dexFilePath = this.generateDex(name, classToProxy, methodOverrides); + dexFile = new File(dexFilePath); + long stopGenTime = System.nanoTime(); + totalGenTime += stopGenTime - startGenTime; if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished loading class : " + fullClassName + " took: " + (stopMultiDexTime - startMultiDexTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalLoadDexTime: " + totalLoadDexTime / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "Finished inplace gen took: " + (stopGenTime - startGenTime) / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "TotalGenTime: " + totalGenTime / 1000000.0 + "ms"); } + } + + String jarFilePath = dexFile.getPath().replace(".dex", ".jar"); + File jarFile = new File(jarFilePath); + + Class result; + if(!jarFile.exists()) + { + FileOutputStream jarFileStream = new FileOutputStream(jarFile); - return loaded; + ZipOutputStream out = new ZipOutputStream(jarFileStream); + out.putNextEntry(new ZipEntry("classes.dex")); + byte[] dexData = new byte[(int)dexFile.length()]; + FileInputStream fi = new FileInputStream(dexFile); + fi.read(dexData, 0, dexData.length); + fi.close(); + out.write(dexData); + out.closeEntry(); + out.close(); + } - - return findClass(fullClassName); + + DexClassLoader dexClassLoader = new DexClassLoader(jarFilePath, this.odexPath, null, this.context.getClassLoader()); + result = dexClassLoader.loadClass(fullClassName); + + this.injectedDexClasses.put(fullClassName, result); + + return result; } public Class findClass(String className) throws ClassNotFoundException { String canonicalName = className.replace('/', '.'); - return context.getClassLoader().loadClass(canonicalName); + Log.d("TNS_NATIVE", canonicalName); + Class existingClass = this.injectedDexClasses.get(canonicalName); + if(existingClass != null) + { + return existingClass; + } + return this.context.getClassLoader().loadClass(canonicalName); } public static String strJoin(String[] array, String separator) @@ -168,8 +164,8 @@ public static String strJoin(String[] array, String separator) } return sbStr.toString(); } - - private File getProxyFile(String className) throws InvalidClassException + + private String getClassToProxyName(String className) throws InvalidClassException { String classToProxy = className; @@ -182,46 +178,40 @@ private File getProxyFile(String className) throws InvalidClassException { throw new InvalidClassException("Can't generate proxy of proxy"); } + + return classToProxy; + } - String classToProxyFile = classToProxy.replace("$", "_"); + private File getDexFile(String className) throws InvalidClassException + { + String classToProxyFile = className.replace("$", "_"); - if (proxyThumb != null) + if (this.dexThumb != null) { - classToProxyFile += "-" + proxyThumb; + classToProxyFile += "-" + this.dexThumb; } - String proxyFilePath = proxyPath + classToProxyFile + ".dex"; - File proxyFile = new File(proxyFilePath); - if (proxyFile.exists()) + String dexFilePath = dexPath + classToProxyFile + ".dex"; + File dexFile = new File(dexFilePath); + if (dexFile.exists()) { if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + proxyFilePath + " Result: proxy file Found. ClassName: " + className); + Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + dexFilePath + " Result: proxy file Found. ClassName: " + className); } - return proxyFile; + return dexFile; } if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + proxyFilePath + " Result: NOT Found. Proxy Gen needed. ClassName: " + className); + Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + dexFilePath + " Result: NOT Found. Proxy Gen needed. ClassName: " + className); } return null; } - private String generateProxy(String proxyName, String className, String[] methodOverrides) throws ClassNotFoundException, IOException + private String generateDex(String proxyName, String className, String[] methodOverrides) throws ClassNotFoundException, IOException { - String classToProxyName = className; - if (className.startsWith("com.tns.gen.")) - { - classToProxyName = className.substring(12); - } - - if (classToProxyName.startsWith("com.tns.gen.")) - { - throw new InvalidClassException("Can't generate proxy of proxy"); - } - - Class classToProxy = Class.forName(classToProxyName); + Class classToProxy = Class.forName(className); HashSet methodOverridesSet = null; if (methodOverrides != null) @@ -237,43 +227,46 @@ private String generateProxy(String proxyName, String className, String[] method return proxyGenerator.generateProxy(proxyName, classToProxy, methodOverridesSet); } - private void updateProxyThumbAndPurgeCachedProxies(File proxyDir) + private void updateDexThumbAndPurgeCache() { - proxyThumb = generateProxyThumb(); - if (proxyThumb == null) + this.dexThumb = this.generateDexThumb(); + if (this.dexThumb == null) { throw new RuntimeException("Error generating proxy thumb 1"); } - String oldProxyThumb = getCachedProxyThumb(proxyDir); - if (proxyThumb.equals(oldProxyThumb)) + File dexDir = new File(this.dexPath); + String oldDexThumb = this.getCachedProxyThumb(dexDir); + if (this.dexThumb.equals(oldDexThumb)) { return; } - if (oldProxyThumb != null) + if (oldDexThumb != null) { - purgeProxiesByThumb(oldProxyThumb, proxyDir); + this.purgeDexesByThumb(oldDexThumb, dexDir); + this.purgeDexesByThumb(oldDexThumb, new File(odexPath)); } else { - //purge all dex files in proxy dir if no thumg file is found - purgeProxiesByThumb(".dex", proxyDir); + //purge all dex files if no thumb file is found + this.purgeDexesByThumb(null, dexDir); + this.purgeDexesByThumb(null, new File(odexPath)); } - saveNewProxyThumb(proxyThumb, proxyDir); + this.saveNewDexThumb(this.dexThumb, dexDir); } - private void saveNewProxyThumb(String newProxyThumb, File proxyDir) + private void saveNewDexThumb(String newDexThumb, File dexDir) { - File cachedThumbFile = new File(proxyDir, "proxyThumb"); + File cachedThumbFile = new File(dexDir, "proxyThumb"); try { FileOutputStream out = new FileOutputStream(cachedThumbFile, false); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); try { - writer.write(newProxyThumb); + writer.write(newDexThumb); writer.newLine(); writer.flush(); } @@ -295,7 +288,7 @@ private void saveNewProxyThumb(String newProxyThumb, File proxyDir) } } - private String generateProxyThumb() + private String generateDexThumb() { try { @@ -313,11 +306,17 @@ private String generateProxyThumb() return null; } - private void purgeProxiesByThumb(String cachedproxyThumb, File pathToPurge) + private void purgeDexesByThumb(String cachedDexThumb, File pathToPurge) { - if (!pathToPurge.isDirectory()) + if (!pathToPurge.exists()) + { + return; + } + + if (!pathToPurge.isDirectory()) { - throw new RuntimeException("Purge path not a directory"); + Log.e(Platform.DEFAULT_LOG_TAG, "Purge proxies path not a directory. Path: " + pathToPurge); + throw new RuntimeException("Purge path not a directory"); } String[] children = pathToPurge.list(); @@ -328,13 +327,13 @@ private void purgeProxiesByThumb(String cachedproxyThumb, File pathToPurge) File purgeCandidate = new File(pathToPurge, filename); if (purgeCandidate.isDirectory()) { - purgeProxiesByThumb(cachedproxyThumb, purgeCandidate); + this.purgeDexesByThumb(cachedDexThumb, purgeCandidate); } else { - if (!filename.contains(cachedproxyThumb)) + if (cachedDexThumb != null && !filename.contains(cachedDexThumb)) { - return; + continue; } boolean b = purgeCandidate.delete(); @@ -374,4 +373,4 @@ private String getCachedProxyThumb(File proxyDir) return null; } -} +} \ No newline at end of file diff --git a/src/src/com/tns/JsDebugger.java b/src/src/com/tns/JsDebugger.java index 2b2cab479..d6b96c19b 100644 --- a/src/src/com/tns/JsDebugger.java +++ b/src/src/com/tns/JsDebugger.java @@ -33,11 +33,11 @@ public class JsDebugger private static native void processDebugMessages(); private static native void enable(); - + private static native void disable(); - + private static native void debugBreak(); - + private static native void sendCommand(byte[] command, int length); private final Context context; @@ -47,13 +47,15 @@ public class JsDebugger private static final int INVALID_PORT = -1; private static final String portEnvInputFile = "envDebug.in"; - + private static final String portEnvOutputFile = "envDebug.out"; + private static final String DEBUG_BREAK_FILENAME = "debugbreak"; + private static int currentPort = INVALID_PORT; - + private static LinkedBlockingQueue dbgMessages = new LinkedBlockingQueue(); - + private static void enqueueMessage(String message) { dbgMessages.add(message); @@ -63,24 +65,24 @@ public JsDebugger(Context context) { this.context = context; } - + private static ServerSocket serverSocket; private static ServerThread serverThread = null; private static Thread javaServerThread = null; - + private static class ServerThread implements Runnable { private volatile boolean running; private final int port; private ResponseWorker responseWorker; private ListenerWorker commThread; - + public ServerThread(int port) { this.port = port; this.running = false; } - + public void stop() { this.running = false; @@ -94,7 +96,7 @@ public void stop() e.printStackTrace(); } } - + public void run() { try @@ -113,10 +115,10 @@ public void run() try { Socket socket = serverSocket.accept(); - + this.responseWorker = new ResponseWorker(socket); new Thread(this.responseWorker).start(); - + commThread = new ListenerWorker(socket.getInputStream()); new Thread(commThread).start(); } @@ -127,13 +129,12 @@ public void run() } } } - + private static class ListenerWorker implements Runnable { private enum State { - Header, - Message + Header, Message } private BufferedReader input; @@ -142,20 +143,20 @@ public ListenerWorker(InputStream inputStream) { this.input = new BufferedReader(new InputStreamReader(inputStream)); } - + private volatile boolean running = true; - + public void run() { Scanner scanner = new Scanner(this.input); scanner.useDelimiter("\r\n"); - + ArrayList headers = new ArrayList(); String line; State state = State.Header; int messageLength = -1; String leftOver = null; - + Runnable dispatchProcessDebugMessages = new Runnable() { @Override @@ -196,7 +197,7 @@ public void run() leftOver = line.substring(messageLength); state = State.Header; headers.clear(); - + try { byte[] cmdBytes = msg.getBytes("UTF-16LE"); @@ -237,32 +238,32 @@ public void run() } } } - + private static class ResponseWorker implements Runnable { private Socket socket; - + private final static String END_MSG = "#end#"; - + private OutputStream output; - + public ResponseWorker(Socket clientSocket) throws IOException { this.socket = clientSocket; this.output = this.socket.getOutputStream(); } - + public void stop() { dbgMessages.add(END_MSG); } - + @Override public void run() { byte[] LINE_END_BYTES = new byte[2]; - LINE_END_BYTES[0] = (byte)'\r'; - LINE_END_BYTES[1] = (byte)'\n'; + LINE_END_BYTES[0] = (byte) '\r'; + LINE_END_BYTES[1] = (byte) '\n'; while (true) { try @@ -271,7 +272,7 @@ public void run() if (msg.equals(END_MSG)) break; - + byte[] utf8; try { @@ -282,7 +283,7 @@ public void run() utf8 = null; e1.printStackTrace(); } - + if (utf8 != null) { try @@ -310,7 +311,6 @@ public void run() } } - int getDebuggerPortFromEnvironment() { int port = INVALID_PORT; @@ -346,15 +346,18 @@ int getDebuggerPortFromEnvironment() w = null; } - try + if (shouldDebugBreak(context)) { - Thread.sleep(3 * 1000); - } - catch (InterruptedException e1) - { - e1.printStackTrace(); + try + { + Thread.sleep(3 * 1000); + } + catch (InterruptedException e1) + { + e1.printStackTrace(); + } } - + File envInFile = new File(baseDir, portEnvInputFile); if (envInFile.exists()) { @@ -372,7 +375,7 @@ int getDebuggerPortFromEnvironment() { requestedPort = INVALID_PORT; } - + w = new OutputStreamWriter(new FileOutputStream(envOutFile, true)); int localPort = (requestedPort != INVALID_PORT) ? requestedPort : getAvailablePort(); String strLocalPort = "PORT=" + localPort + "\n"; @@ -449,7 +452,7 @@ private static int getAvailablePort() return port; } - static void enableAgent(String packageName, int port, boolean waitForConnection) + private static void enableAgent(String packageName, int port, boolean waitForConnection) { enable(); if (serverThread == null) @@ -460,7 +463,7 @@ static void enableAgent(String packageName, int port, boolean waitForConnection) javaServerThread.start(); } - static void disableAgent() + private static void disableAgent() { disable(); if (serverThread != null) @@ -516,6 +519,7 @@ public void onReceive(Context context, Intent intent) }, new IntentFilter(getDebuggerPortAction)); } + public static boolean shouldEnableDebugging(Context context) { int flags; @@ -528,7 +532,37 @@ public static boolean shouldEnableDebugging(Context context) flags = 0; e.printStackTrace(); } + boolean shouldEnableDebugging = ((flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0); return shouldEnableDebugging; } + + + public static Boolean shouldDebugBreakFlag = null; + + public static boolean shouldDebugBreak(Context context) + { + if (shouldDebugBreakFlag != null) + { + return shouldDebugBreakFlag; + } + + if (!shouldEnableDebugging(context)) + { + shouldDebugBreakFlag = false; + return false; + } + + String appRoot = context.getFilesDir().getPath() + File.separator; + File debugBreakFile = new File(appRoot, DEBUG_BREAK_FILENAME); + if (debugBreakFile.exists()) + { + debugBreakFile.delete(); + shouldDebugBreakFlag = true; + return true; + } + + shouldDebugBreakFlag = false; + return false; + } } diff --git a/src/src/com/tns/Metadata.java b/src/src/com/tns/Metadata.java deleted file mode 100644 index 930858020..000000000 --- a/src/src/com/tns/Metadata.java +++ /dev/null @@ -1,3562 +0,0 @@ -package com.tns; - -import java.util.HashSet; - -class Metadata { - private static HashSet knownMetadata = new HashSet(); - - public static HashSet getKnownMetadata() { - if (knownMetadata.isEmpty()) { - knownMetadata.add("android.Manifest"); - knownMetadata.add("android.Manifest$permission"); - knownMetadata.add("android.Manifest$permission_group"); - knownMetadata.add("android.R"); - knownMetadata.add("android.R$anim"); - knownMetadata.add("android.R$animator"); - knownMetadata.add("android.R$array"); - knownMetadata.add("android.R$attr"); - knownMetadata.add("android.R$bool"); - knownMetadata.add("android.R$color"); - knownMetadata.add("android.R$dimen"); - knownMetadata.add("android.R$drawable"); - knownMetadata.add("android.R$fraction"); - knownMetadata.add("android.R$id"); - knownMetadata.add("android.R$integer"); - knownMetadata.add("android.R$interpolator"); - knownMetadata.add("android.R$layout"); - knownMetadata.add("android.R$menu"); - knownMetadata.add("android.R$mipmap"); - knownMetadata.add("android.R$plurals"); - knownMetadata.add("android.R$raw"); - knownMetadata.add("android.R$string"); - knownMetadata.add("android.R$style"); - knownMetadata.add("android.R$xml"); - knownMetadata.add("android.accessibilityservice.AccessibilityService"); - knownMetadata.add("android.accessibilityservice.AccessibilityServiceInfo"); - knownMetadata.add("android.accounts.AbstractAccountAuthenticator"); - knownMetadata.add("android.accounts.Account"); - knownMetadata.add("android.accounts.AccountAuthenticatorActivity"); - knownMetadata.add("android.accounts.AccountAuthenticatorResponse"); - knownMetadata.add("android.accounts.AccountManager"); - knownMetadata.add("android.accounts.AccountManagerCallback"); - knownMetadata.add("android.accounts.AccountManagerFuture"); - knownMetadata.add("android.accounts.AccountsException"); - knownMetadata.add("android.accounts.AuthenticatorDescription"); - knownMetadata.add("android.accounts.AuthenticatorException"); - knownMetadata.add("android.accounts.NetworkErrorException"); - knownMetadata.add("android.accounts.OnAccountsUpdateListener"); - knownMetadata.add("android.accounts.OperationCanceledException"); - knownMetadata.add("android.animation.Animator"); - knownMetadata.add("android.animation.Animator$AnimatorListener"); - knownMetadata.add("android.animation.AnimatorInflater"); - knownMetadata.add("android.animation.AnimatorListenerAdapter"); - knownMetadata.add("android.animation.AnimatorSet"); - knownMetadata.add("android.animation.AnimatorSet$Builder"); - knownMetadata.add("android.animation.ArgbEvaluator"); - knownMetadata.add("android.animation.FloatEvaluator"); - knownMetadata.add("android.animation.IntEvaluator"); - knownMetadata.add("android.animation.Keyframe"); - knownMetadata.add("android.animation.LayoutTransition"); - knownMetadata.add("android.animation.LayoutTransition$TransitionListener"); - knownMetadata.add("android.animation.ObjectAnimator"); - knownMetadata.add("android.animation.PropertyValuesHolder"); - knownMetadata.add("android.animation.TimeAnimator"); - knownMetadata.add("android.animation.TimeAnimator$TimeListener"); - knownMetadata.add("android.animation.TimeInterpolator"); - knownMetadata.add("android.animation.TypeEvaluator"); - knownMetadata.add("android.animation.ValueAnimator"); - knownMetadata.add("android.animation.ValueAnimator$AnimatorUpdateListener"); - knownMetadata.add("android.annotation.SuppressLint"); - knownMetadata.add("android.annotation.TargetApi"); - knownMetadata.add("android.app.ActionBar"); - knownMetadata.add("android.app.ActionBar$LayoutParams"); - knownMetadata.add("android.app.ActionBar$OnMenuVisibilityListener"); - knownMetadata.add("android.app.ActionBar$OnNavigationListener"); - knownMetadata.add("android.app.ActionBar$Tab"); - knownMetadata.add("android.app.ActionBar$TabListener"); - knownMetadata.add("android.app.Activity"); - knownMetadata.add("android.app.ActivityGroup"); - knownMetadata.add("android.app.ActivityManager"); - knownMetadata.add("android.app.ActivityManager$MemoryInfo"); - knownMetadata.add("android.app.ActivityManager$ProcessErrorStateInfo"); - knownMetadata.add("android.app.ActivityManager$RecentTaskInfo"); - knownMetadata.add("android.app.ActivityManager$RunningAppProcessInfo"); - knownMetadata.add("android.app.ActivityManager$RunningServiceInfo"); - knownMetadata.add("android.app.ActivityManager$RunningTaskInfo"); - knownMetadata.add("android.app.ActivityOptions"); - knownMetadata.add("android.app.AlarmManager"); - knownMetadata.add("android.app.AlertDialog"); - knownMetadata.add("android.app.AlertDialog$Builder"); - knownMetadata.add("android.app.AliasActivity"); - knownMetadata.add("android.app.Application"); - knownMetadata.add("android.app.Application$ActivityLifecycleCallbacks"); - knownMetadata.add("android.app.ApplicationErrorReport"); - knownMetadata.add("android.app.ApplicationErrorReport$AnrInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$BatteryInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$CrashInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$RunningServiceInfo"); - knownMetadata.add("android.app.DatePickerDialog"); - knownMetadata.add("android.app.DatePickerDialog$OnDateSetListener"); - knownMetadata.add("android.app.Dialog"); - knownMetadata.add("android.app.DialogFragment"); - knownMetadata.add("android.app.DownloadManager"); - knownMetadata.add("android.app.DownloadManager$Query"); - knownMetadata.add("android.app.DownloadManager$Request"); - knownMetadata.add("android.app.ExpandableListActivity"); - knownMetadata.add("android.app.Fragment"); - knownMetadata.add("android.app.Fragment$InstantiationException"); - knownMetadata.add("android.app.Fragment$SavedState"); - knownMetadata.add("android.app.FragmentBreadCrumbs"); - knownMetadata.add("android.app.FragmentBreadCrumbs$OnBreadCrumbClickListener"); - knownMetadata.add("android.app.FragmentManager"); - knownMetadata.add("android.app.FragmentManager$BackStackEntry"); - knownMetadata.add("android.app.FragmentManager$OnBackStackChangedListener"); - knownMetadata.add("android.app.FragmentTransaction"); - knownMetadata.add("android.app.Instrumentation"); - knownMetadata.add("android.app.Instrumentation$ActivityMonitor"); - knownMetadata.add("android.app.Instrumentation$ActivityResult"); - knownMetadata.add("android.app.IntentService"); - knownMetadata.add("android.app.KeyguardManager"); - knownMetadata.add("android.app.KeyguardManager$KeyguardLock"); - knownMetadata.add("android.app.KeyguardManager$OnKeyguardExitResult"); - knownMetadata.add("android.app.LauncherActivity"); - knownMetadata.add("android.app.LauncherActivity$IconResizer"); - knownMetadata.add("android.app.LauncherActivity$ListItem"); - knownMetadata.add("android.app.ListActivity"); - knownMetadata.add("android.app.ListFragment"); - knownMetadata.add("android.app.LoaderManager"); - knownMetadata.add("android.app.LoaderManager$LoaderCallbacks"); - knownMetadata.add("android.app.LocalActivityManager"); - knownMetadata.add("android.app.MediaRouteActionProvider"); - knownMetadata.add("android.app.MediaRouteButton"); - knownMetadata.add("android.app.NativeActivity"); - knownMetadata.add("android.app.Notification"); - knownMetadata.add("android.app.Notification$BigPictureStyle"); - knownMetadata.add("android.app.Notification$BigTextStyle"); - knownMetadata.add("android.app.Notification$Builder"); - knownMetadata.add("android.app.Notification$InboxStyle"); - knownMetadata.add("android.app.Notification$Style"); - knownMetadata.add("android.app.NotificationManager"); - knownMetadata.add("android.app.PendingIntent"); - knownMetadata.add("android.app.PendingIntent$CanceledException"); - knownMetadata.add("android.app.PendingIntent$OnFinished"); - knownMetadata.add("android.app.Presentation"); - knownMetadata.add("android.app.ProgressDialog"); - knownMetadata.add("android.app.SearchManager"); - knownMetadata.add("android.app.SearchManager$OnCancelListener"); - knownMetadata.add("android.app.SearchManager$OnDismissListener"); - knownMetadata.add("android.app.SearchableInfo"); - knownMetadata.add("android.app.Service"); - knownMetadata.add("android.app.TabActivity"); - knownMetadata.add("android.app.TaskStackBuilder"); - knownMetadata.add("android.app.TimePickerDialog"); - knownMetadata.add("android.app.TimePickerDialog$OnTimeSetListener"); - knownMetadata.add("android.app.UiModeManager"); - knownMetadata.add("android.app.WallpaperInfo"); - knownMetadata.add("android.app.WallpaperManager"); - knownMetadata.add("android.app.admin.DeviceAdminInfo"); - knownMetadata.add("android.app.admin.DeviceAdminReceiver"); - knownMetadata.add("android.app.admin.DevicePolicyManager"); - knownMetadata.add("android.app.backup.BackupAgent"); - knownMetadata.add("android.app.backup.BackupAgentHelper"); - knownMetadata.add("android.app.backup.BackupDataInput"); - knownMetadata.add("android.app.backup.BackupDataInputStream"); - knownMetadata.add("android.app.backup.BackupDataOutput"); - knownMetadata.add("android.app.backup.BackupHelper"); - knownMetadata.add("android.app.backup.BackupManager"); - knownMetadata.add("android.app.backup.FileBackupHelper"); - knownMetadata.add("android.app.backup.FullBackupDataOutput"); - knownMetadata.add("android.app.backup.RestoreObserver"); - knownMetadata.add("android.app.backup.SharedPreferencesBackupHelper"); - knownMetadata.add("android.appwidget.AppWidgetHost"); - knownMetadata.add("android.appwidget.AppWidgetHostView"); - knownMetadata.add("android.appwidget.AppWidgetManager"); - knownMetadata.add("android.appwidget.AppWidgetProvider"); - knownMetadata.add("android.appwidget.AppWidgetProviderInfo"); - knownMetadata.add("android.bluetooth.BluetoothA2dp"); - knownMetadata.add("android.bluetooth.BluetoothAdapter"); - knownMetadata.add("android.bluetooth.BluetoothAssignedNumbers"); - knownMetadata.add("android.bluetooth.BluetoothClass"); - knownMetadata.add("android.bluetooth.BluetoothClass$Device"); - knownMetadata.add("android.bluetooth.BluetoothClass$Device$Major"); - knownMetadata.add("android.bluetooth.BluetoothClass$Service"); - knownMetadata.add("android.bluetooth.BluetoothDevice"); - knownMetadata.add("android.bluetooth.BluetoothHeadset"); - knownMetadata.add("android.bluetooth.BluetoothHealth"); - knownMetadata.add("android.bluetooth.BluetoothHealthAppConfiguration"); - knownMetadata.add("android.bluetooth.BluetoothHealthCallback"); - knownMetadata.add("android.bluetooth.BluetoothProfile"); - knownMetadata.add("android.bluetooth.BluetoothProfile$ServiceListener"); - knownMetadata.add("android.bluetooth.BluetoothServerSocket"); - knownMetadata.add("android.bluetooth.BluetoothSocket"); - knownMetadata.add("android.content.AbstractThreadedSyncAdapter"); - knownMetadata.add("android.content.ActivityNotFoundException"); - knownMetadata.add("android.content.AsyncQueryHandler"); - knownMetadata.add("android.content.AsyncTaskLoader"); - knownMetadata.add("android.content.BroadcastReceiver"); - knownMetadata.add("android.content.BroadcastReceiver$PendingResult"); - knownMetadata.add("android.content.ClipData"); - knownMetadata.add("android.content.ClipData$Item"); - knownMetadata.add("android.content.ClipDescription"); - knownMetadata.add("android.content.ClipboardManager"); - knownMetadata.add("android.content.ClipboardManager$OnPrimaryClipChangedListener"); - knownMetadata.add("android.content.ComponentCallbacks"); - knownMetadata.add("android.content.ComponentCallbacks2"); - knownMetadata.add("android.content.ComponentName"); - knownMetadata.add("android.content.ContentProvider"); - knownMetadata.add("android.content.ContentProvider$PipeDataWriter"); - knownMetadata.add("android.content.ContentProviderClient"); - knownMetadata.add("android.content.ContentProviderOperation"); - knownMetadata.add("android.content.ContentProviderOperation$Builder"); - knownMetadata.add("android.content.ContentProviderResult"); - knownMetadata.add("android.content.ContentQueryMap"); - knownMetadata.add("android.content.ContentResolver"); - knownMetadata.add("android.content.ContentUris"); - knownMetadata.add("android.content.ContentValues"); - knownMetadata.add("android.content.Context"); - knownMetadata.add("android.content.ContextWrapper"); - knownMetadata.add("android.content.CursorLoader"); - knownMetadata.add("android.content.DialogInterface"); - knownMetadata.add("android.content.DialogInterface$OnCancelListener"); - knownMetadata.add("android.content.DialogInterface$OnClickListener"); - knownMetadata.add("android.content.DialogInterface$OnDismissListener"); - knownMetadata.add("android.content.DialogInterface$OnKeyListener"); - knownMetadata.add("android.content.DialogInterface$OnMultiChoiceClickListener"); - knownMetadata.add("android.content.DialogInterface$OnShowListener"); - knownMetadata.add("android.content.Entity"); - knownMetadata.add("android.content.Entity$NamedContentValues"); - knownMetadata.add("android.content.EntityIterator"); - knownMetadata.add("android.content.Intent"); - knownMetadata.add("android.content.Intent$FilterComparison"); - knownMetadata.add("android.content.Intent$ShortcutIconResource"); - knownMetadata.add("android.content.IntentFilter"); - knownMetadata.add("android.content.IntentFilter$AuthorityEntry"); - knownMetadata.add("android.content.IntentFilter$MalformedMimeTypeException"); - knownMetadata.add("android.content.IntentSender"); - knownMetadata.add("android.content.IntentSender$OnFinished"); - knownMetadata.add("android.content.IntentSender$SendIntentException"); - knownMetadata.add("android.content.Loader"); - knownMetadata.add("android.content.Loader$ForceLoadContentObserver"); - knownMetadata.add("android.content.Loader$OnLoadCanceledListener"); - knownMetadata.add("android.content.Loader$OnLoadCompleteListener"); - knownMetadata.add("android.content.MutableContextWrapper"); - knownMetadata.add("android.content.OperationApplicationException"); - knownMetadata.add("android.content.PeriodicSync"); - knownMetadata.add("android.content.ReceiverCallNotAllowedException"); - knownMetadata.add("android.content.SearchRecentSuggestionsProvider"); - knownMetadata.add("android.content.ServiceConnection"); - knownMetadata.add("android.content.SharedPreferences"); - knownMetadata.add("android.content.SharedPreferences$Editor"); - knownMetadata.add("android.content.SharedPreferences$OnSharedPreferenceChangeListener"); - knownMetadata.add("android.content.SyncAdapterType"); - knownMetadata.add("android.content.SyncContext"); - knownMetadata.add("android.content.SyncInfo"); - knownMetadata.add("android.content.SyncResult"); - knownMetadata.add("android.content.SyncStats"); - knownMetadata.add("android.content.SyncStatusObserver"); - knownMetadata.add("android.content.UriMatcher"); - knownMetadata.add("android.content.pm.ActivityInfo"); - knownMetadata.add("android.content.pm.ApplicationInfo"); - knownMetadata.add("android.content.pm.ApplicationInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.ComponentInfo"); - knownMetadata.add("android.content.pm.ConfigurationInfo"); - knownMetadata.add("android.content.pm.FeatureInfo"); - knownMetadata.add("android.content.pm.InstrumentationInfo"); - knownMetadata.add("android.content.pm.LabeledIntent"); - knownMetadata.add("android.content.pm.PackageInfo"); - knownMetadata.add("android.content.pm.PackageItemInfo"); - knownMetadata.add("android.content.pm.PackageItemInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.PackageManager"); - knownMetadata.add("android.content.pm.PackageManager$NameNotFoundException"); - knownMetadata.add("android.content.pm.PackageStats"); - knownMetadata.add("android.content.pm.PathPermission"); - knownMetadata.add("android.content.pm.PermissionGroupInfo"); - knownMetadata.add("android.content.pm.PermissionInfo"); - knownMetadata.add("android.content.pm.ProviderInfo"); - knownMetadata.add("android.content.pm.ResolveInfo"); - knownMetadata.add("android.content.pm.ResolveInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.ServiceInfo"); - knownMetadata.add("android.content.pm.Signature"); - knownMetadata.add("android.content.res.AssetFileDescriptor"); - knownMetadata.add("android.content.res.AssetFileDescriptor$AutoCloseInputStream"); - knownMetadata.add("android.content.res.AssetFileDescriptor$AutoCloseOutputStream"); - knownMetadata.add("android.content.res.AssetManager"); - knownMetadata.add("android.content.res.AssetManager$AssetInputStream"); - knownMetadata.add("android.content.res.ColorStateList"); - knownMetadata.add("android.content.res.Configuration"); - knownMetadata.add("android.content.res.ObbInfo"); - knownMetadata.add("android.content.res.ObbScanner"); - knownMetadata.add("android.content.res.Resources"); - knownMetadata.add("android.content.res.Resources$NotFoundException"); - knownMetadata.add("android.content.res.Resources$Theme"); - knownMetadata.add("android.content.res.TypedArray"); - knownMetadata.add("android.content.res.XmlResourceParser"); - knownMetadata.add("android.database.AbstractCursor"); - knownMetadata.add("android.database.AbstractWindowedCursor"); - knownMetadata.add("android.database.CharArrayBuffer"); - knownMetadata.add("android.database.ContentObservable"); - knownMetadata.add("android.database.ContentObserver"); - knownMetadata.add("android.database.CrossProcessCursor"); - knownMetadata.add("android.database.CrossProcessCursorWrapper"); - knownMetadata.add("android.database.Cursor"); - knownMetadata.add("android.database.CursorIndexOutOfBoundsException"); - knownMetadata.add("android.database.CursorJoiner"); - knownMetadata.add("android.database.CursorJoiner$Result"); - knownMetadata.add("android.database.CursorWindow"); - knownMetadata.add("android.database.CursorWrapper"); - knownMetadata.add("android.database.DataSetObservable"); - knownMetadata.add("android.database.DataSetObserver"); - knownMetadata.add("android.database.DatabaseErrorHandler"); - knownMetadata.add("android.database.DatabaseUtils"); - knownMetadata.add("android.database.DatabaseUtils$InsertHelper"); - knownMetadata.add("android.database.DefaultDatabaseErrorHandler"); - knownMetadata.add("android.database.MatrixCursor"); - knownMetadata.add("android.database.MatrixCursor$RowBuilder"); - knownMetadata.add("android.database.MergeCursor"); - knownMetadata.add("android.database.Observable"); - knownMetadata.add("android.database.SQLException"); - knownMetadata.add("android.database.StaleDataException"); - knownMetadata.add("android.database.sqlite.SQLiteAbortException"); - knownMetadata.add("android.database.sqlite.SQLiteAccessPermException"); - knownMetadata.add("android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException"); - knownMetadata.add("android.database.sqlite.SQLiteBlobTooBigException"); - knownMetadata.add("android.database.sqlite.SQLiteCantOpenDatabaseException"); - knownMetadata.add("android.database.sqlite.SQLiteClosable"); - knownMetadata.add("android.database.sqlite.SQLiteConstraintException"); - knownMetadata.add("android.database.sqlite.SQLiteCursor"); - knownMetadata.add("android.database.sqlite.SQLiteCursorDriver"); - knownMetadata.add("android.database.sqlite.SQLiteDatabase"); - knownMetadata.add("android.database.sqlite.SQLiteDatabase$CursorFactory"); - knownMetadata.add("android.database.sqlite.SQLiteDatabaseCorruptException"); - knownMetadata.add("android.database.sqlite.SQLiteDatabaseLockedException"); - knownMetadata.add("android.database.sqlite.SQLiteDatatypeMismatchException"); - knownMetadata.add("android.database.sqlite.SQLiteDiskIOException"); - knownMetadata.add("android.database.sqlite.SQLiteDoneException"); - knownMetadata.add("android.database.sqlite.SQLiteException"); - knownMetadata.add("android.database.sqlite.SQLiteFullException"); - knownMetadata.add("android.database.sqlite.SQLiteMisuseException"); - knownMetadata.add("android.database.sqlite.SQLiteOpenHelper"); - knownMetadata.add("android.database.sqlite.SQLiteOutOfMemoryException"); - knownMetadata.add("android.database.sqlite.SQLiteProgram"); - knownMetadata.add("android.database.sqlite.SQLiteQuery"); - knownMetadata.add("android.database.sqlite.SQLiteQueryBuilder"); - knownMetadata.add("android.database.sqlite.SQLiteReadOnlyDatabaseException"); - knownMetadata.add("android.database.sqlite.SQLiteStatement"); - knownMetadata.add("android.database.sqlite.SQLiteTableLockedException"); - knownMetadata.add("android.database.sqlite.SQLiteTransactionListener"); - knownMetadata.add("android.drm.DrmConvertedStatus"); - knownMetadata.add("android.drm.DrmErrorEvent"); - knownMetadata.add("android.drm.DrmEvent"); - knownMetadata.add("android.drm.DrmInfo"); - knownMetadata.add("android.drm.DrmInfoEvent"); - knownMetadata.add("android.drm.DrmInfoRequest"); - knownMetadata.add("android.drm.DrmInfoStatus"); - knownMetadata.add("android.drm.DrmManagerClient"); - knownMetadata.add("android.drm.DrmManagerClient$OnErrorListener"); - knownMetadata.add("android.drm.DrmManagerClient$OnEventListener"); - knownMetadata.add("android.drm.DrmManagerClient$OnInfoListener"); - knownMetadata.add("android.drm.DrmRights"); - knownMetadata.add("android.drm.DrmStore"); - knownMetadata.add("android.drm.DrmStore$Action"); - knownMetadata.add("android.drm.DrmStore$ConstraintsColumns"); - knownMetadata.add("android.drm.DrmStore$DrmObjectType"); - knownMetadata.add("android.drm.DrmStore$Playback"); - knownMetadata.add("android.drm.DrmStore$RightsStatus"); - knownMetadata.add("android.drm.DrmSupportInfo"); - knownMetadata.add("android.drm.DrmUtils"); - knownMetadata.add("android.drm.DrmUtils$ExtendedMetadataParser"); - knownMetadata.add("android.drm.ProcessedData"); - knownMetadata.add("android.gesture.Gesture"); - knownMetadata.add("android.gesture.GestureLibraries"); - knownMetadata.add("android.gesture.GestureLibrary"); - knownMetadata.add("android.gesture.GestureOverlayView"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGestureListener"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGesturePerformedListener"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGesturingListener"); - knownMetadata.add("android.gesture.GesturePoint"); - knownMetadata.add("android.gesture.GestureStore"); - knownMetadata.add("android.gesture.GestureStroke"); - knownMetadata.add("android.gesture.GestureUtils"); - knownMetadata.add("android.gesture.OrientedBoundingBox"); - knownMetadata.add("android.gesture.Prediction"); - knownMetadata.add("android.graphics.AvoidXfermode"); - knownMetadata.add("android.graphics.AvoidXfermode$Mode"); - knownMetadata.add("android.graphics.Bitmap"); - knownMetadata.add("android.graphics.Bitmap$CompressFormat"); - knownMetadata.add("android.graphics.Bitmap$Config"); - knownMetadata.add("android.graphics.BitmapFactory"); - knownMetadata.add("android.graphics.BitmapFactory$Options"); - knownMetadata.add("android.graphics.BitmapRegionDecoder"); - knownMetadata.add("android.graphics.BitmapShader"); - knownMetadata.add("android.graphics.BlurMaskFilter"); - knownMetadata.add("android.graphics.BlurMaskFilter$Blur"); - knownMetadata.add("android.graphics.Camera"); - knownMetadata.add("android.graphics.Canvas"); - knownMetadata.add("android.graphics.Canvas$EdgeType"); - knownMetadata.add("android.graphics.Canvas$VertexMode"); - knownMetadata.add("android.graphics.Color"); - knownMetadata.add("android.graphics.ColorFilter"); - knownMetadata.add("android.graphics.ColorMatrix"); - knownMetadata.add("android.graphics.ColorMatrixColorFilter"); - knownMetadata.add("android.graphics.ComposePathEffect"); - knownMetadata.add("android.graphics.ComposeShader"); - knownMetadata.add("android.graphics.CornerPathEffect"); - knownMetadata.add("android.graphics.DashPathEffect"); - knownMetadata.add("android.graphics.DiscretePathEffect"); - knownMetadata.add("android.graphics.DrawFilter"); - knownMetadata.add("android.graphics.EmbossMaskFilter"); - knownMetadata.add("android.graphics.ImageFormat"); - knownMetadata.add("android.graphics.Interpolator"); - knownMetadata.add("android.graphics.Interpolator$Result"); - knownMetadata.add("android.graphics.LayerRasterizer"); - knownMetadata.add("android.graphics.LightingColorFilter"); - knownMetadata.add("android.graphics.LinearGradient"); - knownMetadata.add("android.graphics.MaskFilter"); - knownMetadata.add("android.graphics.Matrix"); - knownMetadata.add("android.graphics.Matrix$ScaleToFit"); - knownMetadata.add("android.graphics.Movie"); - knownMetadata.add("android.graphics.NinePatch"); - knownMetadata.add("android.graphics.Paint"); - knownMetadata.add("android.graphics.Paint$Align"); - knownMetadata.add("android.graphics.Paint$Cap"); - knownMetadata.add("android.graphics.Paint$FontMetrics"); - knownMetadata.add("android.graphics.Paint$FontMetricsInt"); - knownMetadata.add("android.graphics.Paint$Join"); - knownMetadata.add("android.graphics.Paint$Style"); - knownMetadata.add("android.graphics.PaintFlagsDrawFilter"); - knownMetadata.add("android.graphics.Path"); - knownMetadata.add("android.graphics.Path$Direction"); - knownMetadata.add("android.graphics.Path$FillType"); - knownMetadata.add("android.graphics.PathDashPathEffect"); - knownMetadata.add("android.graphics.PathDashPathEffect$Style"); - knownMetadata.add("android.graphics.PathEffect"); - knownMetadata.add("android.graphics.PathMeasure"); - knownMetadata.add("android.graphics.Picture"); - knownMetadata.add("android.graphics.PixelFormat"); - knownMetadata.add("android.graphics.PixelXorXfermode"); - knownMetadata.add("android.graphics.Point"); - knownMetadata.add("android.graphics.PointF"); - knownMetadata.add("android.graphics.PorterDuff"); - knownMetadata.add("android.graphics.PorterDuff$Mode"); - knownMetadata.add("android.graphics.PorterDuffColorFilter"); - knownMetadata.add("android.graphics.PorterDuffXfermode"); - knownMetadata.add("android.graphics.RadialGradient"); - knownMetadata.add("android.graphics.Rasterizer"); - knownMetadata.add("android.graphics.Rect"); - knownMetadata.add("android.graphics.RectF"); - knownMetadata.add("android.graphics.Region"); - knownMetadata.add("android.graphics.Region$Op"); - knownMetadata.add("android.graphics.RegionIterator"); - knownMetadata.add("android.graphics.Shader"); - knownMetadata.add("android.graphics.Shader$TileMode"); - knownMetadata.add("android.graphics.SumPathEffect"); - knownMetadata.add("android.graphics.SurfaceTexture"); - knownMetadata.add("android.graphics.SurfaceTexture$OnFrameAvailableListener"); - knownMetadata.add("android.graphics.SurfaceTexture$OutOfResourcesException"); - knownMetadata.add("android.graphics.SweepGradient"); - knownMetadata.add("android.graphics.Typeface"); - knownMetadata.add("android.graphics.Xfermode"); - knownMetadata.add("android.graphics.YuvImage"); - knownMetadata.add("android.graphics.drawable.Animatable"); - knownMetadata.add("android.graphics.drawable.AnimationDrawable"); - knownMetadata.add("android.graphics.drawable.BitmapDrawable"); - knownMetadata.add("android.graphics.drawable.ClipDrawable"); - knownMetadata.add("android.graphics.drawable.ColorDrawable"); - knownMetadata.add("android.graphics.drawable.Drawable"); - knownMetadata.add("android.graphics.drawable.Drawable$Callback"); - knownMetadata.add("android.graphics.drawable.Drawable$ConstantState"); - knownMetadata.add("android.graphics.drawable.DrawableContainer"); - knownMetadata.add("android.graphics.drawable.DrawableContainer$DrawableContainerState"); - knownMetadata.add("android.graphics.drawable.GradientDrawable"); - knownMetadata.add("android.graphics.drawable.GradientDrawable$Orientation"); - knownMetadata.add("android.graphics.drawable.InsetDrawable"); - knownMetadata.add("android.graphics.drawable.LayerDrawable"); - knownMetadata.add("android.graphics.drawable.LevelListDrawable"); - knownMetadata.add("android.graphics.drawable.NinePatchDrawable"); - knownMetadata.add("android.graphics.drawable.PaintDrawable"); - knownMetadata.add("android.graphics.drawable.PictureDrawable"); - knownMetadata.add("android.graphics.drawable.RotateDrawable"); - knownMetadata.add("android.graphics.drawable.ScaleDrawable"); - knownMetadata.add("android.graphics.drawable.ShapeDrawable"); - knownMetadata.add("android.graphics.drawable.ShapeDrawable$ShaderFactory"); - knownMetadata.add("android.graphics.drawable.StateListDrawable"); - knownMetadata.add("android.graphics.drawable.TransitionDrawable"); - knownMetadata.add("android.graphics.drawable.shapes.ArcShape"); - knownMetadata.add("android.graphics.drawable.shapes.OvalShape"); - knownMetadata.add("android.graphics.drawable.shapes.PathShape"); - knownMetadata.add("android.graphics.drawable.shapes.RectShape"); - knownMetadata.add("android.graphics.drawable.shapes.RoundRectShape"); - knownMetadata.add("android.graphics.drawable.shapes.Shape"); - knownMetadata.add("android.hardware.Camera"); - knownMetadata.add("android.hardware.Camera$Area"); - knownMetadata.add("android.hardware.Camera$AutoFocusCallback"); - knownMetadata.add("android.hardware.Camera$AutoFocusMoveCallback"); - knownMetadata.add("android.hardware.Camera$CameraInfo"); - knownMetadata.add("android.hardware.Camera$ErrorCallback"); - knownMetadata.add("android.hardware.Camera$Face"); - knownMetadata.add("android.hardware.Camera$FaceDetectionListener"); - knownMetadata.add("android.hardware.Camera$OnZoomChangeListener"); - knownMetadata.add("android.hardware.Camera$Parameters"); - knownMetadata.add("android.hardware.Camera$PictureCallback"); - knownMetadata.add("android.hardware.Camera$PreviewCallback"); - knownMetadata.add("android.hardware.Camera$ShutterCallback"); - knownMetadata.add("android.hardware.Camera$Size"); - knownMetadata.add("android.hardware.GeomagneticField"); - knownMetadata.add("android.hardware.Sensor"); - knownMetadata.add("android.hardware.SensorEvent"); - knownMetadata.add("android.hardware.SensorEventListener"); - knownMetadata.add("android.hardware.SensorListener"); - knownMetadata.add("android.hardware.SensorManager"); - knownMetadata.add("android.hardware.display.DisplayManager"); - knownMetadata.add("android.hardware.display.DisplayManager$DisplayListener"); - knownMetadata.add("android.hardware.input.InputManager"); - knownMetadata.add("android.hardware.input.InputManager$InputDeviceListener"); - knownMetadata.add("android.hardware.usb.UsbAccessory"); - knownMetadata.add("android.hardware.usb.UsbConstants"); - knownMetadata.add("android.hardware.usb.UsbDevice"); - knownMetadata.add("android.hardware.usb.UsbDeviceConnection"); - knownMetadata.add("android.hardware.usb.UsbEndpoint"); - knownMetadata.add("android.hardware.usb.UsbInterface"); - knownMetadata.add("android.hardware.usb.UsbManager"); - knownMetadata.add("android.hardware.usb.UsbRequest"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodImpl"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl"); - knownMetadata.add("android.inputmethodservice.ExtractEditText"); - knownMetadata.add("android.inputmethodservice.InputMethodService"); - knownMetadata.add("android.inputmethodservice.InputMethodService$InputMethodImpl"); - knownMetadata.add("android.inputmethodservice.InputMethodService$InputMethodSessionImpl"); - knownMetadata.add("android.inputmethodservice.InputMethodService$Insets"); - knownMetadata.add("android.inputmethodservice.Keyboard"); - knownMetadata.add("android.inputmethodservice.Keyboard$Key"); - knownMetadata.add("android.inputmethodservice.Keyboard$Row"); - knownMetadata.add("android.inputmethodservice.KeyboardView"); - knownMetadata.add("android.inputmethodservice.KeyboardView$OnKeyboardActionListener"); - knownMetadata.add("android.location.Address"); - knownMetadata.add("android.location.Criteria"); - knownMetadata.add("android.location.Geocoder"); - knownMetadata.add("android.location.GpsSatellite"); - knownMetadata.add("android.location.GpsStatus"); - knownMetadata.add("android.location.GpsStatus$Listener"); - knownMetadata.add("android.location.GpsStatus$NmeaListener"); - knownMetadata.add("android.location.Location"); - knownMetadata.add("android.location.LocationListener"); - knownMetadata.add("android.location.LocationManager"); - knownMetadata.add("android.location.LocationProvider"); - knownMetadata.add("android.media.AsyncPlayer"); - knownMetadata.add("android.media.AudioFormat"); - knownMetadata.add("android.media.AudioManager"); - knownMetadata.add("android.media.AudioManager$OnAudioFocusChangeListener"); - knownMetadata.add("android.media.AudioRecord"); - knownMetadata.add("android.media.AudioRecord$OnRecordPositionUpdateListener"); - knownMetadata.add("android.media.AudioTrack"); - knownMetadata.add("android.media.AudioTrack$OnPlaybackPositionUpdateListener"); - knownMetadata.add("android.media.CamcorderProfile"); - knownMetadata.add("android.media.CameraProfile"); - knownMetadata.add("android.media.ExifInterface"); - knownMetadata.add("android.media.FaceDetector"); - knownMetadata.add("android.media.FaceDetector$Face"); - knownMetadata.add("android.media.JetPlayer"); - knownMetadata.add("android.media.JetPlayer$OnJetEventListener"); - knownMetadata.add("android.media.MediaActionSound"); - knownMetadata.add("android.media.MediaCodec"); - knownMetadata.add("android.media.MediaCodec$BufferInfo"); - knownMetadata.add("android.media.MediaCodec$CryptoException"); - knownMetadata.add("android.media.MediaCodec$CryptoInfo"); - knownMetadata.add("android.media.MediaCodecInfo"); - knownMetadata.add("android.media.MediaCodecInfo$CodecCapabilities"); - knownMetadata.add("android.media.MediaCodecInfo$CodecProfileLevel"); - knownMetadata.add("android.media.MediaCodecList"); - knownMetadata.add("android.media.MediaCrypto"); - knownMetadata.add("android.media.MediaCryptoException"); - knownMetadata.add("android.media.MediaExtractor"); - knownMetadata.add("android.media.MediaFormat"); - knownMetadata.add("android.media.MediaMetadataRetriever"); - knownMetadata.add("android.media.MediaPlayer"); - knownMetadata.add("android.media.MediaPlayer$OnBufferingUpdateListener"); - knownMetadata.add("android.media.MediaPlayer$OnCompletionListener"); - knownMetadata.add("android.media.MediaPlayer$OnErrorListener"); - knownMetadata.add("android.media.MediaPlayer$OnInfoListener"); - knownMetadata.add("android.media.MediaPlayer$OnPreparedListener"); - knownMetadata.add("android.media.MediaPlayer$OnSeekCompleteListener"); - knownMetadata.add("android.media.MediaPlayer$OnTimedTextListener"); - knownMetadata.add("android.media.MediaPlayer$OnVideoSizeChangedListener"); - knownMetadata.add("android.media.MediaPlayer$TrackInfo"); - knownMetadata.add("android.media.MediaRecorder"); - knownMetadata.add("android.media.MediaRecorder$AudioEncoder"); - knownMetadata.add("android.media.MediaRecorder$AudioSource"); - knownMetadata.add("android.media.MediaRecorder$OnErrorListener"); - knownMetadata.add("android.media.MediaRecorder$OnInfoListener"); - knownMetadata.add("android.media.MediaRecorder$OutputFormat"); - knownMetadata.add("android.media.MediaRecorder$VideoEncoder"); - knownMetadata.add("android.media.MediaRecorder$VideoSource"); - knownMetadata.add("android.media.MediaRouter"); - knownMetadata.add("android.media.MediaRouter$Callback"); - knownMetadata.add("android.media.MediaRouter$RouteCategory"); - knownMetadata.add("android.media.MediaRouter$RouteGroup"); - knownMetadata.add("android.media.MediaRouter$RouteInfo"); - knownMetadata.add("android.media.MediaRouter$SimpleCallback"); - knownMetadata.add("android.media.MediaRouter$UserRouteInfo"); - knownMetadata.add("android.media.MediaRouter$VolumeCallback"); - knownMetadata.add("android.media.MediaScannerConnection"); - knownMetadata.add("android.media.MediaScannerConnection$MediaScannerConnectionClient"); - knownMetadata.add("android.media.MediaScannerConnection$OnScanCompletedListener"); - knownMetadata.add("android.media.MediaSyncEvent"); - knownMetadata.add("android.media.RemoteControlClient"); - knownMetadata.add("android.media.RemoteControlClient$MetadataEditor"); - knownMetadata.add("android.media.Ringtone"); - knownMetadata.add("android.media.RingtoneManager"); - knownMetadata.add("android.media.SoundPool"); - knownMetadata.add("android.media.SoundPool$OnLoadCompleteListener"); - knownMetadata.add("android.media.ThumbnailUtils"); - knownMetadata.add("android.media.TimedText"); - knownMetadata.add("android.media.ToneGenerator"); - knownMetadata.add("android.media.audiofx.AcousticEchoCanceler"); - knownMetadata.add("android.media.audiofx.AudioEffect"); - knownMetadata.add("android.media.audiofx.AudioEffect$Descriptor"); - knownMetadata.add("android.media.audiofx.AudioEffect$OnControlStatusChangeListener"); - knownMetadata.add("android.media.audiofx.AudioEffect$OnEnableStatusChangeListener"); - knownMetadata.add("android.media.audiofx.AutomaticGainControl"); - knownMetadata.add("android.media.audiofx.BassBoost"); - knownMetadata.add("android.media.audiofx.BassBoost$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.BassBoost$Settings"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb$Settings"); - knownMetadata.add("android.media.audiofx.Equalizer"); - knownMetadata.add("android.media.audiofx.Equalizer$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.Equalizer$Settings"); - knownMetadata.add("android.media.audiofx.NoiseSuppressor"); - knownMetadata.add("android.media.audiofx.PresetReverb"); - knownMetadata.add("android.media.audiofx.PresetReverb$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.PresetReverb$Settings"); - knownMetadata.add("android.media.audiofx.Virtualizer"); - knownMetadata.add("android.media.audiofx.Virtualizer$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.Virtualizer$Settings"); - knownMetadata.add("android.media.audiofx.Visualizer"); - knownMetadata.add("android.media.audiofx.Visualizer$OnDataCaptureListener"); - knownMetadata.add("android.media.effect.Effect"); - knownMetadata.add("android.media.effect.EffectContext"); - knownMetadata.add("android.media.effect.EffectFactory"); - knownMetadata.add("android.media.effect.EffectUpdateListener"); - knownMetadata.add("android.mtp.MtpConstants"); - knownMetadata.add("android.mtp.MtpDevice"); - knownMetadata.add("android.mtp.MtpDeviceInfo"); - knownMetadata.add("android.mtp.MtpObjectInfo"); - knownMetadata.add("android.mtp.MtpStorageInfo"); - knownMetadata.add("android.net.ConnectivityManager"); - knownMetadata.add("android.net.Credentials"); - knownMetadata.add("android.net.DhcpInfo"); - knownMetadata.add("android.net.LocalServerSocket"); - knownMetadata.add("android.net.LocalSocket"); - knownMetadata.add("android.net.LocalSocketAddress"); - knownMetadata.add("android.net.LocalSocketAddress$Namespace"); - knownMetadata.add("android.net.MailTo"); - knownMetadata.add("android.net.NetworkInfo"); - knownMetadata.add("android.net.NetworkInfo$DetailedState"); - knownMetadata.add("android.net.NetworkInfo$State"); - knownMetadata.add("android.net.ParseException"); - knownMetadata.add("android.net.Proxy"); - knownMetadata.add("android.net.SSLCertificateSocketFactory"); - knownMetadata.add("android.net.SSLSessionCache"); - knownMetadata.add("android.net.TrafficStats"); - knownMetadata.add("android.net.Uri"); - knownMetadata.add("android.net.Uri$Builder"); - knownMetadata.add("android.net.UrlQuerySanitizer"); - knownMetadata.add("android.net.UrlQuerySanitizer$IllegalCharacterValueSanitizer"); - knownMetadata.add("android.net.UrlQuerySanitizer$ParameterValuePair"); - knownMetadata.add("android.net.UrlQuerySanitizer$ValueSanitizer"); - knownMetadata.add("android.net.VpnService"); - knownMetadata.add("android.net.VpnService$Builder"); - knownMetadata.add("android.net.http.AndroidHttpClient"); - knownMetadata.add("android.net.http.HttpResponseCache"); - knownMetadata.add("android.net.http.SslCertificate"); - knownMetadata.add("android.net.http.SslCertificate$DName"); - knownMetadata.add("android.net.http.SslError"); - knownMetadata.add("android.net.http.X509TrustManagerExtensions"); - knownMetadata.add("android.net.nsd.NsdManager"); - knownMetadata.add("android.net.nsd.NsdManager$DiscoveryListener"); - knownMetadata.add("android.net.nsd.NsdManager$RegistrationListener"); - knownMetadata.add("android.net.nsd.NsdManager$ResolveListener"); - knownMetadata.add("android.net.nsd.NsdServiceInfo"); - knownMetadata.add("android.net.rtp.AudioCodec"); - knownMetadata.add("android.net.rtp.AudioGroup"); - knownMetadata.add("android.net.rtp.AudioStream"); - knownMetadata.add("android.net.rtp.RtpStream"); - knownMetadata.add("android.net.sip.SipAudioCall"); - knownMetadata.add("android.net.sip.SipAudioCall$Listener"); - knownMetadata.add("android.net.sip.SipErrorCode"); - knownMetadata.add("android.net.sip.SipException"); - knownMetadata.add("android.net.sip.SipManager"); - knownMetadata.add("android.net.sip.SipProfile"); - knownMetadata.add("android.net.sip.SipProfile$Builder"); - knownMetadata.add("android.net.sip.SipRegistrationListener"); - knownMetadata.add("android.net.sip.SipSession"); - knownMetadata.add("android.net.sip.SipSession$Listener"); - knownMetadata.add("android.net.sip.SipSession$State"); - knownMetadata.add("android.net.wifi.ScanResult"); - knownMetadata.add("android.net.wifi.SupplicantState"); - knownMetadata.add("android.net.wifi.WifiConfiguration"); - knownMetadata.add("android.net.wifi.WifiConfiguration$AuthAlgorithm"); - knownMetadata.add("android.net.wifi.WifiConfiguration$GroupCipher"); - knownMetadata.add("android.net.wifi.WifiConfiguration$KeyMgmt"); - knownMetadata.add("android.net.wifi.WifiConfiguration$PairwiseCipher"); - knownMetadata.add("android.net.wifi.WifiConfiguration$Protocol"); - knownMetadata.add("android.net.wifi.WifiConfiguration$Status"); - knownMetadata.add("android.net.wifi.WifiInfo"); - knownMetadata.add("android.net.wifi.WifiManager"); - knownMetadata.add("android.net.wifi.WifiManager$MulticastLock"); - knownMetadata.add("android.net.wifi.WifiManager$WifiLock"); - knownMetadata.add("android.net.wifi.WpsInfo"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pConfig"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pDevice"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pDeviceList"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pGroup"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pInfo"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ActionListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$Channel"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ChannelListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ConnectionInfoListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$DnsSdServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$DnsSdTxtRecordListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$GroupInfoListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$PeerListListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$UpnpServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pServiceRequest"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest"); - knownMetadata.add("android.nfc.FormatException"); - knownMetadata.add("android.nfc.NdefMessage"); - knownMetadata.add("android.nfc.NdefRecord"); - knownMetadata.add("android.nfc.NfcAdapter"); - knownMetadata.add("android.nfc.NfcAdapter$CreateBeamUrisCallback"); - knownMetadata.add("android.nfc.NfcAdapter$CreateNdefMessageCallback"); - knownMetadata.add("android.nfc.NfcAdapter$OnNdefPushCompleteCallback"); - knownMetadata.add("android.nfc.NfcEvent"); - knownMetadata.add("android.nfc.NfcManager"); - knownMetadata.add("android.nfc.Tag"); - knownMetadata.add("android.nfc.TagLostException"); - knownMetadata.add("android.nfc.tech.IsoDep"); - knownMetadata.add("android.nfc.tech.MifareClassic"); - knownMetadata.add("android.nfc.tech.MifareUltralight"); - knownMetadata.add("android.nfc.tech.Ndef"); - knownMetadata.add("android.nfc.tech.NdefFormatable"); - knownMetadata.add("android.nfc.tech.NfcA"); - knownMetadata.add("android.nfc.tech.NfcB"); - knownMetadata.add("android.nfc.tech.NfcBarcode"); - knownMetadata.add("android.nfc.tech.NfcF"); - knownMetadata.add("android.nfc.tech.NfcV"); - knownMetadata.add("android.nfc.tech.TagTechnology"); - knownMetadata.add("android.opengl.EGL14"); - knownMetadata.add("android.opengl.EGLConfig"); - knownMetadata.add("android.opengl.EGLContext"); - knownMetadata.add("android.opengl.EGLDisplay"); - knownMetadata.add("android.opengl.EGLObjectHandle"); - knownMetadata.add("android.opengl.EGLSurface"); - knownMetadata.add("android.opengl.ETC1"); - knownMetadata.add("android.opengl.ETC1Util"); - knownMetadata.add("android.opengl.ETC1Util$ETC1Texture"); - knownMetadata.add("android.opengl.GLDebugHelper"); - knownMetadata.add("android.opengl.GLES10"); - knownMetadata.add("android.opengl.GLES10Ext"); - knownMetadata.add("android.opengl.GLES11"); - knownMetadata.add("android.opengl.GLES11Ext"); - knownMetadata.add("android.opengl.GLES20"); - knownMetadata.add("android.opengl.GLException"); - knownMetadata.add("android.opengl.GLSurfaceView"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLConfigChooser"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLContextFactory"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLWindowSurfaceFactory"); - knownMetadata.add("android.opengl.GLSurfaceView$GLWrapper"); - knownMetadata.add("android.opengl.GLSurfaceView$Renderer"); - knownMetadata.add("android.opengl.GLU"); - knownMetadata.add("android.opengl.GLUtils"); - knownMetadata.add("android.opengl.Matrix"); - knownMetadata.add("android.opengl.Visibility"); - knownMetadata.add("android.os.AsyncTask"); - knownMetadata.add("android.os.AsyncTask$Status"); - knownMetadata.add("android.os.BadParcelableException"); - knownMetadata.add("android.os.BatteryManager"); - knownMetadata.add("android.os.Binder"); - knownMetadata.add("android.os.Build"); - knownMetadata.add("android.os.Build$VERSION"); - knownMetadata.add("android.os.Build$VERSION_CODES"); - knownMetadata.add("android.os.Bundle"); - knownMetadata.add("android.os.CancellationSignal"); - knownMetadata.add("android.os.CancellationSignal$OnCancelListener"); - knownMetadata.add("android.os.ConditionVariable"); - knownMetadata.add("android.os.CountDownTimer"); - knownMetadata.add("android.os.DeadObjectException"); - knownMetadata.add("android.os.Debug"); - knownMetadata.add("android.os.Debug$InstructionCount"); - knownMetadata.add("android.os.Debug$MemoryInfo"); - knownMetadata.add("android.os.DropBoxManager"); - knownMetadata.add("android.os.DropBoxManager$Entry"); - knownMetadata.add("android.os.Environment"); - knownMetadata.add("android.os.FileObserver"); - knownMetadata.add("android.os.Handler"); - knownMetadata.add("android.os.Handler$Callback"); - knownMetadata.add("android.os.HandlerThread"); - knownMetadata.add("android.os.IBinder"); - knownMetadata.add("android.os.IBinder$DeathRecipient"); - knownMetadata.add("android.os.IInterface"); - knownMetadata.add("android.os.Looper"); - knownMetadata.add("android.os.MemoryFile"); - knownMetadata.add("android.os.Message"); - knownMetadata.add("android.os.MessageQueue"); - knownMetadata.add("android.os.MessageQueue$IdleHandler"); - knownMetadata.add("android.os.Messenger"); - knownMetadata.add("android.os.NetworkOnMainThreadException"); - knownMetadata.add("android.os.OperationCanceledException"); - knownMetadata.add("android.os.Parcel"); - knownMetadata.add("android.os.ParcelFileDescriptor"); - knownMetadata.add("android.os.ParcelFileDescriptor$AutoCloseInputStream"); - knownMetadata.add("android.os.ParcelFileDescriptor$AutoCloseOutputStream"); - knownMetadata.add("android.os.ParcelFormatException"); - knownMetadata.add("android.os.ParcelUuid"); - knownMetadata.add("android.os.Parcelable"); - knownMetadata.add("android.os.Parcelable$ClassLoaderCreator"); - knownMetadata.add("android.os.Parcelable$Creator"); - knownMetadata.add("android.os.PatternMatcher"); - knownMetadata.add("android.os.PowerManager"); - knownMetadata.add("android.os.PowerManager$WakeLock"); - knownMetadata.add("android.os.Process"); - knownMetadata.add("android.os.RecoverySystem"); - knownMetadata.add("android.os.RecoverySystem$ProgressListener"); - knownMetadata.add("android.os.RemoteCallbackList"); - knownMetadata.add("android.os.RemoteException"); - knownMetadata.add("android.os.ResultReceiver"); - knownMetadata.add("android.os.StatFs"); - knownMetadata.add("android.os.StrictMode"); - knownMetadata.add("android.os.StrictMode$ThreadPolicy"); - knownMetadata.add("android.os.StrictMode$ThreadPolicy$Builder"); - knownMetadata.add("android.os.StrictMode$VmPolicy"); - knownMetadata.add("android.os.StrictMode$VmPolicy$Builder"); - knownMetadata.add("android.os.SystemClock"); - knownMetadata.add("android.os.TokenWatcher"); - knownMetadata.add("android.os.TransactionTooLargeException"); - knownMetadata.add("android.os.UserHandle"); - knownMetadata.add("android.os.UserManager"); - knownMetadata.add("android.os.Vibrator"); - knownMetadata.add("android.os.WorkSource"); - knownMetadata.add("android.os.storage.OnObbStateChangeListener"); - knownMetadata.add("android.os.storage.StorageManager"); - knownMetadata.add("android.preference.CheckBoxPreference"); - knownMetadata.add("android.preference.DialogPreference"); - knownMetadata.add("android.preference.EditTextPreference"); - knownMetadata.add("android.preference.ListPreference"); - knownMetadata.add("android.preference.MultiSelectListPreference"); - knownMetadata.add("android.preference.Preference"); - knownMetadata.add("android.preference.Preference$BaseSavedState"); - knownMetadata.add("android.preference.Preference$OnPreferenceChangeListener"); - knownMetadata.add("android.preference.Preference$OnPreferenceClickListener"); - knownMetadata.add("android.preference.PreferenceActivity"); - knownMetadata.add("android.preference.PreferenceActivity$Header"); - knownMetadata.add("android.preference.PreferenceCategory"); - knownMetadata.add("android.preference.PreferenceFragment"); - knownMetadata.add("android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback"); - knownMetadata.add("android.preference.PreferenceGroup"); - knownMetadata.add("android.preference.PreferenceManager"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityDestroyListener"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityResultListener"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityStopListener"); - knownMetadata.add("android.preference.PreferenceScreen"); - knownMetadata.add("android.preference.RingtonePreference"); - knownMetadata.add("android.preference.SwitchPreference"); - knownMetadata.add("android.preference.TwoStatePreference"); - knownMetadata.add("android.provider.AlarmClock"); - knownMetadata.add("android.provider.BaseColumns"); - knownMetadata.add("android.provider.Browser"); - knownMetadata.add("android.provider.Browser$BookmarkColumns"); - knownMetadata.add("android.provider.Browser$SearchColumns"); - knownMetadata.add("android.provider.CalendarContract"); - knownMetadata.add("android.provider.CalendarContract$Attendees"); - knownMetadata.add("android.provider.CalendarContract$CalendarAlerts"); - knownMetadata.add("android.provider.CalendarContract$CalendarCache"); - knownMetadata.add("android.provider.CalendarContract$CalendarEntity"); - knownMetadata.add("android.provider.CalendarContract$Calendars"); - knownMetadata.add("android.provider.CalendarContract$Colors"); - knownMetadata.add("android.provider.CalendarContract$EventDays"); - knownMetadata.add("android.provider.CalendarContract$Events"); - knownMetadata.add("android.provider.CalendarContract$EventsEntity"); - knownMetadata.add("android.provider.CalendarContract$ExtendedProperties"); - knownMetadata.add("android.provider.CalendarContract$Instances"); - knownMetadata.add("android.provider.CalendarContract$Reminders"); - knownMetadata.add("android.provider.CalendarContract$SyncState"); - knownMetadata.add("android.provider.CallLog"); - knownMetadata.add("android.provider.CallLog$Calls"); - knownMetadata.add("android.provider.Contacts"); - knownMetadata.add("android.provider.Contacts$ContactMethods"); - knownMetadata.add("android.provider.Contacts$ContactMethodsColumns"); - knownMetadata.add("android.provider.Contacts$Extensions"); - knownMetadata.add("android.provider.Contacts$ExtensionsColumns"); - knownMetadata.add("android.provider.Contacts$GroupMembership"); - knownMetadata.add("android.provider.Contacts$Groups"); - knownMetadata.add("android.provider.Contacts$GroupsColumns"); - knownMetadata.add("android.provider.Contacts$Intents"); - knownMetadata.add("android.provider.Contacts$Intents$Insert"); - knownMetadata.add("android.provider.Contacts$Intents$UI"); - knownMetadata.add("android.provider.Contacts$OrganizationColumns"); - knownMetadata.add("android.provider.Contacts$Organizations"); - knownMetadata.add("android.provider.Contacts$People"); - knownMetadata.add("android.provider.Contacts$People$ContactMethods"); - knownMetadata.add("android.provider.Contacts$People$Extensions"); - knownMetadata.add("android.provider.Contacts$People$Phones"); - knownMetadata.add("android.provider.Contacts$PeopleColumns"); - knownMetadata.add("android.provider.Contacts$Phones"); - knownMetadata.add("android.provider.Contacts$PhonesColumns"); - knownMetadata.add("android.provider.Contacts$Photos"); - knownMetadata.add("android.provider.Contacts$PhotosColumns"); - knownMetadata.add("android.provider.Contacts$PresenceColumns"); - knownMetadata.add("android.provider.Contacts$Settings"); - knownMetadata.add("android.provider.Contacts$SettingsColumns"); - knownMetadata.add("android.provider.ContactsContract"); - knownMetadata.add("android.provider.ContactsContract$AggregationExceptions"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$BaseTypes"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Email"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Event"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$GroupMembership"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Identity"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Im"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Nickname"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Note"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Organization"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Phone"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Photo"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Relation"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$SipAddress"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$StructuredName"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$StructuredPostal"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Website"); - knownMetadata.add("android.provider.ContactsContract$Contacts"); - knownMetadata.add("android.provider.ContactsContract$Contacts$AggregationSuggestions"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Data"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Entity"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Photo"); - knownMetadata.add("android.provider.ContactsContract$Contacts$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$Data"); - knownMetadata.add("android.provider.ContactsContract$DataUsageFeedback"); - knownMetadata.add("android.provider.ContactsContract$Directory"); - knownMetadata.add("android.provider.ContactsContract$DisplayNameSources"); - knownMetadata.add("android.provider.ContactsContract$DisplayPhoto"); - knownMetadata.add("android.provider.ContactsContract$FullNameStyle"); - knownMetadata.add("android.provider.ContactsContract$Groups"); - knownMetadata.add("android.provider.ContactsContract$Intents"); - knownMetadata.add("android.provider.ContactsContract$Intents$Insert"); - knownMetadata.add("android.provider.ContactsContract$PhoneLookup"); - knownMetadata.add("android.provider.ContactsContract$PhoneticNameStyle"); - knownMetadata.add("android.provider.ContactsContract$Presence"); - knownMetadata.add("android.provider.ContactsContract$Profile"); - knownMetadata.add("android.provider.ContactsContract$ProfileSyncState"); - knownMetadata.add("android.provider.ContactsContract$QuickContact"); - knownMetadata.add("android.provider.ContactsContract$RawContacts"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$Data"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$DisplayPhoto"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$Entity"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$RawContactsEntity"); - knownMetadata.add("android.provider.ContactsContract$Settings"); - knownMetadata.add("android.provider.ContactsContract$StatusUpdates"); - knownMetadata.add("android.provider.ContactsContract$StreamItemPhotos"); - knownMetadata.add("android.provider.ContactsContract$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$StreamItems$StreamItemPhotos"); - knownMetadata.add("android.provider.ContactsContract$SyncState"); - knownMetadata.add("android.provider.LiveFolders"); - knownMetadata.add("android.provider.MediaStore"); - knownMetadata.add("android.provider.MediaStore$Audio"); - knownMetadata.add("android.provider.MediaStore$Audio$AlbumColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Albums"); - knownMetadata.add("android.provider.MediaStore$Audio$ArtistColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Artists"); - knownMetadata.add("android.provider.MediaStore$Audio$Artists$Albums"); - knownMetadata.add("android.provider.MediaStore$Audio$AudioColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Genres"); - knownMetadata.add("android.provider.MediaStore$Audio$Genres$Members"); - knownMetadata.add("android.provider.MediaStore$Audio$GenresColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Media"); - knownMetadata.add("android.provider.MediaStore$Audio$Playlists"); - knownMetadata.add("android.provider.MediaStore$Audio$Playlists$Members"); - knownMetadata.add("android.provider.MediaStore$Audio$PlaylistsColumns"); - knownMetadata.add("android.provider.MediaStore$Files"); - knownMetadata.add("android.provider.MediaStore$Files$FileColumns"); - knownMetadata.add("android.provider.MediaStore$Images"); - knownMetadata.add("android.provider.MediaStore$Images$ImageColumns"); - knownMetadata.add("android.provider.MediaStore$Images$Media"); - knownMetadata.add("android.provider.MediaStore$Images$Thumbnails"); - knownMetadata.add("android.provider.MediaStore$MediaColumns"); - knownMetadata.add("android.provider.MediaStore$Video"); - knownMetadata.add("android.provider.MediaStore$Video$Media"); - knownMetadata.add("android.provider.MediaStore$Video$Thumbnails"); - knownMetadata.add("android.provider.MediaStore$Video$VideoColumns"); - knownMetadata.add("android.provider.OpenableColumns"); - knownMetadata.add("android.provider.SearchRecentSuggestions"); - knownMetadata.add("android.provider.Settings"); - knownMetadata.add("android.provider.Settings$Global"); - knownMetadata.add("android.provider.Settings$NameValueTable"); - knownMetadata.add("android.provider.Settings$Secure"); - knownMetadata.add("android.provider.Settings$SettingNotFoundException"); - knownMetadata.add("android.provider.Settings$System"); - knownMetadata.add("android.provider.SyncStateContract"); - knownMetadata.add("android.provider.SyncStateContract$Columns"); - knownMetadata.add("android.provider.SyncStateContract$Constants"); - knownMetadata.add("android.provider.SyncStateContract$Helpers"); - knownMetadata.add("android.provider.UserDictionary"); - knownMetadata.add("android.provider.UserDictionary$Words"); - knownMetadata.add("android.provider.VoicemailContract"); - knownMetadata.add("android.provider.VoicemailContract$Status"); - knownMetadata.add("android.provider.VoicemailContract$Voicemails"); - knownMetadata.add("android.renderscript.Allocation"); - knownMetadata.add("android.renderscript.Allocation$MipmapControl"); - knownMetadata.add("android.renderscript.AllocationAdapter"); - knownMetadata.add("android.renderscript.BaseObj"); - knownMetadata.add("android.renderscript.Byte2"); - knownMetadata.add("android.renderscript.Byte3"); - knownMetadata.add("android.renderscript.Byte4"); - knownMetadata.add("android.renderscript.Double2"); - knownMetadata.add("android.renderscript.Double3"); - knownMetadata.add("android.renderscript.Double4"); - knownMetadata.add("android.renderscript.Element"); - knownMetadata.add("android.renderscript.Element$Builder"); - knownMetadata.add("android.renderscript.Element$DataKind"); - knownMetadata.add("android.renderscript.Element$DataType"); - knownMetadata.add("android.renderscript.FieldPacker"); - knownMetadata.add("android.renderscript.FileA3D"); - knownMetadata.add("android.renderscript.FileA3D$EntryType"); - knownMetadata.add("android.renderscript.FileA3D$IndexEntry"); - knownMetadata.add("android.renderscript.Float2"); - knownMetadata.add("android.renderscript.Float3"); - knownMetadata.add("android.renderscript.Float4"); - knownMetadata.add("android.renderscript.Font"); - knownMetadata.add("android.renderscript.Font$Style"); - knownMetadata.add("android.renderscript.Int2"); - knownMetadata.add("android.renderscript.Int3"); - knownMetadata.add("android.renderscript.Int4"); - knownMetadata.add("android.renderscript.Long2"); - knownMetadata.add("android.renderscript.Long3"); - knownMetadata.add("android.renderscript.Long4"); - knownMetadata.add("android.renderscript.Matrix2f"); - knownMetadata.add("android.renderscript.Matrix3f"); - knownMetadata.add("android.renderscript.Matrix4f"); - knownMetadata.add("android.renderscript.Mesh"); - knownMetadata.add("android.renderscript.Mesh$AllocationBuilder"); - knownMetadata.add("android.renderscript.Mesh$Builder"); - knownMetadata.add("android.renderscript.Mesh$Primitive"); - knownMetadata.add("android.renderscript.Mesh$TriangleMeshBuilder"); - knownMetadata.add("android.renderscript.Program"); - knownMetadata.add("android.renderscript.Program$BaseProgramBuilder"); - knownMetadata.add("android.renderscript.Program$TextureType"); - knownMetadata.add("android.renderscript.ProgramFragment"); - knownMetadata.add("android.renderscript.ProgramFragment$Builder"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder$EnvMode"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder$Format"); - knownMetadata.add("android.renderscript.ProgramRaster"); - knownMetadata.add("android.renderscript.ProgramRaster$Builder"); - knownMetadata.add("android.renderscript.ProgramRaster$CullMode"); - knownMetadata.add("android.renderscript.ProgramStore"); - knownMetadata.add("android.renderscript.ProgramStore$BlendDstFunc"); - knownMetadata.add("android.renderscript.ProgramStore$BlendSrcFunc"); - knownMetadata.add("android.renderscript.ProgramStore$Builder"); - knownMetadata.add("android.renderscript.ProgramStore$DepthFunc"); - knownMetadata.add("android.renderscript.ProgramVertex"); - knownMetadata.add("android.renderscript.ProgramVertex$Builder"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction$Builder"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction$Constants"); - knownMetadata.add("android.renderscript.RSDriverException"); - knownMetadata.add("android.renderscript.RSIllegalArgumentException"); - knownMetadata.add("android.renderscript.RSInvalidStateException"); - knownMetadata.add("android.renderscript.RSRuntimeException"); - knownMetadata.add("android.renderscript.RSSurfaceView"); - knownMetadata.add("android.renderscript.RSTextureView"); - knownMetadata.add("android.renderscript.RenderScript"); - knownMetadata.add("android.renderscript.RenderScript$Priority"); - knownMetadata.add("android.renderscript.RenderScript$RSErrorHandler"); - knownMetadata.add("android.renderscript.RenderScript$RSMessageHandler"); - knownMetadata.add("android.renderscript.RenderScriptGL"); - knownMetadata.add("android.renderscript.RenderScriptGL$SurfaceConfig"); - knownMetadata.add("android.renderscript.Sampler"); - knownMetadata.add("android.renderscript.Sampler$Builder"); - knownMetadata.add("android.renderscript.Sampler$Value"); - knownMetadata.add("android.renderscript.Script"); - knownMetadata.add("android.renderscript.Script$Builder"); - knownMetadata.add("android.renderscript.Script$FieldBase"); - knownMetadata.add("android.renderscript.Script$FieldID"); - knownMetadata.add("android.renderscript.Script$KernelID"); - knownMetadata.add("android.renderscript.ScriptC"); - knownMetadata.add("android.renderscript.ScriptGroup"); - knownMetadata.add("android.renderscript.ScriptGroup$Builder"); - knownMetadata.add("android.renderscript.ScriptIntrinsic"); - knownMetadata.add("android.renderscript.ScriptIntrinsicBlend"); - knownMetadata.add("android.renderscript.ScriptIntrinsicBlur"); - knownMetadata.add("android.renderscript.ScriptIntrinsicColorMatrix"); - knownMetadata.add("android.renderscript.ScriptIntrinsicConvolve3x3"); - knownMetadata.add("android.renderscript.ScriptIntrinsicConvolve5x5"); - knownMetadata.add("android.renderscript.ScriptIntrinsicLUT"); - knownMetadata.add("android.renderscript.ScriptIntrinsicYuvToRGB"); - knownMetadata.add("android.renderscript.Short2"); - knownMetadata.add("android.renderscript.Short3"); - knownMetadata.add("android.renderscript.Short4"); - knownMetadata.add("android.renderscript.Type"); - knownMetadata.add("android.renderscript.Type$Builder"); - knownMetadata.add("android.renderscript.Type$CubemapFace"); - knownMetadata.add("android.sax.Element"); - knownMetadata.add("android.sax.ElementListener"); - knownMetadata.add("android.sax.EndElementListener"); - knownMetadata.add("android.sax.EndTextElementListener"); - knownMetadata.add("android.sax.RootElement"); - knownMetadata.add("android.sax.StartElementListener"); - knownMetadata.add("android.sax.TextElementListener"); - knownMetadata.add("android.security.KeyChain"); - knownMetadata.add("android.security.KeyChainAliasCallback"); - knownMetadata.add("android.security.KeyChainException"); - knownMetadata.add("android.service.dreams.DreamService"); - knownMetadata.add("android.service.textservice.SpellCheckerService"); - knownMetadata.add("android.service.textservice.SpellCheckerService$Session"); - knownMetadata.add("android.service.wallpaper.WallpaperService"); - knownMetadata.add("android.service.wallpaper.WallpaperService$Engine"); - knownMetadata.add("android.speech.RecognitionListener"); - knownMetadata.add("android.speech.RecognitionService"); - knownMetadata.add("android.speech.RecognitionService$Callback"); - knownMetadata.add("android.speech.RecognizerIntent"); - knownMetadata.add("android.speech.RecognizerResultsIntent"); - knownMetadata.add("android.speech.SpeechRecognizer"); - knownMetadata.add("android.speech.tts.SynthesisCallback"); - knownMetadata.add("android.speech.tts.SynthesisRequest"); - knownMetadata.add("android.speech.tts.TextToSpeech"); - knownMetadata.add("android.speech.tts.TextToSpeech$Engine"); - knownMetadata.add("android.speech.tts.TextToSpeech$EngineInfo"); - knownMetadata.add("android.speech.tts.TextToSpeech$OnInitListener"); - knownMetadata.add("android.speech.tts.TextToSpeech$OnUtteranceCompletedListener"); - knownMetadata.add("android.speech.tts.TextToSpeechService"); - knownMetadata.add("android.speech.tts.UtteranceProgressListener"); - knownMetadata.add("android.telephony.CellIdentityCdma"); - knownMetadata.add("android.telephony.CellIdentityGsm"); - knownMetadata.add("android.telephony.CellIdentityLte"); - knownMetadata.add("android.telephony.CellInfo"); - knownMetadata.add("android.telephony.CellInfoCdma"); - knownMetadata.add("android.telephony.CellInfoGsm"); - knownMetadata.add("android.telephony.CellInfoLte"); - knownMetadata.add("android.telephony.CellLocation"); - knownMetadata.add("android.telephony.CellSignalStrength"); - knownMetadata.add("android.telephony.CellSignalStrengthCdma"); - knownMetadata.add("android.telephony.CellSignalStrengthGsm"); - knownMetadata.add("android.telephony.CellSignalStrengthLte"); - knownMetadata.add("android.telephony.NeighboringCellInfo"); - knownMetadata.add("android.telephony.PhoneNumberFormattingTextWatcher"); - knownMetadata.add("android.telephony.PhoneNumberUtils"); - knownMetadata.add("android.telephony.PhoneStateListener"); - knownMetadata.add("android.telephony.ServiceState"); - knownMetadata.add("android.telephony.SignalStrength"); - knownMetadata.add("android.telephony.SmsManager"); - knownMetadata.add("android.telephony.SmsMessage"); - knownMetadata.add("android.telephony.SmsMessage$MessageClass"); - knownMetadata.add("android.telephony.SmsMessage$SubmitPdu"); - knownMetadata.add("android.telephony.TelephonyManager"); - knownMetadata.add("android.telephony.cdma.CdmaCellLocation"); - knownMetadata.add("android.telephony.gsm.GsmCellLocation"); - knownMetadata.add("android.telephony.gsm.SmsManager"); - knownMetadata.add("android.telephony.gsm.SmsMessage"); - knownMetadata.add("android.telephony.gsm.SmsMessage$MessageClass"); - knownMetadata.add("android.telephony.gsm.SmsMessage$SubmitPdu"); - knownMetadata.add("android.test.ActivityInstrumentationTestCase"); - knownMetadata.add("android.test.ActivityInstrumentationTestCase2"); - knownMetadata.add("android.test.ActivityTestCase"); - knownMetadata.add("android.test.ActivityUnitTestCase"); - knownMetadata.add("android.test.AndroidTestCase"); - knownMetadata.add("android.test.AndroidTestRunner"); - knownMetadata.add("android.test.ApplicationTestCase"); - knownMetadata.add("android.test.AssertionFailedError"); - knownMetadata.add("android.test.ComparisonFailure"); - knownMetadata.add("android.test.FlakyTest"); - knownMetadata.add("android.test.InstrumentationTestCase"); - knownMetadata.add("android.test.InstrumentationTestRunner"); - knownMetadata.add("android.test.InstrumentationTestSuite"); - knownMetadata.add("android.test.IsolatedContext"); - knownMetadata.add("android.test.LoaderTestCase"); - knownMetadata.add("android.test.MoreAsserts"); - knownMetadata.add("android.test.PerformanceTestCase"); - knownMetadata.add("android.test.PerformanceTestCase$Intermediates"); - knownMetadata.add("android.test.ProviderTestCase"); - knownMetadata.add("android.test.ProviderTestCase2"); - knownMetadata.add("android.test.RenamingDelegatingContext"); - knownMetadata.add("android.test.ServiceTestCase"); - knownMetadata.add("android.test.SingleLaunchActivityTestCase"); - knownMetadata.add("android.test.SyncBaseInstrumentation"); - knownMetadata.add("android.test.TestSuiteProvider"); - knownMetadata.add("android.test.TouchUtils"); - knownMetadata.add("android.test.UiThreadTest"); - knownMetadata.add("android.test.ViewAsserts"); - knownMetadata.add("android.test.mock.MockApplication"); - knownMetadata.add("android.test.mock.MockContentProvider"); - knownMetadata.add("android.test.mock.MockContentResolver"); - knownMetadata.add("android.test.mock.MockContext"); - knownMetadata.add("android.test.mock.MockCursor"); - knownMetadata.add("android.test.mock.MockDialogInterface"); - knownMetadata.add("android.test.mock.MockPackageManager"); - knownMetadata.add("android.test.mock.MockResources"); - knownMetadata.add("android.test.suitebuilder.TestMethod"); - knownMetadata.add("android.test.suitebuilder.TestSuiteBuilder"); - knownMetadata.add("android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests"); - knownMetadata.add("android.test.suitebuilder.annotation.LargeTest"); - knownMetadata.add("android.test.suitebuilder.annotation.MediumTest"); - knownMetadata.add("android.test.suitebuilder.annotation.SmallTest"); - knownMetadata.add("android.test.suitebuilder.annotation.Smoke"); - knownMetadata.add("android.test.suitebuilder.annotation.Suppress"); - knownMetadata.add("android.text.AlteredCharSequence"); - knownMetadata.add("android.text.AndroidCharacter"); - knownMetadata.add("android.text.Annotation"); - knownMetadata.add("android.text.AutoText"); - knownMetadata.add("android.text.BoringLayout"); - knownMetadata.add("android.text.BoringLayout$Metrics"); - knownMetadata.add("android.text.ClipboardManager"); - knownMetadata.add("android.text.DynamicLayout"); - knownMetadata.add("android.text.Editable"); - knownMetadata.add("android.text.Editable$Factory"); - knownMetadata.add("android.text.GetChars"); - knownMetadata.add("android.text.Html"); - knownMetadata.add("android.text.Html$ImageGetter"); - knownMetadata.add("android.text.Html$TagHandler"); - knownMetadata.add("android.text.InputFilter"); - knownMetadata.add("android.text.InputFilter$AllCaps"); - knownMetadata.add("android.text.InputFilter$LengthFilter"); - knownMetadata.add("android.text.InputType"); - knownMetadata.add("android.text.Layout"); - knownMetadata.add("android.text.Layout$Alignment"); - knownMetadata.add("android.text.Layout$Directions"); - knownMetadata.add("android.text.LoginFilter"); - knownMetadata.add("android.text.LoginFilter$PasswordFilterGMail"); - knownMetadata.add("android.text.LoginFilter$UsernameFilterGMail"); - knownMetadata.add("android.text.LoginFilter$UsernameFilterGeneric"); - knownMetadata.add("android.text.NoCopySpan"); - knownMetadata.add("android.text.NoCopySpan$Concrete"); - knownMetadata.add("android.text.ParcelableSpan"); - knownMetadata.add("android.text.Selection"); - knownMetadata.add("android.text.SpanWatcher"); - knownMetadata.add("android.text.Spannable"); - knownMetadata.add("android.text.Spannable$Factory"); - knownMetadata.add("android.text.SpannableString"); - knownMetadata.add("android.text.SpannableStringBuilder"); - knownMetadata.add("android.text.Spanned"); - knownMetadata.add("android.text.SpannedString"); - knownMetadata.add("android.text.StaticLayout"); - knownMetadata.add("android.text.TextPaint"); - knownMetadata.add("android.text.TextUtils"); - knownMetadata.add("android.text.TextUtils$EllipsizeCallback"); - knownMetadata.add("android.text.TextUtils$SimpleStringSplitter"); - knownMetadata.add("android.text.TextUtils$StringSplitter"); - knownMetadata.add("android.text.TextUtils$TruncateAt"); - knownMetadata.add("android.text.TextWatcher"); - knownMetadata.add("android.text.format.DateFormat"); - knownMetadata.add("android.text.format.DateUtils"); - knownMetadata.add("android.text.format.Formatter"); - knownMetadata.add("android.text.format.Time"); - knownMetadata.add("android.text.method.ArrowKeyMovementMethod"); - knownMetadata.add("android.text.method.BaseKeyListener"); - knownMetadata.add("android.text.method.BaseMovementMethod"); - knownMetadata.add("android.text.method.CharacterPickerDialog"); - knownMetadata.add("android.text.method.DateKeyListener"); - knownMetadata.add("android.text.method.DateTimeKeyListener"); - knownMetadata.add("android.text.method.DialerKeyListener"); - knownMetadata.add("android.text.method.DigitsKeyListener"); - knownMetadata.add("android.text.method.HideReturnsTransformationMethod"); - knownMetadata.add("android.text.method.KeyListener"); - knownMetadata.add("android.text.method.LinkMovementMethod"); - knownMetadata.add("android.text.method.MetaKeyKeyListener"); - knownMetadata.add("android.text.method.MovementMethod"); - knownMetadata.add("android.text.method.MultiTapKeyListener"); - knownMetadata.add("android.text.method.NumberKeyListener"); - knownMetadata.add("android.text.method.PasswordTransformationMethod"); - knownMetadata.add("android.text.method.QwertyKeyListener"); - knownMetadata.add("android.text.method.ReplacementTransformationMethod"); - knownMetadata.add("android.text.method.ScrollingMovementMethod"); - knownMetadata.add("android.text.method.SingleLineTransformationMethod"); - knownMetadata.add("android.text.method.TextKeyListener"); - knownMetadata.add("android.text.method.TextKeyListener$Capitalize"); - knownMetadata.add("android.text.method.TimeKeyListener"); - knownMetadata.add("android.text.method.Touch"); - knownMetadata.add("android.text.method.TransformationMethod"); - knownMetadata.add("android.text.style.AbsoluteSizeSpan"); - knownMetadata.add("android.text.style.AlignmentSpan"); - knownMetadata.add("android.text.style.AlignmentSpan$Standard"); - knownMetadata.add("android.text.style.BackgroundColorSpan"); - knownMetadata.add("android.text.style.BulletSpan"); - knownMetadata.add("android.text.style.CharacterStyle"); - knownMetadata.add("android.text.style.ClickableSpan"); - knownMetadata.add("android.text.style.DrawableMarginSpan"); - knownMetadata.add("android.text.style.DynamicDrawableSpan"); - knownMetadata.add("android.text.style.EasyEditSpan"); - knownMetadata.add("android.text.style.ForegroundColorSpan"); - knownMetadata.add("android.text.style.IconMarginSpan"); - knownMetadata.add("android.text.style.ImageSpan"); - knownMetadata.add("android.text.style.LeadingMarginSpan"); - knownMetadata.add("android.text.style.LeadingMarginSpan$LeadingMarginSpan2"); - knownMetadata.add("android.text.style.LeadingMarginSpan$Standard"); - knownMetadata.add("android.text.style.LineBackgroundSpan"); - knownMetadata.add("android.text.style.LineHeightSpan"); - knownMetadata.add("android.text.style.LineHeightSpan$WithDensity"); - knownMetadata.add("android.text.style.LocaleSpan"); - knownMetadata.add("android.text.style.MaskFilterSpan"); - knownMetadata.add("android.text.style.MetricAffectingSpan"); - knownMetadata.add("android.text.style.ParagraphStyle"); - knownMetadata.add("android.text.style.QuoteSpan"); - knownMetadata.add("android.text.style.RasterizerSpan"); - knownMetadata.add("android.text.style.RelativeSizeSpan"); - knownMetadata.add("android.text.style.ReplacementSpan"); - knownMetadata.add("android.text.style.ScaleXSpan"); - knownMetadata.add("android.text.style.StrikethroughSpan"); - knownMetadata.add("android.text.style.StyleSpan"); - knownMetadata.add("android.text.style.SubscriptSpan"); - knownMetadata.add("android.text.style.SuggestionSpan"); - knownMetadata.add("android.text.style.SuperscriptSpan"); - knownMetadata.add("android.text.style.TabStopSpan"); - knownMetadata.add("android.text.style.TabStopSpan$Standard"); - knownMetadata.add("android.text.style.TextAppearanceSpan"); - knownMetadata.add("android.text.style.TypefaceSpan"); - knownMetadata.add("android.text.style.URLSpan"); - knownMetadata.add("android.text.style.UnderlineSpan"); - knownMetadata.add("android.text.style.UpdateAppearance"); - knownMetadata.add("android.text.style.UpdateLayout"); - knownMetadata.add("android.text.style.WrapTogetherSpan"); - knownMetadata.add("android.text.util.Linkify"); - knownMetadata.add("android.text.util.Linkify$MatchFilter"); - knownMetadata.add("android.text.util.Linkify$TransformFilter"); - knownMetadata.add("android.text.util.Rfc822Token"); - knownMetadata.add("android.text.util.Rfc822Tokenizer"); - knownMetadata.add("android.util.AndroidException"); - knownMetadata.add("android.util.AndroidRuntimeException"); - knownMetadata.add("android.util.AtomicFile"); - knownMetadata.add("android.util.AttributeSet"); - knownMetadata.add("android.util.Base64"); - knownMetadata.add("android.util.Base64DataException"); - knownMetadata.add("android.util.Base64InputStream"); - knownMetadata.add("android.util.Base64OutputStream"); - knownMetadata.add("android.util.Config"); - knownMetadata.add("android.util.DebugUtils"); - knownMetadata.add("android.util.DisplayMetrics"); - knownMetadata.add("android.util.EventLog"); - knownMetadata.add("android.util.EventLog$Event"); - knownMetadata.add("android.util.EventLogTags"); - knownMetadata.add("android.util.EventLogTags$Description"); - knownMetadata.add("android.util.FloatMath"); - knownMetadata.add("android.util.JsonReader"); - knownMetadata.add("android.util.JsonToken"); - knownMetadata.add("android.util.JsonWriter"); - knownMetadata.add("android.util.Log"); - knownMetadata.add("android.util.LogPrinter"); - knownMetadata.add("android.util.LongSparseArray"); - knownMetadata.add("android.util.LruCache"); - knownMetadata.add("android.util.MalformedJsonException"); - knownMetadata.add("android.util.MonthDisplayHelper"); - knownMetadata.add("android.util.NoSuchPropertyException"); - knownMetadata.add("android.util.Pair"); - knownMetadata.add("android.util.Patterns"); - knownMetadata.add("android.util.PrintStreamPrinter"); - knownMetadata.add("android.util.PrintWriterPrinter"); - knownMetadata.add("android.util.Printer"); - knownMetadata.add("android.util.Property"); - knownMetadata.add("android.util.SparseArray"); - knownMetadata.add("android.util.SparseBooleanArray"); - knownMetadata.add("android.util.SparseIntArray"); - knownMetadata.add("android.util.StateSet"); - knownMetadata.add("android.util.StringBuilderPrinter"); - knownMetadata.add("android.util.TimeFormatException"); - knownMetadata.add("android.util.TimeUtils"); - knownMetadata.add("android.util.TimingLogger"); - knownMetadata.add("android.util.TypedValue"); - knownMetadata.add("android.util.Xml"); - knownMetadata.add("android.util.Xml$Encoding"); - knownMetadata.add("android.view.AbsSavedState"); - knownMetadata.add("android.view.ActionMode"); - knownMetadata.add("android.view.ActionMode$Callback"); - knownMetadata.add("android.view.ActionProvider"); - knownMetadata.add("android.view.ActionProvider$VisibilityListener"); - knownMetadata.add("android.view.Choreographer"); - knownMetadata.add("android.view.Choreographer$FrameCallback"); - knownMetadata.add("android.view.CollapsibleActionView"); - knownMetadata.add("android.view.ContextMenu"); - knownMetadata.add("android.view.ContextMenu$ContextMenuInfo"); - knownMetadata.add("android.view.ContextThemeWrapper"); - knownMetadata.add("android.view.Display"); - knownMetadata.add("android.view.DragEvent"); - knownMetadata.add("android.view.FocusFinder"); - knownMetadata.add("android.view.GestureDetector"); - knownMetadata.add("android.view.GestureDetector$OnDoubleTapListener"); - knownMetadata.add("android.view.GestureDetector$OnGestureListener"); - knownMetadata.add("android.view.GestureDetector$SimpleOnGestureListener"); - knownMetadata.add("android.view.Gravity"); - knownMetadata.add("android.view.HapticFeedbackConstants"); - knownMetadata.add("android.view.InflateException"); - knownMetadata.add("android.view.InputDevice"); - knownMetadata.add("android.view.InputDevice$MotionRange"); - knownMetadata.add("android.view.InputEvent"); - knownMetadata.add("android.view.InputQueue"); - knownMetadata.add("android.view.InputQueue$Callback"); - knownMetadata.add("android.view.KeyCharacterMap"); - knownMetadata.add("android.view.KeyCharacterMap$KeyData"); - knownMetadata.add("android.view.KeyCharacterMap$UnavailableException"); - knownMetadata.add("android.view.KeyEvent"); - knownMetadata.add("android.view.KeyEvent$Callback"); - knownMetadata.add("android.view.KeyEvent$DispatcherState"); - knownMetadata.add("android.view.LayoutInflater"); - knownMetadata.add("android.view.LayoutInflater$Factory"); - knownMetadata.add("android.view.LayoutInflater$Factory2"); - knownMetadata.add("android.view.LayoutInflater$Filter"); - knownMetadata.add("android.view.Menu"); - knownMetadata.add("android.view.MenuInflater"); - knownMetadata.add("android.view.MenuItem"); - knownMetadata.add("android.view.MenuItem$OnActionExpandListener"); - knownMetadata.add("android.view.MenuItem$OnMenuItemClickListener"); - knownMetadata.add("android.view.MotionEvent"); - knownMetadata.add("android.view.MotionEvent$PointerCoords"); - knownMetadata.add("android.view.MotionEvent$PointerProperties"); - knownMetadata.add("android.view.OrientationEventListener"); - knownMetadata.add("android.view.OrientationListener"); - knownMetadata.add("android.view.ScaleGestureDetector"); - knownMetadata.add("android.view.ScaleGestureDetector$OnScaleGestureListener"); - knownMetadata.add("android.view.ScaleGestureDetector$SimpleOnScaleGestureListener"); - knownMetadata.add("android.view.SoundEffectConstants"); - knownMetadata.add("android.view.SubMenu"); - knownMetadata.add("android.view.Surface"); - knownMetadata.add("android.view.Surface$OutOfResourcesException"); - knownMetadata.add("android.view.SurfaceHolder"); - knownMetadata.add("android.view.SurfaceHolder$BadSurfaceTypeException"); - knownMetadata.add("android.view.SurfaceHolder$Callback"); - knownMetadata.add("android.view.SurfaceHolder$Callback2"); - knownMetadata.add("android.view.SurfaceView"); - knownMetadata.add("android.view.TextureView"); - knownMetadata.add("android.view.TextureView$SurfaceTextureListener"); - knownMetadata.add("android.view.TouchDelegate"); - knownMetadata.add("android.view.VelocityTracker"); - knownMetadata.add("android.view.View"); - knownMetadata.add("android.view.View$AccessibilityDelegate"); - knownMetadata.add("android.view.View$BaseSavedState"); - knownMetadata.add("android.view.View$DragShadowBuilder"); - knownMetadata.add("android.view.View$MeasureSpec"); - knownMetadata.add("android.view.View$OnAttachStateChangeListener"); - knownMetadata.add("android.view.View$OnClickListener"); - knownMetadata.add("android.view.View$OnCreateContextMenuListener"); - knownMetadata.add("android.view.View$OnDragListener"); - knownMetadata.add("android.view.View$OnFocusChangeListener"); - knownMetadata.add("android.view.View$OnGenericMotionListener"); - knownMetadata.add("android.view.View$OnHoverListener"); - knownMetadata.add("android.view.View$OnKeyListener"); - knownMetadata.add("android.view.View$OnLayoutChangeListener"); - knownMetadata.add("android.view.View$OnLongClickListener"); - knownMetadata.add("android.view.View$OnSystemUiVisibilityChangeListener"); - knownMetadata.add("android.view.View$OnTouchListener"); - knownMetadata.add("android.view.ViewConfiguration"); - knownMetadata.add("android.view.ViewDebug"); - knownMetadata.add("android.view.ViewDebug$CapturedViewProperty"); - knownMetadata.add("android.view.ViewDebug$ExportedProperty"); - knownMetadata.add("android.view.ViewDebug$FlagToString"); - knownMetadata.add("android.view.ViewDebug$HierarchyTraceType"); - knownMetadata.add("android.view.ViewDebug$IntToString"); - knownMetadata.add("android.view.ViewDebug$RecyclerTraceType"); - knownMetadata.add("android.view.ViewGroup"); - knownMetadata.add("android.view.ViewGroup$LayoutParams"); - knownMetadata.add("android.view.ViewGroup$MarginLayoutParams"); - knownMetadata.add("android.view.ViewGroup$OnHierarchyChangeListener"); - knownMetadata.add("android.view.ViewManager"); - knownMetadata.add("android.view.ViewParent"); - knownMetadata.add("android.view.ViewPropertyAnimator"); - knownMetadata.add("android.view.ViewStub"); - knownMetadata.add("android.view.ViewStub$OnInflateListener"); - knownMetadata.add("android.view.ViewTreeObserver"); - knownMetadata.add("android.view.ViewTreeObserver$OnDrawListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnGlobalFocusChangeListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnGlobalLayoutListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnPreDrawListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnScrollChangedListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnTouchModeChangeListener"); - knownMetadata.add("android.view.Window"); - knownMetadata.add("android.view.Window$Callback"); - knownMetadata.add("android.view.WindowManager"); - knownMetadata.add("android.view.WindowManager$BadTokenException"); - knownMetadata.add("android.view.WindowManager$InvalidDisplayException"); - knownMetadata.add("android.view.WindowManager$LayoutParams"); - knownMetadata.add("android.view.accessibility.AccessibilityEvent"); - knownMetadata.add("android.view.accessibility.AccessibilityEventSource"); - knownMetadata.add("android.view.accessibility.AccessibilityManager"); - knownMetadata.add("android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener"); - knownMetadata.add("android.view.accessibility.AccessibilityNodeInfo"); - knownMetadata.add("android.view.accessibility.AccessibilityNodeProvider"); - knownMetadata.add("android.view.accessibility.AccessibilityRecord"); - knownMetadata.add("android.view.animation.AccelerateDecelerateInterpolator"); - knownMetadata.add("android.view.animation.AccelerateInterpolator"); - knownMetadata.add("android.view.animation.AlphaAnimation"); - knownMetadata.add("android.view.animation.Animation"); - knownMetadata.add("android.view.animation.Animation$AnimationListener"); - knownMetadata.add("android.view.animation.AnimationSet"); - knownMetadata.add("android.view.animation.AnimationUtils"); - knownMetadata.add("android.view.animation.AnticipateInterpolator"); - knownMetadata.add("android.view.animation.AnticipateOvershootInterpolator"); - knownMetadata.add("android.view.animation.BounceInterpolator"); - knownMetadata.add("android.view.animation.CycleInterpolator"); - knownMetadata.add("android.view.animation.DecelerateInterpolator"); - knownMetadata.add("android.view.animation.GridLayoutAnimationController"); - knownMetadata.add("android.view.animation.GridLayoutAnimationController$AnimationParameters"); - knownMetadata.add("android.view.animation.Interpolator"); - knownMetadata.add("android.view.animation.LayoutAnimationController"); - knownMetadata.add("android.view.animation.LayoutAnimationController$AnimationParameters"); - knownMetadata.add("android.view.animation.LinearInterpolator"); - knownMetadata.add("android.view.animation.OvershootInterpolator"); - knownMetadata.add("android.view.animation.RotateAnimation"); - knownMetadata.add("android.view.animation.ScaleAnimation"); - knownMetadata.add("android.view.animation.Transformation"); - knownMetadata.add("android.view.animation.TranslateAnimation"); - knownMetadata.add("android.view.inputmethod.BaseInputConnection"); - knownMetadata.add("android.view.inputmethod.CompletionInfo"); - knownMetadata.add("android.view.inputmethod.CorrectionInfo"); - knownMetadata.add("android.view.inputmethod.EditorInfo"); - knownMetadata.add("android.view.inputmethod.ExtractedText"); - knownMetadata.add("android.view.inputmethod.ExtractedTextRequest"); - knownMetadata.add("android.view.inputmethod.InputBinding"); - knownMetadata.add("android.view.inputmethod.InputConnection"); - knownMetadata.add("android.view.inputmethod.InputConnectionWrapper"); - knownMetadata.add("android.view.inputmethod.InputMethod"); - knownMetadata.add("android.view.inputmethod.InputMethod$SessionCallback"); - knownMetadata.add("android.view.inputmethod.InputMethodInfo"); - knownMetadata.add("android.view.inputmethod.InputMethodManager"); - knownMetadata.add("android.view.inputmethod.InputMethodSession"); - knownMetadata.add("android.view.inputmethod.InputMethodSession$EventCallback"); - knownMetadata.add("android.view.inputmethod.InputMethodSubtype"); - knownMetadata.add("android.view.textservice.SentenceSuggestionsInfo"); - knownMetadata.add("android.view.textservice.SpellCheckerInfo"); - knownMetadata.add("android.view.textservice.SpellCheckerSession"); - knownMetadata.add("android.view.textservice.SpellCheckerSession$SpellCheckerSessionListener"); - knownMetadata.add("android.view.textservice.SpellCheckerSubtype"); - knownMetadata.add("android.view.textservice.SuggestionsInfo"); - knownMetadata.add("android.view.textservice.TextInfo"); - knownMetadata.add("android.view.textservice.TextServicesManager"); - knownMetadata.add("android.webkit.ConsoleMessage"); - knownMetadata.add("android.webkit.ConsoleMessage$MessageLevel"); - knownMetadata.add("android.webkit.CookieManager"); - knownMetadata.add("android.webkit.CookieSyncManager"); - knownMetadata.add("android.webkit.DateSorter"); - knownMetadata.add("android.webkit.DownloadListener"); - knownMetadata.add("android.webkit.GeolocationPermissions"); - knownMetadata.add("android.webkit.GeolocationPermissions$Callback"); - knownMetadata.add("android.webkit.HttpAuthHandler"); - knownMetadata.add("android.webkit.JavascriptInterface"); - knownMetadata.add("android.webkit.JsPromptResult"); - knownMetadata.add("android.webkit.JsResult"); - knownMetadata.add("android.webkit.MimeTypeMap"); - knownMetadata.add("android.webkit.PluginStub"); - knownMetadata.add("android.webkit.SslErrorHandler"); - knownMetadata.add("android.webkit.URLUtil"); - knownMetadata.add("android.webkit.ValueCallback"); - knownMetadata.add("android.webkit.WebBackForwardList"); - knownMetadata.add("android.webkit.WebChromeClient"); - knownMetadata.add("android.webkit.WebChromeClient$CustomViewCallback"); - knownMetadata.add("android.webkit.WebHistoryItem"); - knownMetadata.add("android.webkit.WebIconDatabase"); - knownMetadata.add("android.webkit.WebIconDatabase$IconListener"); - knownMetadata.add("android.webkit.WebResourceResponse"); - knownMetadata.add("android.webkit.WebSettings"); - knownMetadata.add("android.webkit.WebSettings$LayoutAlgorithm"); - knownMetadata.add("android.webkit.WebSettings$PluginState"); - knownMetadata.add("android.webkit.WebSettings$RenderPriority"); - knownMetadata.add("android.webkit.WebSettings$TextSize"); - knownMetadata.add("android.webkit.WebSettings$ZoomDensity"); - knownMetadata.add("android.webkit.WebStorage"); - knownMetadata.add("android.webkit.WebStorage$Origin"); - knownMetadata.add("android.webkit.WebStorage$QuotaUpdater"); - knownMetadata.add("android.webkit.WebView"); - knownMetadata.add("android.webkit.WebView$FindListener"); - knownMetadata.add("android.webkit.WebView$HitTestResult"); - knownMetadata.add("android.webkit.WebView$PictureListener"); - knownMetadata.add("android.webkit.WebView$WebViewTransport"); - knownMetadata.add("android.webkit.WebViewClient"); - knownMetadata.add("android.webkit.WebViewDatabase"); - knownMetadata.add("android.webkit.WebViewFragment"); - knownMetadata.add("android.widget.AbsListView"); - knownMetadata.add("android.widget.AbsListView$LayoutParams"); - knownMetadata.add("android.widget.AbsListView$MultiChoiceModeListener"); - knownMetadata.add("android.widget.AbsListView$OnScrollListener"); - knownMetadata.add("android.widget.AbsListView$RecyclerListener"); - knownMetadata.add("android.widget.AbsListView$SelectionBoundsAdjuster"); - knownMetadata.add("android.widget.AbsSeekBar"); - knownMetadata.add("android.widget.AbsSpinner"); - knownMetadata.add("android.widget.AbsoluteLayout"); - knownMetadata.add("android.widget.AbsoluteLayout$LayoutParams"); - knownMetadata.add("android.widget.Adapter"); - knownMetadata.add("android.widget.AdapterView"); - knownMetadata.add("android.widget.AdapterView$AdapterContextMenuInfo"); - knownMetadata.add("android.widget.AdapterView$OnItemClickListener"); - knownMetadata.add("android.widget.AdapterView$OnItemLongClickListener"); - knownMetadata.add("android.widget.AdapterView$OnItemSelectedListener"); - knownMetadata.add("android.widget.AdapterViewAnimator"); - knownMetadata.add("android.widget.AdapterViewFlipper"); - knownMetadata.add("android.widget.Advanceable"); - knownMetadata.add("android.widget.AlphabetIndexer"); - knownMetadata.add("android.widget.AnalogClock"); - knownMetadata.add("android.widget.ArrayAdapter"); - knownMetadata.add("android.widget.AutoCompleteTextView"); - knownMetadata.add("android.widget.AutoCompleteTextView$OnDismissListener"); - knownMetadata.add("android.widget.AutoCompleteTextView$Validator"); - knownMetadata.add("android.widget.BaseAdapter"); - knownMetadata.add("android.widget.BaseExpandableListAdapter"); - knownMetadata.add("android.widget.Button"); - knownMetadata.add("android.widget.CalendarView"); - knownMetadata.add("android.widget.CalendarView$OnDateChangeListener"); - knownMetadata.add("android.widget.CheckBox"); - knownMetadata.add("android.widget.Checkable"); - knownMetadata.add("android.widget.CheckedTextView"); - knownMetadata.add("android.widget.Chronometer"); - knownMetadata.add("android.widget.Chronometer$OnChronometerTickListener"); - knownMetadata.add("android.widget.CompoundButton"); - knownMetadata.add("android.widget.CompoundButton$OnCheckedChangeListener"); - knownMetadata.add("android.widget.CursorAdapter"); - knownMetadata.add("android.widget.CursorTreeAdapter"); - knownMetadata.add("android.widget.DatePicker"); - knownMetadata.add("android.widget.DatePicker$OnDateChangedListener"); - knownMetadata.add("android.widget.DialerFilter"); - knownMetadata.add("android.widget.DigitalClock"); - knownMetadata.add("android.widget.EdgeEffect"); - knownMetadata.add("android.widget.EditText"); - knownMetadata.add("android.widget.ExpandableListAdapter"); - knownMetadata.add("android.widget.ExpandableListView"); - knownMetadata.add("android.widget.ExpandableListView$ExpandableListContextMenuInfo"); - knownMetadata.add("android.widget.ExpandableListView$OnChildClickListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupClickListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupCollapseListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupExpandListener"); - knownMetadata.add("android.widget.Filter"); - knownMetadata.add("android.widget.Filter$FilterListener"); - knownMetadata.add("android.widget.FilterQueryProvider"); - knownMetadata.add("android.widget.Filterable"); - knownMetadata.add("android.widget.FrameLayout"); - knownMetadata.add("android.widget.FrameLayout$LayoutParams"); - knownMetadata.add("android.widget.Gallery"); - knownMetadata.add("android.widget.Gallery$LayoutParams"); - knownMetadata.add("android.widget.GridLayout"); - knownMetadata.add("android.widget.GridLayout$Alignment"); - knownMetadata.add("android.widget.GridLayout$LayoutParams"); - knownMetadata.add("android.widget.GridLayout$Spec"); - knownMetadata.add("android.widget.GridView"); - knownMetadata.add("android.widget.HeaderViewListAdapter"); - knownMetadata.add("android.widget.HeterogeneousExpandableList"); - knownMetadata.add("android.widget.HorizontalScrollView"); - knownMetadata.add("android.widget.ImageButton"); - knownMetadata.add("android.widget.ImageSwitcher"); - knownMetadata.add("android.widget.ImageView"); - knownMetadata.add("android.widget.ImageView$ScaleType"); - knownMetadata.add("android.widget.LinearLayout"); - knownMetadata.add("android.widget.LinearLayout$LayoutParams"); - knownMetadata.add("android.widget.ListAdapter"); - knownMetadata.add("android.widget.ListPopupWindow"); - knownMetadata.add("android.widget.ListView"); - knownMetadata.add("android.widget.ListView$FixedViewInfo"); - knownMetadata.add("android.widget.MediaController"); - knownMetadata.add("android.widget.MediaController$MediaPlayerControl"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView$CommaTokenizer"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView$Tokenizer"); - knownMetadata.add("android.widget.NumberPicker"); - knownMetadata.add("android.widget.NumberPicker$Formatter"); - knownMetadata.add("android.widget.NumberPicker$OnScrollListener"); - knownMetadata.add("android.widget.NumberPicker$OnValueChangeListener"); - knownMetadata.add("android.widget.OverScroller"); - knownMetadata.add("android.widget.PopupMenu"); - knownMetadata.add("android.widget.PopupMenu$OnDismissListener"); - knownMetadata.add("android.widget.PopupMenu$OnMenuItemClickListener"); - knownMetadata.add("android.widget.PopupWindow"); - knownMetadata.add("android.widget.PopupWindow$OnDismissListener"); - knownMetadata.add("android.widget.ProgressBar"); - knownMetadata.add("android.widget.QuickContactBadge"); - knownMetadata.add("android.widget.RadioButton"); - knownMetadata.add("android.widget.RadioGroup"); - knownMetadata.add("android.widget.RadioGroup$LayoutParams"); - knownMetadata.add("android.widget.RadioGroup$OnCheckedChangeListener"); - knownMetadata.add("android.widget.RatingBar"); - knownMetadata.add("android.widget.RatingBar$OnRatingBarChangeListener"); - knownMetadata.add("android.widget.RelativeLayout"); - knownMetadata.add("android.widget.RelativeLayout$LayoutParams"); - knownMetadata.add("android.widget.RemoteViews"); - knownMetadata.add("android.widget.RemoteViews$ActionException"); - knownMetadata.add("android.widget.RemoteViews$RemoteView"); - knownMetadata.add("android.widget.RemoteViewsService"); - knownMetadata.add("android.widget.RemoteViewsService$RemoteViewsFactory"); - knownMetadata.add("android.widget.ResourceCursorAdapter"); - knownMetadata.add("android.widget.ResourceCursorTreeAdapter"); - knownMetadata.add("android.widget.ScrollView"); - knownMetadata.add("android.widget.Scroller"); - knownMetadata.add("android.widget.SearchView"); - knownMetadata.add("android.widget.SearchView$OnCloseListener"); - knownMetadata.add("android.widget.SearchView$OnQueryTextListener"); - knownMetadata.add("android.widget.SearchView$OnSuggestionListener"); - knownMetadata.add("android.widget.SectionIndexer"); - knownMetadata.add("android.widget.SeekBar"); - knownMetadata.add("android.widget.SeekBar$OnSeekBarChangeListener"); - knownMetadata.add("android.widget.ShareActionProvider"); - knownMetadata.add("android.widget.ShareActionProvider$OnShareTargetSelectedListener"); - knownMetadata.add("android.widget.SimpleAdapter"); - knownMetadata.add("android.widget.SimpleAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleCursorAdapter"); - knownMetadata.add("android.widget.SimpleCursorAdapter$CursorToStringConverter"); - knownMetadata.add("android.widget.SimpleCursorAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleCursorTreeAdapter"); - knownMetadata.add("android.widget.SimpleCursorTreeAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleExpandableListAdapter"); - knownMetadata.add("android.widget.SlidingDrawer"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerCloseListener"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerOpenListener"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerScrollListener"); - knownMetadata.add("android.widget.Space"); - knownMetadata.add("android.widget.Spinner"); - knownMetadata.add("android.widget.SpinnerAdapter"); - knownMetadata.add("android.widget.StackView"); - knownMetadata.add("android.widget.Switch"); - knownMetadata.add("android.widget.TabHost"); - knownMetadata.add("android.widget.TabHost$OnTabChangeListener"); - knownMetadata.add("android.widget.TabHost$TabContentFactory"); - knownMetadata.add("android.widget.TabHost$TabSpec"); - knownMetadata.add("android.widget.TabWidget"); - knownMetadata.add("android.widget.TableLayout"); - knownMetadata.add("android.widget.TableLayout$LayoutParams"); - knownMetadata.add("android.widget.TableRow"); - knownMetadata.add("android.widget.TableRow$LayoutParams"); - knownMetadata.add("android.widget.TextClock"); - knownMetadata.add("android.widget.TextSwitcher"); - knownMetadata.add("android.widget.TextView"); - knownMetadata.add("android.widget.TextView$BufferType"); - knownMetadata.add("android.widget.TextView$OnEditorActionListener"); - knownMetadata.add("android.widget.TextView$SavedState"); - knownMetadata.add("android.widget.TimePicker"); - knownMetadata.add("android.widget.TimePicker$OnTimeChangedListener"); - knownMetadata.add("android.widget.Toast"); - knownMetadata.add("android.widget.ToggleButton"); - knownMetadata.add("android.widget.TwoLineListItem"); - knownMetadata.add("android.widget.VideoView"); - knownMetadata.add("android.widget.ViewAnimator"); - knownMetadata.add("android.widget.ViewFlipper"); - knownMetadata.add("android.widget.ViewSwitcher"); - knownMetadata.add("android.widget.ViewSwitcher$ViewFactory"); - knownMetadata.add("android.widget.WrapperListAdapter"); - knownMetadata.add("android.widget.ZoomButton"); - knownMetadata.add("android.widget.ZoomButtonsController"); - knownMetadata.add("android.widget.ZoomButtonsController$OnZoomListener"); - knownMetadata.add("android.widget.ZoomControls"); - knownMetadata.add("com.android.internal.util.Predicate"); - knownMetadata.add("dalvik.annotation.TestTarget"); - knownMetadata.add("dalvik.annotation.TestTargetClass"); - knownMetadata.add("dalvik.bytecode.OpcodeInfo"); - knownMetadata.add("dalvik.bytecode.Opcodes"); - knownMetadata.add("dalvik.system.BaseDexClassLoader"); - knownMetadata.add("dalvik.system.DexClassLoader"); - knownMetadata.add("dalvik.system.DexFile"); - knownMetadata.add("dalvik.system.PathClassLoader"); - knownMetadata.add("java.awt.font.NumericShaper"); - knownMetadata.add("java.awt.font.TextAttribute"); - knownMetadata.add("java.beans.IndexedPropertyChangeEvent"); - knownMetadata.add("java.beans.PropertyChangeEvent"); - knownMetadata.add("java.beans.PropertyChangeListener"); - knownMetadata.add("java.beans.PropertyChangeListenerProxy"); - knownMetadata.add("java.beans.PropertyChangeSupport"); - knownMetadata.add("java.io.BufferedInputStream"); - knownMetadata.add("java.io.BufferedOutputStream"); - knownMetadata.add("java.io.BufferedReader"); - knownMetadata.add("java.io.BufferedWriter"); - knownMetadata.add("java.io.ByteArrayInputStream"); - knownMetadata.add("java.io.ByteArrayOutputStream"); - knownMetadata.add("java.io.CharArrayReader"); - knownMetadata.add("java.io.CharArrayWriter"); - knownMetadata.add("java.io.CharConversionException"); - knownMetadata.add("java.io.Closeable"); - knownMetadata.add("java.io.Console"); - knownMetadata.add("java.io.DataInput"); - knownMetadata.add("java.io.DataInputStream"); - knownMetadata.add("java.io.DataOutput"); - knownMetadata.add("java.io.DataOutputStream"); - knownMetadata.add("java.io.EOFException"); - knownMetadata.add("java.io.Externalizable"); - knownMetadata.add("java.io.File"); - knownMetadata.add("java.io.FileDescriptor"); - knownMetadata.add("java.io.FileFilter"); - knownMetadata.add("java.io.FileInputStream"); - knownMetadata.add("java.io.FileNotFoundException"); - knownMetadata.add("java.io.FileOutputStream"); - knownMetadata.add("java.io.FilePermission"); - knownMetadata.add("java.io.FileReader"); - knownMetadata.add("java.io.FileWriter"); - knownMetadata.add("java.io.FilenameFilter"); - knownMetadata.add("java.io.FilterInputStream"); - knownMetadata.add("java.io.FilterOutputStream"); - knownMetadata.add("java.io.FilterReader"); - knownMetadata.add("java.io.FilterWriter"); - knownMetadata.add("java.io.Flushable"); - knownMetadata.add("java.io.IOError"); - knownMetadata.add("java.io.IOException"); - knownMetadata.add("java.io.InputStream"); - knownMetadata.add("java.io.InputStreamReader"); - knownMetadata.add("java.io.InterruptedIOException"); - knownMetadata.add("java.io.InvalidClassException"); - knownMetadata.add("java.io.InvalidObjectException"); - knownMetadata.add("java.io.LineNumberInputStream"); - knownMetadata.add("java.io.LineNumberReader"); - knownMetadata.add("java.io.NotActiveException"); - knownMetadata.add("java.io.NotSerializableException"); - knownMetadata.add("java.io.ObjectInput"); - knownMetadata.add("java.io.ObjectInputStream"); - knownMetadata.add("java.io.ObjectInputStream$GetField"); - knownMetadata.add("java.io.ObjectInputValidation"); - knownMetadata.add("java.io.ObjectOutput"); - knownMetadata.add("java.io.ObjectOutputStream"); - knownMetadata.add("java.io.ObjectOutputStream$PutField"); - knownMetadata.add("java.io.ObjectStreamClass"); - knownMetadata.add("java.io.ObjectStreamConstants"); - knownMetadata.add("java.io.ObjectStreamException"); - knownMetadata.add("java.io.ObjectStreamField"); - knownMetadata.add("java.io.OptionalDataException"); - knownMetadata.add("java.io.OutputStream"); - knownMetadata.add("java.io.OutputStreamWriter"); - knownMetadata.add("java.io.PipedInputStream"); - knownMetadata.add("java.io.PipedOutputStream"); - knownMetadata.add("java.io.PipedReader"); - knownMetadata.add("java.io.PipedWriter"); - knownMetadata.add("java.io.PrintStream"); - knownMetadata.add("java.io.PrintWriter"); - knownMetadata.add("java.io.PushbackInputStream"); - knownMetadata.add("java.io.PushbackReader"); - knownMetadata.add("java.io.RandomAccessFile"); - knownMetadata.add("java.io.Reader"); - knownMetadata.add("java.io.SequenceInputStream"); - knownMetadata.add("java.io.Serializable"); - knownMetadata.add("java.io.SerializablePermission"); - knownMetadata.add("java.io.StreamCorruptedException"); - knownMetadata.add("java.io.StreamTokenizer"); - knownMetadata.add("java.io.StringBufferInputStream"); - knownMetadata.add("java.io.StringReader"); - knownMetadata.add("java.io.StringWriter"); - knownMetadata.add("java.io.SyncFailedException"); - knownMetadata.add("java.io.UTFDataFormatException"); - knownMetadata.add("java.io.UnsupportedEncodingException"); - knownMetadata.add("java.io.WriteAbortedException"); - knownMetadata.add("java.io.Writer"); - knownMetadata.add("java.lang.AbstractMethodError"); - knownMetadata.add("java.lang.Appendable"); - knownMetadata.add("java.lang.ArithmeticException"); - knownMetadata.add("java.lang.ArrayIndexOutOfBoundsException"); - knownMetadata.add("java.lang.ArrayStoreException"); - knownMetadata.add("java.lang.AssertionError"); - knownMetadata.add("java.lang.Boolean"); - knownMetadata.add("java.lang.Byte"); - knownMetadata.add("java.lang.CharSequence"); - knownMetadata.add("java.lang.Character"); - knownMetadata.add("java.lang.Character$Subset"); - knownMetadata.add("java.lang.Character$UnicodeBlock"); - knownMetadata.add("java.lang.Class"); - knownMetadata.add("java.lang.ClassCastException"); - knownMetadata.add("java.lang.ClassCircularityError"); - knownMetadata.add("java.lang.ClassFormatError"); - knownMetadata.add("java.lang.ClassLoader"); - knownMetadata.add("java.lang.ClassNotFoundException"); - knownMetadata.add("java.lang.CloneNotSupportedException"); - knownMetadata.add("java.lang.Cloneable"); - knownMetadata.add("java.lang.Comparable"); - knownMetadata.add("java.lang.Compiler"); - knownMetadata.add("java.lang.Deprecated"); - knownMetadata.add("java.lang.Double"); - knownMetadata.add("java.lang.Enum"); - knownMetadata.add("java.lang.EnumConstantNotPresentException"); - knownMetadata.add("java.lang.Error"); - knownMetadata.add("java.lang.Exception"); - knownMetadata.add("java.lang.ExceptionInInitializerError"); - knownMetadata.add("java.lang.Float"); - knownMetadata.add("java.lang.IllegalAccessError"); - knownMetadata.add("java.lang.IllegalAccessException"); - knownMetadata.add("java.lang.IllegalArgumentException"); - knownMetadata.add("java.lang.IllegalMonitorStateException"); - knownMetadata.add("java.lang.IllegalStateException"); - knownMetadata.add("java.lang.IllegalThreadStateException"); - knownMetadata.add("java.lang.IncompatibleClassChangeError"); - knownMetadata.add("java.lang.IndexOutOfBoundsException"); - knownMetadata.add("java.lang.InheritableThreadLocal"); - knownMetadata.add("java.lang.InstantiationError"); - knownMetadata.add("java.lang.InstantiationException"); - knownMetadata.add("java.lang.Integer"); - knownMetadata.add("java.lang.InternalError"); - knownMetadata.add("java.lang.InterruptedException"); - knownMetadata.add("java.lang.Iterable"); - knownMetadata.add("java.lang.LinkageError"); - knownMetadata.add("java.lang.Long"); - knownMetadata.add("java.lang.Math"); - knownMetadata.add("java.lang.NegativeArraySizeException"); - knownMetadata.add("java.lang.NoClassDefFoundError"); - knownMetadata.add("java.lang.NoSuchFieldError"); - knownMetadata.add("java.lang.NoSuchFieldException"); - knownMetadata.add("java.lang.NoSuchMethodError"); - knownMetadata.add("java.lang.NoSuchMethodException"); - knownMetadata.add("java.lang.NullPointerException"); - knownMetadata.add("java.lang.Number"); - knownMetadata.add("java.lang.NumberFormatException"); - knownMetadata.add("java.lang.Object"); - knownMetadata.add("java.lang.OutOfMemoryError"); - knownMetadata.add("java.lang.Override"); - knownMetadata.add("java.lang.Package"); - knownMetadata.add("java.lang.Process"); - knownMetadata.add("java.lang.ProcessBuilder"); - knownMetadata.add("java.lang.Readable"); - knownMetadata.add("java.lang.Runnable"); - knownMetadata.add("java.lang.Runtime"); - knownMetadata.add("java.lang.RuntimeException"); - knownMetadata.add("java.lang.RuntimePermission"); - knownMetadata.add("java.lang.SecurityException"); - knownMetadata.add("java.lang.SecurityManager"); - knownMetadata.add("java.lang.Short"); - knownMetadata.add("java.lang.StackOverflowError"); - knownMetadata.add("java.lang.StackTraceElement"); - knownMetadata.add("java.lang.StrictMath"); - knownMetadata.add("java.lang.String"); - knownMetadata.add("java.lang.StringBuffer"); - knownMetadata.add("java.lang.StringBuilder"); - knownMetadata.add("java.lang.StringIndexOutOfBoundsException"); - knownMetadata.add("java.lang.SuppressWarnings"); - knownMetadata.add("java.lang.System"); - knownMetadata.add("java.lang.Thread"); - knownMetadata.add("java.lang.Thread$State"); - knownMetadata.add("java.lang.Thread$UncaughtExceptionHandler"); - knownMetadata.add("java.lang.ThreadDeath"); - knownMetadata.add("java.lang.ThreadGroup"); - knownMetadata.add("java.lang.ThreadLocal"); - knownMetadata.add("java.lang.Throwable"); - knownMetadata.add("java.lang.TypeNotPresentException"); - knownMetadata.add("java.lang.UnknownError"); - knownMetadata.add("java.lang.UnsatisfiedLinkError"); - knownMetadata.add("java.lang.UnsupportedClassVersionError"); - knownMetadata.add("java.lang.UnsupportedOperationException"); - knownMetadata.add("java.lang.VerifyError"); - knownMetadata.add("java.lang.VirtualMachineError"); - knownMetadata.add("java.lang.Void"); - knownMetadata.add("java.lang.annotation.Annotation"); - knownMetadata.add("java.lang.annotation.AnnotationFormatError"); - knownMetadata.add("java.lang.annotation.AnnotationTypeMismatchException"); - knownMetadata.add("java.lang.annotation.Documented"); - knownMetadata.add("java.lang.annotation.ElementType"); - knownMetadata.add("java.lang.annotation.IncompleteAnnotationException"); - knownMetadata.add("java.lang.annotation.Inherited"); - knownMetadata.add("java.lang.annotation.Retention"); - knownMetadata.add("java.lang.annotation.RetentionPolicy"); - knownMetadata.add("java.lang.annotation.Target"); - knownMetadata.add("java.lang.ref.PhantomReference"); - knownMetadata.add("java.lang.ref.Reference"); - knownMetadata.add("java.lang.ref.ReferenceQueue"); - knownMetadata.add("java.lang.ref.SoftReference"); - knownMetadata.add("java.lang.ref.WeakReference"); - knownMetadata.add("java.lang.reflect.AccessibleObject"); - knownMetadata.add("java.lang.reflect.AnnotatedElement"); - knownMetadata.add("java.lang.reflect.Array"); - knownMetadata.add("java.lang.reflect.Constructor"); - knownMetadata.add("java.lang.reflect.Field"); - knownMetadata.add("java.lang.reflect.GenericArrayType"); - knownMetadata.add("java.lang.reflect.GenericDeclaration"); - knownMetadata.add("java.lang.reflect.GenericSignatureFormatError"); - knownMetadata.add("java.lang.reflect.InvocationHandler"); - knownMetadata.add("java.lang.reflect.InvocationTargetException"); - knownMetadata.add("java.lang.reflect.MalformedParameterizedTypeException"); - knownMetadata.add("java.lang.reflect.Member"); - knownMetadata.add("java.lang.reflect.Method"); - knownMetadata.add("java.lang.reflect.Modifier"); - knownMetadata.add("java.lang.reflect.ParameterizedType"); - knownMetadata.add("java.lang.reflect.Proxy"); - knownMetadata.add("java.lang.reflect.ReflectPermission"); - knownMetadata.add("java.lang.reflect.Type"); - knownMetadata.add("java.lang.reflect.TypeVariable"); - knownMetadata.add("java.lang.reflect.UndeclaredThrowableException"); - knownMetadata.add("java.lang.reflect.WildcardType"); - knownMetadata.add("java.math.BigDecimal"); - knownMetadata.add("java.math.BigInteger"); - knownMetadata.add("java.math.MathContext"); - knownMetadata.add("java.math.RoundingMode"); - knownMetadata.add("java.net.Authenticator"); - knownMetadata.add("java.net.Authenticator$RequestorType"); - knownMetadata.add("java.net.BindException"); - knownMetadata.add("java.net.CacheRequest"); - knownMetadata.add("java.net.CacheResponse"); - knownMetadata.add("java.net.ConnectException"); - knownMetadata.add("java.net.ContentHandler"); - knownMetadata.add("java.net.ContentHandlerFactory"); - knownMetadata.add("java.net.CookieHandler"); - knownMetadata.add("java.net.CookieManager"); - knownMetadata.add("java.net.CookiePolicy"); - knownMetadata.add("java.net.CookieStore"); - knownMetadata.add("java.net.DatagramPacket"); - knownMetadata.add("java.net.DatagramSocket"); - knownMetadata.add("java.net.DatagramSocketImpl"); - knownMetadata.add("java.net.DatagramSocketImplFactory"); - knownMetadata.add("java.net.FileNameMap"); - knownMetadata.add("java.net.HttpCookie"); - knownMetadata.add("java.net.HttpRetryException"); - knownMetadata.add("java.net.HttpURLConnection"); - knownMetadata.add("java.net.IDN"); - knownMetadata.add("java.net.Inet4Address"); - knownMetadata.add("java.net.Inet6Address"); - knownMetadata.add("java.net.InetAddress"); - knownMetadata.add("java.net.InetSocketAddress"); - knownMetadata.add("java.net.InterfaceAddress"); - knownMetadata.add("java.net.JarURLConnection"); - knownMetadata.add("java.net.MalformedURLException"); - knownMetadata.add("java.net.MulticastSocket"); - knownMetadata.add("java.net.NetPermission"); - knownMetadata.add("java.net.NetworkInterface"); - knownMetadata.add("java.net.NoRouteToHostException"); - knownMetadata.add("java.net.PasswordAuthentication"); - knownMetadata.add("java.net.PortUnreachableException"); - knownMetadata.add("java.net.ProtocolException"); - knownMetadata.add("java.net.Proxy"); - knownMetadata.add("java.net.Proxy$Type"); - knownMetadata.add("java.net.ProxySelector"); - knownMetadata.add("java.net.ResponseCache"); - knownMetadata.add("java.net.SecureCacheResponse"); - knownMetadata.add("java.net.ServerSocket"); - knownMetadata.add("java.net.Socket"); - knownMetadata.add("java.net.SocketAddress"); - knownMetadata.add("java.net.SocketException"); - knownMetadata.add("java.net.SocketImpl"); - knownMetadata.add("java.net.SocketImplFactory"); - knownMetadata.add("java.net.SocketOptions"); - knownMetadata.add("java.net.SocketPermission"); - knownMetadata.add("java.net.SocketTimeoutException"); - knownMetadata.add("java.net.URI"); - knownMetadata.add("java.net.URISyntaxException"); - knownMetadata.add("java.net.URL"); - knownMetadata.add("java.net.URLClassLoader"); - knownMetadata.add("java.net.URLConnection"); - knownMetadata.add("java.net.URLDecoder"); - knownMetadata.add("java.net.URLEncoder"); - knownMetadata.add("java.net.URLStreamHandler"); - knownMetadata.add("java.net.URLStreamHandlerFactory"); - knownMetadata.add("java.net.UnknownHostException"); - knownMetadata.add("java.net.UnknownServiceException"); - knownMetadata.add("java.nio.Buffer"); - knownMetadata.add("java.nio.BufferOverflowException"); - knownMetadata.add("java.nio.BufferUnderflowException"); - knownMetadata.add("java.nio.ByteBuffer"); - knownMetadata.add("java.nio.ByteOrder"); - knownMetadata.add("java.nio.CharBuffer"); - knownMetadata.add("java.nio.DoubleBuffer"); - knownMetadata.add("java.nio.FloatBuffer"); - knownMetadata.add("java.nio.IntBuffer"); - knownMetadata.add("java.nio.InvalidMarkException"); - knownMetadata.add("java.nio.LongBuffer"); - knownMetadata.add("java.nio.MappedByteBuffer"); - knownMetadata.add("java.nio.ReadOnlyBufferException"); - knownMetadata.add("java.nio.ShortBuffer"); - knownMetadata.add("java.nio.channels.AlreadyConnectedException"); - knownMetadata.add("java.nio.channels.AsynchronousCloseException"); - knownMetadata.add("java.nio.channels.ByteChannel"); - knownMetadata.add("java.nio.channels.CancelledKeyException"); - knownMetadata.add("java.nio.channels.Channel"); - knownMetadata.add("java.nio.channels.Channels"); - knownMetadata.add("java.nio.channels.ClosedByInterruptException"); - knownMetadata.add("java.nio.channels.ClosedChannelException"); - knownMetadata.add("java.nio.channels.ClosedSelectorException"); - knownMetadata.add("java.nio.channels.ConnectionPendingException"); - knownMetadata.add("java.nio.channels.DatagramChannel"); - knownMetadata.add("java.nio.channels.FileChannel"); - knownMetadata.add("java.nio.channels.FileChannel$MapMode"); - knownMetadata.add("java.nio.channels.FileLock"); - knownMetadata.add("java.nio.channels.FileLockInterruptionException"); - knownMetadata.add("java.nio.channels.GatheringByteChannel"); - knownMetadata.add("java.nio.channels.IllegalBlockingModeException"); - knownMetadata.add("java.nio.channels.IllegalSelectorException"); - knownMetadata.add("java.nio.channels.InterruptibleChannel"); - knownMetadata.add("java.nio.channels.NoConnectionPendingException"); - knownMetadata.add("java.nio.channels.NonReadableChannelException"); - knownMetadata.add("java.nio.channels.NonWritableChannelException"); - knownMetadata.add("java.nio.channels.NotYetBoundException"); - knownMetadata.add("java.nio.channels.NotYetConnectedException"); - knownMetadata.add("java.nio.channels.OverlappingFileLockException"); - knownMetadata.add("java.nio.channels.Pipe"); - knownMetadata.add("java.nio.channels.Pipe$SinkChannel"); - knownMetadata.add("java.nio.channels.Pipe$SourceChannel"); - knownMetadata.add("java.nio.channels.ReadableByteChannel"); - knownMetadata.add("java.nio.channels.ScatteringByteChannel"); - knownMetadata.add("java.nio.channels.SelectableChannel"); - knownMetadata.add("java.nio.channels.SelectionKey"); - knownMetadata.add("java.nio.channels.Selector"); - knownMetadata.add("java.nio.channels.ServerSocketChannel"); - knownMetadata.add("java.nio.channels.SocketChannel"); - knownMetadata.add("java.nio.channels.UnresolvedAddressException"); - knownMetadata.add("java.nio.channels.UnsupportedAddressTypeException"); - knownMetadata.add("java.nio.channels.WritableByteChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractInterruptibleChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractSelectableChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractSelectionKey"); - knownMetadata.add("java.nio.channels.spi.AbstractSelector"); - knownMetadata.add("java.nio.channels.spi.SelectorProvider"); - knownMetadata.add("java.nio.charset.CharacterCodingException"); - knownMetadata.add("java.nio.charset.Charset"); - knownMetadata.add("java.nio.charset.CharsetDecoder"); - knownMetadata.add("java.nio.charset.CharsetEncoder"); - knownMetadata.add("java.nio.charset.CoderMalfunctionError"); - knownMetadata.add("java.nio.charset.CoderResult"); - knownMetadata.add("java.nio.charset.CodingErrorAction"); - knownMetadata.add("java.nio.charset.IllegalCharsetNameException"); - knownMetadata.add("java.nio.charset.MalformedInputException"); - knownMetadata.add("java.nio.charset.UnmappableCharacterException"); - knownMetadata.add("java.nio.charset.UnsupportedCharsetException"); - knownMetadata.add("java.nio.charset.spi.CharsetProvider"); - knownMetadata.add("java.security.AccessControlContext"); - knownMetadata.add("java.security.AccessControlException"); - knownMetadata.add("java.security.AccessController"); - knownMetadata.add("java.security.AlgorithmParameterGenerator"); - knownMetadata.add("java.security.AlgorithmParameterGeneratorSpi"); - knownMetadata.add("java.security.AlgorithmParameters"); - knownMetadata.add("java.security.AlgorithmParametersSpi"); - knownMetadata.add("java.security.AllPermission"); - knownMetadata.add("java.security.AuthProvider"); - knownMetadata.add("java.security.BasicPermission"); - knownMetadata.add("java.security.Certificate"); - knownMetadata.add("java.security.CodeSigner"); - knownMetadata.add("java.security.CodeSource"); - knownMetadata.add("java.security.DigestException"); - knownMetadata.add("java.security.DigestInputStream"); - knownMetadata.add("java.security.DigestOutputStream"); - knownMetadata.add("java.security.DomainCombiner"); - knownMetadata.add("java.security.GeneralSecurityException"); - knownMetadata.add("java.security.Guard"); - knownMetadata.add("java.security.GuardedObject"); - knownMetadata.add("java.security.Identity"); - knownMetadata.add("java.security.IdentityScope"); - knownMetadata.add("java.security.InvalidAlgorithmParameterException"); - knownMetadata.add("java.security.InvalidKeyException"); - knownMetadata.add("java.security.InvalidParameterException"); - knownMetadata.add("java.security.Key"); - knownMetadata.add("java.security.KeyException"); - knownMetadata.add("java.security.KeyFactory"); - knownMetadata.add("java.security.KeyFactorySpi"); - knownMetadata.add("java.security.KeyManagementException"); - knownMetadata.add("java.security.KeyPair"); - knownMetadata.add("java.security.KeyPairGenerator"); - knownMetadata.add("java.security.KeyPairGeneratorSpi"); - knownMetadata.add("java.security.KeyRep"); - knownMetadata.add("java.security.KeyRep$Type"); - knownMetadata.add("java.security.KeyStore"); - knownMetadata.add("java.security.KeyStore$Builder"); - knownMetadata.add("java.security.KeyStore$CallbackHandlerProtection"); - knownMetadata.add("java.security.KeyStore$Entry"); - knownMetadata.add("java.security.KeyStore$LoadStoreParameter"); - knownMetadata.add("java.security.KeyStore$PasswordProtection"); - knownMetadata.add("java.security.KeyStore$PrivateKeyEntry"); - knownMetadata.add("java.security.KeyStore$ProtectionParameter"); - knownMetadata.add("java.security.KeyStore$SecretKeyEntry"); - knownMetadata.add("java.security.KeyStore$TrustedCertificateEntry"); - knownMetadata.add("java.security.KeyStoreException"); - knownMetadata.add("java.security.KeyStoreSpi"); - knownMetadata.add("java.security.MessageDigest"); - knownMetadata.add("java.security.MessageDigestSpi"); - knownMetadata.add("java.security.NoSuchAlgorithmException"); - knownMetadata.add("java.security.NoSuchProviderException"); - knownMetadata.add("java.security.Permission"); - knownMetadata.add("java.security.PermissionCollection"); - knownMetadata.add("java.security.Permissions"); - knownMetadata.add("java.security.Policy"); - knownMetadata.add("java.security.Policy$Parameters"); - knownMetadata.add("java.security.PolicySpi"); - knownMetadata.add("java.security.Principal"); - knownMetadata.add("java.security.PrivateKey"); - knownMetadata.add("java.security.PrivilegedAction"); - knownMetadata.add("java.security.PrivilegedActionException"); - knownMetadata.add("java.security.PrivilegedExceptionAction"); - knownMetadata.add("java.security.ProtectionDomain"); - knownMetadata.add("java.security.Provider"); - knownMetadata.add("java.security.Provider$Service"); - knownMetadata.add("java.security.ProviderException"); - knownMetadata.add("java.security.PublicKey"); - knownMetadata.add("java.security.SecureClassLoader"); - knownMetadata.add("java.security.SecureRandom"); - knownMetadata.add("java.security.SecureRandomSpi"); - knownMetadata.add("java.security.Security"); - knownMetadata.add("java.security.SecurityPermission"); - knownMetadata.add("java.security.Signature"); - knownMetadata.add("java.security.SignatureException"); - knownMetadata.add("java.security.SignatureSpi"); - knownMetadata.add("java.security.SignedObject"); - knownMetadata.add("java.security.Signer"); - knownMetadata.add("java.security.Timestamp"); - knownMetadata.add("java.security.UnrecoverableEntryException"); - knownMetadata.add("java.security.UnrecoverableKeyException"); - knownMetadata.add("java.security.UnresolvedPermission"); - knownMetadata.add("java.security.acl.Acl"); - knownMetadata.add("java.security.acl.AclEntry"); - knownMetadata.add("java.security.acl.AclNotFoundException"); - knownMetadata.add("java.security.acl.Group"); - knownMetadata.add("java.security.acl.LastOwnerException"); - knownMetadata.add("java.security.acl.NotOwnerException"); - knownMetadata.add("java.security.acl.Owner"); - knownMetadata.add("java.security.acl.Permission"); - knownMetadata.add("java.security.cert.CRL"); - knownMetadata.add("java.security.cert.CRLException"); - knownMetadata.add("java.security.cert.CRLSelector"); - knownMetadata.add("java.security.cert.CertPath"); - knownMetadata.add("java.security.cert.CertPathBuilder"); - knownMetadata.add("java.security.cert.CertPathBuilderException"); - knownMetadata.add("java.security.cert.CertPathBuilderResult"); - knownMetadata.add("java.security.cert.CertPathBuilderSpi"); - knownMetadata.add("java.security.cert.CertPathParameters"); - knownMetadata.add("java.security.cert.CertPathValidator"); - knownMetadata.add("java.security.cert.CertPathValidatorException"); - knownMetadata.add("java.security.cert.CertPathValidatorResult"); - knownMetadata.add("java.security.cert.CertPathValidatorSpi"); - knownMetadata.add("java.security.cert.CertSelector"); - knownMetadata.add("java.security.cert.CertStore"); - knownMetadata.add("java.security.cert.CertStoreException"); - knownMetadata.add("java.security.cert.CertStoreParameters"); - knownMetadata.add("java.security.cert.CertStoreSpi"); - knownMetadata.add("java.security.cert.Certificate"); - knownMetadata.add("java.security.cert.CertificateEncodingException"); - knownMetadata.add("java.security.cert.CertificateException"); - knownMetadata.add("java.security.cert.CertificateExpiredException"); - knownMetadata.add("java.security.cert.CertificateFactory"); - knownMetadata.add("java.security.cert.CertificateFactorySpi"); - knownMetadata.add("java.security.cert.CertificateNotYetValidException"); - knownMetadata.add("java.security.cert.CertificateParsingException"); - knownMetadata.add("java.security.cert.CollectionCertStoreParameters"); - knownMetadata.add("java.security.cert.LDAPCertStoreParameters"); - knownMetadata.add("java.security.cert.PKIXBuilderParameters"); - knownMetadata.add("java.security.cert.PKIXCertPathBuilderResult"); - knownMetadata.add("java.security.cert.PKIXCertPathChecker"); - knownMetadata.add("java.security.cert.PKIXCertPathValidatorResult"); - knownMetadata.add("java.security.cert.PKIXParameters"); - knownMetadata.add("java.security.cert.PolicyNode"); - knownMetadata.add("java.security.cert.PolicyQualifierInfo"); - knownMetadata.add("java.security.cert.TrustAnchor"); - knownMetadata.add("java.security.cert.X509CRL"); - knownMetadata.add("java.security.cert.X509CRLEntry"); - knownMetadata.add("java.security.cert.X509CRLSelector"); - knownMetadata.add("java.security.cert.X509CertSelector"); - knownMetadata.add("java.security.cert.X509Certificate"); - knownMetadata.add("java.security.cert.X509Extension"); - knownMetadata.add("java.security.interfaces.DSAKey"); - knownMetadata.add("java.security.interfaces.DSAKeyPairGenerator"); - knownMetadata.add("java.security.interfaces.DSAParams"); - knownMetadata.add("java.security.interfaces.DSAPrivateKey"); - knownMetadata.add("java.security.interfaces.DSAPublicKey"); - knownMetadata.add("java.security.interfaces.ECKey"); - knownMetadata.add("java.security.interfaces.ECPrivateKey"); - knownMetadata.add("java.security.interfaces.ECPublicKey"); - knownMetadata.add("java.security.interfaces.RSAKey"); - knownMetadata.add("java.security.interfaces.RSAMultiPrimePrivateCrtKey"); - knownMetadata.add("java.security.interfaces.RSAPrivateCrtKey"); - knownMetadata.add("java.security.interfaces.RSAPrivateKey"); - knownMetadata.add("java.security.interfaces.RSAPublicKey"); - knownMetadata.add("java.security.spec.AlgorithmParameterSpec"); - knownMetadata.add("java.security.spec.DSAParameterSpec"); - knownMetadata.add("java.security.spec.DSAPrivateKeySpec"); - knownMetadata.add("java.security.spec.DSAPublicKeySpec"); - knownMetadata.add("java.security.spec.ECField"); - knownMetadata.add("java.security.spec.ECFieldF2m"); - knownMetadata.add("java.security.spec.ECFieldFp"); - knownMetadata.add("java.security.spec.ECGenParameterSpec"); - knownMetadata.add("java.security.spec.ECParameterSpec"); - knownMetadata.add("java.security.spec.ECPoint"); - knownMetadata.add("java.security.spec.ECPrivateKeySpec"); - knownMetadata.add("java.security.spec.ECPublicKeySpec"); - knownMetadata.add("java.security.spec.EllipticCurve"); - knownMetadata.add("java.security.spec.EncodedKeySpec"); - knownMetadata.add("java.security.spec.InvalidKeySpecException"); - knownMetadata.add("java.security.spec.InvalidParameterSpecException"); - knownMetadata.add("java.security.spec.KeySpec"); - knownMetadata.add("java.security.spec.MGF1ParameterSpec"); - knownMetadata.add("java.security.spec.PKCS8EncodedKeySpec"); - knownMetadata.add("java.security.spec.PSSParameterSpec"); - knownMetadata.add("java.security.spec.RSAKeyGenParameterSpec"); - knownMetadata.add("java.security.spec.RSAMultiPrimePrivateCrtKeySpec"); - knownMetadata.add("java.security.spec.RSAOtherPrimeInfo"); - knownMetadata.add("java.security.spec.RSAPrivateCrtKeySpec"); - knownMetadata.add("java.security.spec.RSAPrivateKeySpec"); - knownMetadata.add("java.security.spec.RSAPublicKeySpec"); - knownMetadata.add("java.security.spec.X509EncodedKeySpec"); - knownMetadata.add("java.sql.Array"); - knownMetadata.add("java.sql.BatchUpdateException"); - knownMetadata.add("java.sql.Blob"); - knownMetadata.add("java.sql.CallableStatement"); - knownMetadata.add("java.sql.ClientInfoStatus"); - knownMetadata.add("java.sql.Clob"); - knownMetadata.add("java.sql.Connection"); - knownMetadata.add("java.sql.DataTruncation"); - knownMetadata.add("java.sql.DatabaseMetaData"); - knownMetadata.add("java.sql.Date"); - knownMetadata.add("java.sql.Driver"); - knownMetadata.add("java.sql.DriverManager"); - knownMetadata.add("java.sql.DriverPropertyInfo"); - knownMetadata.add("java.sql.NClob"); - knownMetadata.add("java.sql.ParameterMetaData"); - knownMetadata.add("java.sql.PreparedStatement"); - knownMetadata.add("java.sql.Ref"); - knownMetadata.add("java.sql.ResultSet"); - knownMetadata.add("java.sql.ResultSetMetaData"); - knownMetadata.add("java.sql.RowId"); - knownMetadata.add("java.sql.RowIdLifetime"); - knownMetadata.add("java.sql.SQLClientInfoException"); - knownMetadata.add("java.sql.SQLData"); - knownMetadata.add("java.sql.SQLDataException"); - knownMetadata.add("java.sql.SQLException"); - knownMetadata.add("java.sql.SQLFeatureNotSupportedException"); - knownMetadata.add("java.sql.SQLInput"); - knownMetadata.add("java.sql.SQLIntegrityConstraintViolationException"); - knownMetadata.add("java.sql.SQLInvalidAuthorizationSpecException"); - knownMetadata.add("java.sql.SQLNonTransientConnectionException"); - knownMetadata.add("java.sql.SQLNonTransientException"); - knownMetadata.add("java.sql.SQLOutput"); - knownMetadata.add("java.sql.SQLPermission"); - knownMetadata.add("java.sql.SQLRecoverableException"); - knownMetadata.add("java.sql.SQLSyntaxErrorException"); - knownMetadata.add("java.sql.SQLTimeoutException"); - knownMetadata.add("java.sql.SQLTransactionRollbackException"); - knownMetadata.add("java.sql.SQLTransientConnectionException"); - knownMetadata.add("java.sql.SQLTransientException"); - knownMetadata.add("java.sql.SQLWarning"); - knownMetadata.add("java.sql.SQLXML"); - knownMetadata.add("java.sql.Savepoint"); - knownMetadata.add("java.sql.Statement"); - knownMetadata.add("java.sql.Struct"); - knownMetadata.add("java.sql.Time"); - knownMetadata.add("java.sql.Timestamp"); - knownMetadata.add("java.sql.Types"); - knownMetadata.add("java.sql.Wrapper"); - knownMetadata.add("java.text.Annotation"); - knownMetadata.add("java.text.AttributedCharacterIterator"); - knownMetadata.add("java.text.AttributedCharacterIterator$Attribute"); - knownMetadata.add("java.text.AttributedString"); - knownMetadata.add("java.text.Bidi"); - knownMetadata.add("java.text.BreakIterator"); - knownMetadata.add("java.text.CharacterIterator"); - knownMetadata.add("java.text.ChoiceFormat"); - knownMetadata.add("java.text.CollationElementIterator"); - knownMetadata.add("java.text.CollationKey"); - knownMetadata.add("java.text.Collator"); - knownMetadata.add("java.text.DateFormat"); - knownMetadata.add("java.text.DateFormat$Field"); - knownMetadata.add("java.text.DateFormatSymbols"); - knownMetadata.add("java.text.DecimalFormat"); - knownMetadata.add("java.text.DecimalFormatSymbols"); - knownMetadata.add("java.text.FieldPosition"); - knownMetadata.add("java.text.Format"); - knownMetadata.add("java.text.Format$Field"); - knownMetadata.add("java.text.MessageFormat"); - knownMetadata.add("java.text.MessageFormat$Field"); - knownMetadata.add("java.text.Normalizer"); - knownMetadata.add("java.text.Normalizer$Form"); - knownMetadata.add("java.text.NumberFormat"); - knownMetadata.add("java.text.NumberFormat$Field"); - knownMetadata.add("java.text.ParseException"); - knownMetadata.add("java.text.ParsePosition"); - knownMetadata.add("java.text.RuleBasedCollator"); - knownMetadata.add("java.text.SimpleDateFormat"); - knownMetadata.add("java.text.StringCharacterIterator"); - knownMetadata.add("java.util.AbstractCollection"); - knownMetadata.add("java.util.AbstractList"); - knownMetadata.add("java.util.AbstractMap"); - knownMetadata.add("java.util.AbstractMap$SimpleEntry"); - knownMetadata.add("java.util.AbstractMap$SimpleImmutableEntry"); - knownMetadata.add("java.util.AbstractQueue"); - knownMetadata.add("java.util.AbstractSequentialList"); - knownMetadata.add("java.util.AbstractSet"); - knownMetadata.add("java.util.ArrayDeque"); - knownMetadata.add("java.util.ArrayList"); - knownMetadata.add("java.util.Arrays"); - knownMetadata.add("java.util.BitSet"); - knownMetadata.add("java.util.Calendar"); - knownMetadata.add("java.util.Collection"); - knownMetadata.add("java.util.Collections"); - knownMetadata.add("java.util.Comparator"); - knownMetadata.add("java.util.ConcurrentModificationException"); - knownMetadata.add("java.util.Currency"); - knownMetadata.add("java.util.Date"); - knownMetadata.add("java.util.Deque"); - knownMetadata.add("java.util.Dictionary"); - knownMetadata.add("java.util.DuplicateFormatFlagsException"); - knownMetadata.add("java.util.EmptyStackException"); - knownMetadata.add("java.util.EnumMap"); - knownMetadata.add("java.util.EnumSet"); - knownMetadata.add("java.util.Enumeration"); - knownMetadata.add("java.util.EventListener"); - knownMetadata.add("java.util.EventListenerProxy"); - knownMetadata.add("java.util.EventObject"); - knownMetadata.add("java.util.FormatFlagsConversionMismatchException"); - knownMetadata.add("java.util.Formattable"); - knownMetadata.add("java.util.FormattableFlags"); - knownMetadata.add("java.util.Formatter"); - knownMetadata.add("java.util.Formatter$BigDecimalLayoutForm"); - knownMetadata.add("java.util.FormatterClosedException"); - knownMetadata.add("java.util.GregorianCalendar"); - knownMetadata.add("java.util.HashMap"); - knownMetadata.add("java.util.HashSet"); - knownMetadata.add("java.util.Hashtable"); - knownMetadata.add("java.util.IdentityHashMap"); - knownMetadata.add("java.util.IllegalFormatCodePointException"); - knownMetadata.add("java.util.IllegalFormatConversionException"); - knownMetadata.add("java.util.IllegalFormatException"); - knownMetadata.add("java.util.IllegalFormatFlagsException"); - knownMetadata.add("java.util.IllegalFormatPrecisionException"); - knownMetadata.add("java.util.IllegalFormatWidthException"); - knownMetadata.add("java.util.InputMismatchException"); - knownMetadata.add("java.util.InvalidPropertiesFormatException"); - knownMetadata.add("java.util.Iterator"); - knownMetadata.add("java.util.LinkedHashMap"); - knownMetadata.add("java.util.LinkedHashSet"); - knownMetadata.add("java.util.LinkedList"); - knownMetadata.add("java.util.List"); - knownMetadata.add("java.util.ListIterator"); - knownMetadata.add("java.util.ListResourceBundle"); - knownMetadata.add("java.util.Locale"); - knownMetadata.add("java.util.Map"); - knownMetadata.add("java.util.Map$Entry"); - knownMetadata.add("java.util.MissingFormatArgumentException"); - knownMetadata.add("java.util.MissingFormatWidthException"); - knownMetadata.add("java.util.MissingResourceException"); - knownMetadata.add("java.util.NavigableMap"); - knownMetadata.add("java.util.NavigableSet"); - knownMetadata.add("java.util.NoSuchElementException"); - knownMetadata.add("java.util.Observable"); - knownMetadata.add("java.util.Observer"); - knownMetadata.add("java.util.PriorityQueue"); - knownMetadata.add("java.util.Properties"); - knownMetadata.add("java.util.PropertyPermission"); - knownMetadata.add("java.util.PropertyResourceBundle"); - knownMetadata.add("java.util.Queue"); - knownMetadata.add("java.util.Random"); - knownMetadata.add("java.util.RandomAccess"); - knownMetadata.add("java.util.ResourceBundle"); - knownMetadata.add("java.util.ResourceBundle$Control"); - knownMetadata.add("java.util.Scanner"); - knownMetadata.add("java.util.ServiceConfigurationError"); - knownMetadata.add("java.util.ServiceLoader"); - knownMetadata.add("java.util.Set"); - knownMetadata.add("java.util.SimpleTimeZone"); - knownMetadata.add("java.util.SortedMap"); - knownMetadata.add("java.util.SortedSet"); - knownMetadata.add("java.util.Stack"); - knownMetadata.add("java.util.StringTokenizer"); - knownMetadata.add("java.util.TimeZone"); - knownMetadata.add("java.util.Timer"); - knownMetadata.add("java.util.TimerTask"); - knownMetadata.add("java.util.TooManyListenersException"); - knownMetadata.add("java.util.TreeMap"); - knownMetadata.add("java.util.TreeSet"); - knownMetadata.add("java.util.UUID"); - knownMetadata.add("java.util.UnknownFormatConversionException"); - knownMetadata.add("java.util.UnknownFormatFlagsException"); - knownMetadata.add("java.util.Vector"); - knownMetadata.add("java.util.WeakHashMap"); - knownMetadata.add("java.util.concurrent.AbstractExecutorService"); - knownMetadata.add("java.util.concurrent.ArrayBlockingQueue"); - knownMetadata.add("java.util.concurrent.BlockingDeque"); - knownMetadata.add("java.util.concurrent.BlockingQueue"); - knownMetadata.add("java.util.concurrent.BrokenBarrierException"); - knownMetadata.add("java.util.concurrent.Callable"); - knownMetadata.add("java.util.concurrent.CancellationException"); - knownMetadata.add("java.util.concurrent.CompletionService"); - knownMetadata.add("java.util.concurrent.ConcurrentHashMap"); - knownMetadata.add("java.util.concurrent.ConcurrentLinkedQueue"); - knownMetadata.add("java.util.concurrent.ConcurrentMap"); - knownMetadata.add("java.util.concurrent.ConcurrentNavigableMap"); - knownMetadata.add("java.util.concurrent.ConcurrentSkipListMap"); - knownMetadata.add("java.util.concurrent.ConcurrentSkipListSet"); - knownMetadata.add("java.util.concurrent.CopyOnWriteArrayList"); - knownMetadata.add("java.util.concurrent.CopyOnWriteArraySet"); - knownMetadata.add("java.util.concurrent.CountDownLatch"); - knownMetadata.add("java.util.concurrent.CyclicBarrier"); - knownMetadata.add("java.util.concurrent.DelayQueue"); - knownMetadata.add("java.util.concurrent.Delayed"); - knownMetadata.add("java.util.concurrent.Exchanger"); - knownMetadata.add("java.util.concurrent.ExecutionException"); - knownMetadata.add("java.util.concurrent.Executor"); - knownMetadata.add("java.util.concurrent.ExecutorCompletionService"); - knownMetadata.add("java.util.concurrent.ExecutorService"); - knownMetadata.add("java.util.concurrent.Executors"); - knownMetadata.add("java.util.concurrent.Future"); - knownMetadata.add("java.util.concurrent.FutureTask"); - knownMetadata.add("java.util.concurrent.LinkedBlockingDeque"); - knownMetadata.add("java.util.concurrent.LinkedBlockingQueue"); - knownMetadata.add("java.util.concurrent.PriorityBlockingQueue"); - knownMetadata.add("java.util.concurrent.RejectedExecutionException"); - knownMetadata.add("java.util.concurrent.RejectedExecutionHandler"); - knownMetadata.add("java.util.concurrent.RunnableFuture"); - knownMetadata.add("java.util.concurrent.RunnableScheduledFuture"); - knownMetadata.add("java.util.concurrent.ScheduledExecutorService"); - knownMetadata.add("java.util.concurrent.ScheduledFuture"); - knownMetadata.add("java.util.concurrent.ScheduledThreadPoolExecutor"); - knownMetadata.add("java.util.concurrent.Semaphore"); - knownMetadata.add("java.util.concurrent.SynchronousQueue"); - knownMetadata.add("java.util.concurrent.ThreadFactory"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$AbortPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$DiscardPolicy"); - knownMetadata.add("java.util.concurrent.TimeUnit"); - knownMetadata.add("java.util.concurrent.TimeoutException"); - knownMetadata.add("java.util.concurrent.atomic.AtomicBoolean"); - knownMetadata.add("java.util.concurrent.atomic.AtomicInteger"); - knownMetadata.add("java.util.concurrent.atomic.AtomicIntegerArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicIntegerFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLong"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLongArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLongFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicMarkableReference"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReference"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReferenceArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReferenceFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicStampedReference"); - knownMetadata.add("java.util.concurrent.locks.AbstractOwnableSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedLongSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject"); - knownMetadata.add("java.util.concurrent.locks.Condition"); - knownMetadata.add("java.util.concurrent.locks.Lock"); - knownMetadata.add("java.util.concurrent.locks.LockSupport"); - knownMetadata.add("java.util.concurrent.locks.ReadWriteLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock"); - knownMetadata.add("java.util.jar.Attributes"); - knownMetadata.add("java.util.jar.Attributes$Name"); - knownMetadata.add("java.util.jar.JarEntry"); - knownMetadata.add("java.util.jar.JarException"); - knownMetadata.add("java.util.jar.JarFile"); - knownMetadata.add("java.util.jar.JarInputStream"); - knownMetadata.add("java.util.jar.JarOutputStream"); - knownMetadata.add("java.util.jar.Manifest"); - knownMetadata.add("java.util.jar.Pack200"); - knownMetadata.add("java.util.jar.Pack200$Packer"); - knownMetadata.add("java.util.jar.Pack200$Unpacker"); - knownMetadata.add("java.util.logging.ConsoleHandler"); - knownMetadata.add("java.util.logging.ErrorManager"); - knownMetadata.add("java.util.logging.FileHandler"); - knownMetadata.add("java.util.logging.Filter"); - knownMetadata.add("java.util.logging.Formatter"); - knownMetadata.add("java.util.logging.Handler"); - knownMetadata.add("java.util.logging.Level"); - knownMetadata.add("java.util.logging.LogManager"); - knownMetadata.add("java.util.logging.LogRecord"); - knownMetadata.add("java.util.logging.Logger"); - knownMetadata.add("java.util.logging.LoggingMXBean"); - knownMetadata.add("java.util.logging.LoggingPermission"); - knownMetadata.add("java.util.logging.MemoryHandler"); - knownMetadata.add("java.util.logging.SimpleFormatter"); - knownMetadata.add("java.util.logging.SocketHandler"); - knownMetadata.add("java.util.logging.StreamHandler"); - knownMetadata.add("java.util.logging.XMLFormatter"); - knownMetadata.add("java.util.prefs.AbstractPreferences"); - knownMetadata.add("java.util.prefs.BackingStoreException"); - knownMetadata.add("java.util.prefs.InvalidPreferencesFormatException"); - knownMetadata.add("java.util.prefs.NodeChangeEvent"); - knownMetadata.add("java.util.prefs.NodeChangeListener"); - knownMetadata.add("java.util.prefs.PreferenceChangeEvent"); - knownMetadata.add("java.util.prefs.PreferenceChangeListener"); - knownMetadata.add("java.util.prefs.Preferences"); - knownMetadata.add("java.util.prefs.PreferencesFactory"); - knownMetadata.add("java.util.regex.MatchResult"); - knownMetadata.add("java.util.regex.Matcher"); - knownMetadata.add("java.util.regex.Pattern"); - knownMetadata.add("java.util.regex.PatternSyntaxException"); - knownMetadata.add("java.util.zip.Adler32"); - knownMetadata.add("java.util.zip.CRC32"); - knownMetadata.add("java.util.zip.CheckedInputStream"); - knownMetadata.add("java.util.zip.CheckedOutputStream"); - knownMetadata.add("java.util.zip.Checksum"); - knownMetadata.add("java.util.zip.DataFormatException"); - knownMetadata.add("java.util.zip.Deflater"); - knownMetadata.add("java.util.zip.DeflaterInputStream"); - knownMetadata.add("java.util.zip.DeflaterOutputStream"); - knownMetadata.add("java.util.zip.GZIPInputStream"); - knownMetadata.add("java.util.zip.GZIPOutputStream"); - knownMetadata.add("java.util.zip.Inflater"); - knownMetadata.add("java.util.zip.InflaterInputStream"); - knownMetadata.add("java.util.zip.InflaterOutputStream"); - knownMetadata.add("java.util.zip.ZipEntry"); - knownMetadata.add("java.util.zip.ZipError"); - knownMetadata.add("java.util.zip.ZipException"); - knownMetadata.add("java.util.zip.ZipFile"); - knownMetadata.add("java.util.zip.ZipInputStream"); - knownMetadata.add("java.util.zip.ZipOutputStream"); - knownMetadata.add("javax.crypto.BadPaddingException"); - knownMetadata.add("javax.crypto.Cipher"); - knownMetadata.add("javax.crypto.CipherInputStream"); - knownMetadata.add("javax.crypto.CipherOutputStream"); - knownMetadata.add("javax.crypto.CipherSpi"); - knownMetadata.add("javax.crypto.EncryptedPrivateKeyInfo"); - knownMetadata.add("javax.crypto.ExemptionMechanism"); - knownMetadata.add("javax.crypto.ExemptionMechanismException"); - knownMetadata.add("javax.crypto.ExemptionMechanismSpi"); - knownMetadata.add("javax.crypto.IllegalBlockSizeException"); - knownMetadata.add("javax.crypto.KeyAgreement"); - knownMetadata.add("javax.crypto.KeyAgreementSpi"); - knownMetadata.add("javax.crypto.KeyGenerator"); - knownMetadata.add("javax.crypto.KeyGeneratorSpi"); - knownMetadata.add("javax.crypto.Mac"); - knownMetadata.add("javax.crypto.MacSpi"); - knownMetadata.add("javax.crypto.NoSuchPaddingException"); - knownMetadata.add("javax.crypto.NullCipher"); - knownMetadata.add("javax.crypto.SealedObject"); - knownMetadata.add("javax.crypto.SecretKey"); - knownMetadata.add("javax.crypto.SecretKeyFactory"); - knownMetadata.add("javax.crypto.SecretKeyFactorySpi"); - knownMetadata.add("javax.crypto.ShortBufferException"); - knownMetadata.add("javax.crypto.interfaces.DHKey"); - knownMetadata.add("javax.crypto.interfaces.DHPrivateKey"); - knownMetadata.add("javax.crypto.interfaces.DHPublicKey"); - knownMetadata.add("javax.crypto.interfaces.PBEKey"); - knownMetadata.add("javax.crypto.spec.DESKeySpec"); - knownMetadata.add("javax.crypto.spec.DESedeKeySpec"); - knownMetadata.add("javax.crypto.spec.DHGenParameterSpec"); - knownMetadata.add("javax.crypto.spec.DHParameterSpec"); - knownMetadata.add("javax.crypto.spec.DHPrivateKeySpec"); - knownMetadata.add("javax.crypto.spec.DHPublicKeySpec"); - knownMetadata.add("javax.crypto.spec.IvParameterSpec"); - knownMetadata.add("javax.crypto.spec.OAEPParameterSpec"); - knownMetadata.add("javax.crypto.spec.PBEKeySpec"); - knownMetadata.add("javax.crypto.spec.PBEParameterSpec"); - knownMetadata.add("javax.crypto.spec.PSource"); - knownMetadata.add("javax.crypto.spec.PSource$PSpecified"); - knownMetadata.add("javax.crypto.spec.RC2ParameterSpec"); - knownMetadata.add("javax.crypto.spec.RC5ParameterSpec"); - knownMetadata.add("javax.crypto.spec.SecretKeySpec"); - knownMetadata.add("javax.microedition.khronos.egl.EGL"); - knownMetadata.add("javax.microedition.khronos.egl.EGL10"); - knownMetadata.add("javax.microedition.khronos.egl.EGL11"); - knownMetadata.add("javax.microedition.khronos.egl.EGLConfig"); - knownMetadata.add("javax.microedition.khronos.egl.EGLContext"); - knownMetadata.add("javax.microedition.khronos.egl.EGLDisplay"); - knownMetadata.add("javax.microedition.khronos.egl.EGLSurface"); - knownMetadata.add("javax.microedition.khronos.opengles.GL"); - knownMetadata.add("javax.microedition.khronos.opengles.GL10"); - knownMetadata.add("javax.microedition.khronos.opengles.GL10Ext"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11Ext"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11ExtensionPack"); - knownMetadata.add("javax.net.ServerSocketFactory"); - knownMetadata.add("javax.net.SocketFactory"); - knownMetadata.add("javax.net.ssl.CertPathTrustManagerParameters"); - knownMetadata.add("javax.net.ssl.HandshakeCompletedEvent"); - knownMetadata.add("javax.net.ssl.HandshakeCompletedListener"); - knownMetadata.add("javax.net.ssl.HostnameVerifier"); - knownMetadata.add("javax.net.ssl.HttpsURLConnection"); - knownMetadata.add("javax.net.ssl.KeyManager"); - knownMetadata.add("javax.net.ssl.KeyManagerFactory"); - knownMetadata.add("javax.net.ssl.KeyManagerFactorySpi"); - knownMetadata.add("javax.net.ssl.KeyStoreBuilderParameters"); - knownMetadata.add("javax.net.ssl.ManagerFactoryParameters"); - knownMetadata.add("javax.net.ssl.SSLContext"); - knownMetadata.add("javax.net.ssl.SSLContextSpi"); - knownMetadata.add("javax.net.ssl.SSLEngine"); - knownMetadata.add("javax.net.ssl.SSLEngineResult"); - knownMetadata.add("javax.net.ssl.SSLEngineResult$HandshakeStatus"); - knownMetadata.add("javax.net.ssl.SSLEngineResult$Status"); - knownMetadata.add("javax.net.ssl.SSLException"); - knownMetadata.add("javax.net.ssl.SSLHandshakeException"); - knownMetadata.add("javax.net.ssl.SSLKeyException"); - knownMetadata.add("javax.net.ssl.SSLParameters"); - knownMetadata.add("javax.net.ssl.SSLPeerUnverifiedException"); - knownMetadata.add("javax.net.ssl.SSLPermission"); - knownMetadata.add("javax.net.ssl.SSLProtocolException"); - knownMetadata.add("javax.net.ssl.SSLServerSocket"); - knownMetadata.add("javax.net.ssl.SSLServerSocketFactory"); - knownMetadata.add("javax.net.ssl.SSLSession"); - knownMetadata.add("javax.net.ssl.SSLSessionBindingEvent"); - knownMetadata.add("javax.net.ssl.SSLSessionBindingListener"); - knownMetadata.add("javax.net.ssl.SSLSessionContext"); - knownMetadata.add("javax.net.ssl.SSLSocket"); - knownMetadata.add("javax.net.ssl.SSLSocketFactory"); - knownMetadata.add("javax.net.ssl.TrustManager"); - knownMetadata.add("javax.net.ssl.TrustManagerFactory"); - knownMetadata.add("javax.net.ssl.TrustManagerFactorySpi"); - knownMetadata.add("javax.net.ssl.X509ExtendedKeyManager"); - knownMetadata.add("javax.net.ssl.X509KeyManager"); - knownMetadata.add("javax.net.ssl.X509TrustManager"); - knownMetadata.add("javax.security.auth.AuthPermission"); - knownMetadata.add("javax.security.auth.DestroyFailedException"); - knownMetadata.add("javax.security.auth.Destroyable"); - knownMetadata.add("javax.security.auth.PrivateCredentialPermission"); - knownMetadata.add("javax.security.auth.Subject"); - knownMetadata.add("javax.security.auth.SubjectDomainCombiner"); - knownMetadata.add("javax.security.auth.callback.Callback"); - knownMetadata.add("javax.security.auth.callback.CallbackHandler"); - knownMetadata.add("javax.security.auth.callback.PasswordCallback"); - knownMetadata.add("javax.security.auth.callback.UnsupportedCallbackException"); - knownMetadata.add("javax.security.auth.login.LoginException"); - knownMetadata.add("javax.security.auth.x500.X500Principal"); - knownMetadata.add("javax.security.cert.Certificate"); - knownMetadata.add("javax.security.cert.CertificateEncodingException"); - knownMetadata.add("javax.security.cert.CertificateException"); - knownMetadata.add("javax.security.cert.CertificateExpiredException"); - knownMetadata.add("javax.security.cert.CertificateNotYetValidException"); - knownMetadata.add("javax.security.cert.CertificateParsingException"); - knownMetadata.add("javax.security.cert.X509Certificate"); - knownMetadata.add("javax.sql.CommonDataSource"); - knownMetadata.add("javax.sql.ConnectionEvent"); - knownMetadata.add("javax.sql.ConnectionEventListener"); - knownMetadata.add("javax.sql.ConnectionPoolDataSource"); - knownMetadata.add("javax.sql.DataSource"); - knownMetadata.add("javax.sql.PooledConnection"); - knownMetadata.add("javax.sql.RowSet"); - knownMetadata.add("javax.sql.RowSetEvent"); - knownMetadata.add("javax.sql.RowSetInternal"); - knownMetadata.add("javax.sql.RowSetListener"); - knownMetadata.add("javax.sql.RowSetMetaData"); - knownMetadata.add("javax.sql.RowSetReader"); - knownMetadata.add("javax.sql.RowSetWriter"); - knownMetadata.add("javax.sql.StatementEvent"); - knownMetadata.add("javax.sql.StatementEventListener"); - knownMetadata.add("javax.xml.XMLConstants"); - knownMetadata.add("javax.xml.datatype.DatatypeConfigurationException"); - knownMetadata.add("javax.xml.datatype.DatatypeConstants"); - knownMetadata.add("javax.xml.datatype.DatatypeConstants$Field"); - knownMetadata.add("javax.xml.datatype.DatatypeFactory"); - knownMetadata.add("javax.xml.datatype.Duration"); - knownMetadata.add("javax.xml.datatype.XMLGregorianCalendar"); - knownMetadata.add("javax.xml.namespace.NamespaceContext"); - knownMetadata.add("javax.xml.namespace.QName"); - knownMetadata.add("javax.xml.parsers.DocumentBuilder"); - knownMetadata.add("javax.xml.parsers.DocumentBuilderFactory"); - knownMetadata.add("javax.xml.parsers.FactoryConfigurationError"); - knownMetadata.add("javax.xml.parsers.ParserConfigurationException"); - knownMetadata.add("javax.xml.parsers.SAXParser"); - knownMetadata.add("javax.xml.parsers.SAXParserFactory"); - knownMetadata.add("javax.xml.transform.ErrorListener"); - knownMetadata.add("javax.xml.transform.OutputKeys"); - knownMetadata.add("javax.xml.transform.Result"); - knownMetadata.add("javax.xml.transform.Source"); - knownMetadata.add("javax.xml.transform.SourceLocator"); - knownMetadata.add("javax.xml.transform.Templates"); - knownMetadata.add("javax.xml.transform.Transformer"); - knownMetadata.add("javax.xml.transform.TransformerConfigurationException"); - knownMetadata.add("javax.xml.transform.TransformerException"); - knownMetadata.add("javax.xml.transform.TransformerFactory"); - knownMetadata.add("javax.xml.transform.TransformerFactoryConfigurationError"); - knownMetadata.add("javax.xml.transform.URIResolver"); - knownMetadata.add("javax.xml.transform.dom.DOMLocator"); - knownMetadata.add("javax.xml.transform.dom.DOMResult"); - knownMetadata.add("javax.xml.transform.dom.DOMSource"); - knownMetadata.add("javax.xml.transform.sax.SAXResult"); - knownMetadata.add("javax.xml.transform.sax.SAXSource"); - knownMetadata.add("javax.xml.transform.sax.SAXTransformerFactory"); - knownMetadata.add("javax.xml.transform.sax.TemplatesHandler"); - knownMetadata.add("javax.xml.transform.sax.TransformerHandler"); - knownMetadata.add("javax.xml.transform.stream.StreamResult"); - knownMetadata.add("javax.xml.transform.stream.StreamSource"); - knownMetadata.add("javax.xml.validation.Schema"); - knownMetadata.add("javax.xml.validation.SchemaFactory"); - knownMetadata.add("javax.xml.validation.SchemaFactoryLoader"); - knownMetadata.add("javax.xml.validation.TypeInfoProvider"); - knownMetadata.add("javax.xml.validation.Validator"); - knownMetadata.add("javax.xml.validation.ValidatorHandler"); - knownMetadata.add("javax.xml.xpath.XPath"); - knownMetadata.add("javax.xml.xpath.XPathConstants"); - knownMetadata.add("javax.xml.xpath.XPathException"); - knownMetadata.add("javax.xml.xpath.XPathExpression"); - knownMetadata.add("javax.xml.xpath.XPathExpressionException"); - knownMetadata.add("javax.xml.xpath.XPathFactory"); - knownMetadata.add("javax.xml.xpath.XPathFactoryConfigurationException"); - knownMetadata.add("javax.xml.xpath.XPathFunction"); - knownMetadata.add("javax.xml.xpath.XPathFunctionException"); - knownMetadata.add("javax.xml.xpath.XPathFunctionResolver"); - knownMetadata.add("javax.xml.xpath.XPathVariableResolver"); - knownMetadata.add("junit.framework.Assert"); - knownMetadata.add("junit.framework.AssertionFailedError"); - knownMetadata.add("junit.framework.ComparisonFailure"); - knownMetadata.add("junit.framework.Protectable"); - knownMetadata.add("junit.framework.Test"); - knownMetadata.add("junit.framework.TestCase"); - knownMetadata.add("junit.framework.TestFailure"); - knownMetadata.add("junit.framework.TestListener"); - knownMetadata.add("junit.framework.TestResult"); - knownMetadata.add("junit.framework.TestSuite"); - knownMetadata.add("junit.runner.BaseTestRunner"); - knownMetadata.add("junit.runner.TestSuiteLoader"); - knownMetadata.add("junit.runner.Version"); - knownMetadata.add("org.apache.commons.logging.Log"); - knownMetadata.add("org.apache.http.ConnectionClosedException"); - knownMetadata.add("org.apache.http.ConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.FormattedHeader"); - knownMetadata.add("org.apache.http.Header"); - knownMetadata.add("org.apache.http.HeaderElement"); - knownMetadata.add("org.apache.http.HeaderElementIterator"); - knownMetadata.add("org.apache.http.HeaderIterator"); - knownMetadata.add("org.apache.http.HttpClientConnection"); - knownMetadata.add("org.apache.http.HttpConnection"); - knownMetadata.add("org.apache.http.HttpConnectionMetrics"); - knownMetadata.add("org.apache.http.HttpEntity"); - knownMetadata.add("org.apache.http.HttpEntityEnclosingRequest"); - knownMetadata.add("org.apache.http.HttpException"); - knownMetadata.add("org.apache.http.HttpHost"); - knownMetadata.add("org.apache.http.HttpInetConnection"); - knownMetadata.add("org.apache.http.HttpMessage"); - knownMetadata.add("org.apache.http.HttpRequest"); - knownMetadata.add("org.apache.http.HttpRequestFactory"); - knownMetadata.add("org.apache.http.HttpRequestInterceptor"); - knownMetadata.add("org.apache.http.HttpResponse"); - knownMetadata.add("org.apache.http.HttpResponseFactory"); - knownMetadata.add("org.apache.http.HttpResponseInterceptor"); - knownMetadata.add("org.apache.http.HttpServerConnection"); - knownMetadata.add("org.apache.http.HttpStatus"); - knownMetadata.add("org.apache.http.HttpVersion"); - knownMetadata.add("org.apache.http.MalformedChunkCodingException"); - knownMetadata.add("org.apache.http.MethodNotSupportedException"); - knownMetadata.add("org.apache.http.NameValuePair"); - knownMetadata.add("org.apache.http.NoHttpResponseException"); - knownMetadata.add("org.apache.http.ParseException"); - knownMetadata.add("org.apache.http.ProtocolException"); - knownMetadata.add("org.apache.http.ProtocolVersion"); - knownMetadata.add("org.apache.http.ReasonPhraseCatalog"); - knownMetadata.add("org.apache.http.RequestLine"); - knownMetadata.add("org.apache.http.StatusLine"); - knownMetadata.add("org.apache.http.TokenIterator"); - knownMetadata.add("org.apache.http.UnsupportedHttpVersionException"); - knownMetadata.add("org.apache.http.auth.AUTH"); - knownMetadata.add("org.apache.http.auth.AuthScheme"); - knownMetadata.add("org.apache.http.auth.AuthSchemeFactory"); - knownMetadata.add("org.apache.http.auth.AuthSchemeRegistry"); - knownMetadata.add("org.apache.http.auth.AuthScope"); - knownMetadata.add("org.apache.http.auth.AuthState"); - knownMetadata.add("org.apache.http.auth.AuthenticationException"); - knownMetadata.add("org.apache.http.auth.BasicUserPrincipal"); - knownMetadata.add("org.apache.http.auth.Credentials"); - knownMetadata.add("org.apache.http.auth.InvalidCredentialsException"); - knownMetadata.add("org.apache.http.auth.MalformedChallengeException"); - knownMetadata.add("org.apache.http.auth.NTCredentials"); - knownMetadata.add("org.apache.http.auth.NTUserPrincipal"); - knownMetadata.add("org.apache.http.auth.UsernamePasswordCredentials"); - knownMetadata.add("org.apache.http.auth.params.AuthPNames"); - knownMetadata.add("org.apache.http.auth.params.AuthParamBean"); - knownMetadata.add("org.apache.http.auth.params.AuthParams"); - knownMetadata.add("org.apache.http.client.AuthenticationHandler"); - knownMetadata.add("org.apache.http.client.CircularRedirectException"); - knownMetadata.add("org.apache.http.client.ClientProtocolException"); - knownMetadata.add("org.apache.http.client.CookieStore"); - knownMetadata.add("org.apache.http.client.CredentialsProvider"); - knownMetadata.add("org.apache.http.client.HttpClient"); - knownMetadata.add("org.apache.http.client.HttpRequestRetryHandler"); - knownMetadata.add("org.apache.http.client.HttpResponseException"); - knownMetadata.add("org.apache.http.client.NonRepeatableRequestException"); - knownMetadata.add("org.apache.http.client.RedirectException"); - knownMetadata.add("org.apache.http.client.RedirectHandler"); - knownMetadata.add("org.apache.http.client.RequestDirector"); - knownMetadata.add("org.apache.http.client.ResponseHandler"); - knownMetadata.add("org.apache.http.client.UserTokenHandler"); - knownMetadata.add("org.apache.http.client.entity.UrlEncodedFormEntity"); - knownMetadata.add("org.apache.http.client.methods.AbortableHttpRequest"); - knownMetadata.add("org.apache.http.client.methods.HttpDelete"); - knownMetadata.add("org.apache.http.client.methods.HttpEntityEnclosingRequestBase"); - knownMetadata.add("org.apache.http.client.methods.HttpGet"); - knownMetadata.add("org.apache.http.client.methods.HttpHead"); - knownMetadata.add("org.apache.http.client.methods.HttpOptions"); - knownMetadata.add("org.apache.http.client.methods.HttpPost"); - knownMetadata.add("org.apache.http.client.methods.HttpPut"); - knownMetadata.add("org.apache.http.client.methods.HttpRequestBase"); - knownMetadata.add("org.apache.http.client.methods.HttpTrace"); - knownMetadata.add("org.apache.http.client.methods.HttpUriRequest"); - knownMetadata.add("org.apache.http.client.params.AllClientPNames"); - knownMetadata.add("org.apache.http.client.params.AuthPolicy"); - knownMetadata.add("org.apache.http.client.params.ClientPNames"); - knownMetadata.add("org.apache.http.client.params.ClientParamBean"); - knownMetadata.add("org.apache.http.client.params.CookiePolicy"); - knownMetadata.add("org.apache.http.client.params.HttpClientParams"); - knownMetadata.add("org.apache.http.client.protocol.ClientContext"); - knownMetadata.add("org.apache.http.client.protocol.ClientContextConfigurer"); - knownMetadata.add("org.apache.http.client.protocol.RequestAddCookies"); - knownMetadata.add("org.apache.http.client.protocol.RequestDefaultHeaders"); - knownMetadata.add("org.apache.http.client.protocol.RequestProxyAuthentication"); - knownMetadata.add("org.apache.http.client.protocol.RequestTargetAuthentication"); - knownMetadata.add("org.apache.http.client.protocol.ResponseProcessCookies"); - knownMetadata.add("org.apache.http.client.utils.CloneUtils"); - knownMetadata.add("org.apache.http.client.utils.URIUtils"); - knownMetadata.add("org.apache.http.client.utils.URLEncodedUtils"); - knownMetadata.add("org.apache.http.conn.BasicEofSensorWatcher"); - knownMetadata.add("org.apache.http.conn.BasicManagedEntity"); - knownMetadata.add("org.apache.http.conn.ClientConnectionManager"); - knownMetadata.add("org.apache.http.conn.ClientConnectionManagerFactory"); - knownMetadata.add("org.apache.http.conn.ClientConnectionOperator"); - knownMetadata.add("org.apache.http.conn.ClientConnectionRequest"); - knownMetadata.add("org.apache.http.conn.ConnectTimeoutException"); - knownMetadata.add("org.apache.http.conn.ConnectionKeepAliveStrategy"); - knownMetadata.add("org.apache.http.conn.ConnectionPoolTimeoutException"); - knownMetadata.add("org.apache.http.conn.ConnectionReleaseTrigger"); - knownMetadata.add("org.apache.http.conn.EofSensorInputStream"); - knownMetadata.add("org.apache.http.conn.EofSensorWatcher"); - knownMetadata.add("org.apache.http.conn.HttpHostConnectException"); - knownMetadata.add("org.apache.http.conn.ManagedClientConnection"); - knownMetadata.add("org.apache.http.conn.MultihomePlainSocketFactory"); - knownMetadata.add("org.apache.http.conn.OperatedClientConnection"); - knownMetadata.add("org.apache.http.conn.params.ConnConnectionPNames"); - knownMetadata.add("org.apache.http.conn.params.ConnConnectionParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerPNames"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerParams"); - knownMetadata.add("org.apache.http.conn.params.ConnPerRoute"); - knownMetadata.add("org.apache.http.conn.params.ConnPerRouteBean"); - knownMetadata.add("org.apache.http.conn.params.ConnRoutePNames"); - knownMetadata.add("org.apache.http.conn.params.ConnRouteParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnRouteParams"); - knownMetadata.add("org.apache.http.conn.routing.BasicRouteDirector"); - knownMetadata.add("org.apache.http.conn.routing.HttpRoute"); - knownMetadata.add("org.apache.http.conn.routing.HttpRouteDirector"); - knownMetadata.add("org.apache.http.conn.routing.HttpRoutePlanner"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo$LayerType"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo$TunnelType"); - knownMetadata.add("org.apache.http.conn.routing.RouteTracker"); - knownMetadata.add("org.apache.http.conn.scheme.HostNameResolver"); - knownMetadata.add("org.apache.http.conn.scheme.LayeredSocketFactory"); - knownMetadata.add("org.apache.http.conn.scheme.PlainSocketFactory"); - knownMetadata.add("org.apache.http.conn.scheme.Scheme"); - knownMetadata.add("org.apache.http.conn.scheme.SchemeRegistry"); - knownMetadata.add("org.apache.http.conn.scheme.SocketFactory"); - knownMetadata.add("org.apache.http.conn.ssl.AbstractVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.AllowAllHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.BrowserCompatHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.SSLSocketFactory"); - knownMetadata.add("org.apache.http.conn.ssl.StrictHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.X509HostnameVerifier"); - knownMetadata.add("org.apache.http.conn.util.InetAddressUtils"); - knownMetadata.add("org.apache.http.cookie.ClientCookie"); - knownMetadata.add("org.apache.http.cookie.Cookie"); - knownMetadata.add("org.apache.http.cookie.CookieAttributeHandler"); - knownMetadata.add("org.apache.http.cookie.CookieIdentityComparator"); - knownMetadata.add("org.apache.http.cookie.CookieOrigin"); - knownMetadata.add("org.apache.http.cookie.CookiePathComparator"); - knownMetadata.add("org.apache.http.cookie.CookieSpec"); - knownMetadata.add("org.apache.http.cookie.CookieSpecFactory"); - knownMetadata.add("org.apache.http.cookie.CookieSpecRegistry"); - knownMetadata.add("org.apache.http.cookie.MalformedCookieException"); - knownMetadata.add("org.apache.http.cookie.SM"); - knownMetadata.add("org.apache.http.cookie.SetCookie"); - knownMetadata.add("org.apache.http.cookie.SetCookie2"); - knownMetadata.add("org.apache.http.cookie.params.CookieSpecPNames"); - knownMetadata.add("org.apache.http.cookie.params.CookieSpecParamBean"); - knownMetadata.add("org.apache.http.entity.AbstractHttpEntity"); - knownMetadata.add("org.apache.http.entity.BasicHttpEntity"); - knownMetadata.add("org.apache.http.entity.BufferedHttpEntity"); - knownMetadata.add("org.apache.http.entity.ByteArrayEntity"); - knownMetadata.add("org.apache.http.entity.ContentLengthStrategy"); - knownMetadata.add("org.apache.http.entity.ContentProducer"); - knownMetadata.add("org.apache.http.entity.EntityTemplate"); - knownMetadata.add("org.apache.http.entity.FileEntity"); - knownMetadata.add("org.apache.http.entity.HttpEntityWrapper"); - knownMetadata.add("org.apache.http.entity.InputStreamEntity"); - knownMetadata.add("org.apache.http.entity.SerializableEntity"); - knownMetadata.add("org.apache.http.entity.StringEntity"); - knownMetadata.add("org.apache.http.impl.AbstractHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.AbstractHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.DefaultConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.impl.DefaultHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.DefaultHttpRequestFactory"); - knownMetadata.add("org.apache.http.impl.DefaultHttpResponseFactory"); - knownMetadata.add("org.apache.http.impl.DefaultHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.EnglishReasonPhraseCatalog"); - knownMetadata.add("org.apache.http.impl.HttpConnectionMetricsImpl"); - knownMetadata.add("org.apache.http.impl.NoConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.impl.SocketHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.SocketHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.auth.AuthSchemeBase"); - knownMetadata.add("org.apache.http.impl.auth.BasicScheme"); - knownMetadata.add("org.apache.http.impl.auth.BasicSchemeFactory"); - knownMetadata.add("org.apache.http.impl.auth.DigestScheme"); - knownMetadata.add("org.apache.http.impl.auth.DigestSchemeFactory"); - knownMetadata.add("org.apache.http.impl.auth.NTLMEngine"); - knownMetadata.add("org.apache.http.impl.auth.NTLMEngineException"); - knownMetadata.add("org.apache.http.impl.auth.NTLMScheme"); - knownMetadata.add("org.apache.http.impl.auth.RFC2617Scheme"); - knownMetadata.add("org.apache.http.impl.auth.UnsupportedDigestAlgorithmException"); - knownMetadata.add("org.apache.http.impl.client.AbstractAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.AbstractHttpClient"); - knownMetadata.add("org.apache.http.impl.client.BasicCookieStore"); - knownMetadata.add("org.apache.http.impl.client.BasicCredentialsProvider"); - knownMetadata.add("org.apache.http.impl.client.BasicResponseHandler"); - knownMetadata.add("org.apache.http.impl.client.ClientParamsStack"); - knownMetadata.add("org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy"); - knownMetadata.add("org.apache.http.impl.client.DefaultHttpClient"); - knownMetadata.add("org.apache.http.impl.client.DefaultHttpRequestRetryHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultProxyAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultRedirectHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultRequestDirector"); - knownMetadata.add("org.apache.http.impl.client.DefaultTargetAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultUserTokenHandler"); - knownMetadata.add("org.apache.http.impl.client.EntityEnclosingRequestWrapper"); - knownMetadata.add("org.apache.http.impl.client.RedirectLocations"); - knownMetadata.add("org.apache.http.impl.client.RequestWrapper"); - knownMetadata.add("org.apache.http.impl.client.RoutedRequest"); - knownMetadata.add("org.apache.http.impl.client.TunnelRefusedException"); - knownMetadata.add("org.apache.http.impl.conn.AbstractClientConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.AbstractPoolEntry"); - knownMetadata.add("org.apache.http.impl.conn.AbstractPooledConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.DefaultClientConnection"); - knownMetadata.add("org.apache.http.impl.conn.DefaultClientConnectionOperator"); - knownMetadata.add("org.apache.http.impl.conn.DefaultHttpRoutePlanner"); - knownMetadata.add("org.apache.http.impl.conn.DefaultResponseParser"); - knownMetadata.add("org.apache.http.impl.conn.IdleConnectionHandler"); - knownMetadata.add("org.apache.http.impl.conn.LoggingSessionInputBuffer"); - knownMetadata.add("org.apache.http.impl.conn.LoggingSessionOutputBuffer"); - knownMetadata.add("org.apache.http.impl.conn.ProxySelectorRoutePlanner"); - knownMetadata.add("org.apache.http.impl.conn.SingleClientConnManager"); - knownMetadata.add("org.apache.http.impl.conn.Wire"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.AbstractConnPool"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPoolEntry"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPoolEntryRef"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.ConnPoolByRoute"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.PoolEntryRequest"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RefQueueHandler"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RefQueueWorker"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RouteSpecificPool"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.WaitingThread"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.WaitingThreadAborter"); - knownMetadata.add("org.apache.http.impl.cookie.AbstractCookieAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.AbstractCookieSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BasicClientCookie"); - knownMetadata.add("org.apache.http.impl.cookie.BasicClientCookie2"); - knownMetadata.add("org.apache.http.impl.cookie.BasicCommentHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicDomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicExpiresHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicMaxAgeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicPathHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicSecureHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BestMatchSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BestMatchSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.BrowserCompatSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BrowserCompatSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.CookieSpecBase"); - knownMetadata.add("org.apache.http.impl.cookie.DateParseException"); - knownMetadata.add("org.apache.http.impl.cookie.DateUtils"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftHeaderParser"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftSpec"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109DomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109Spec"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109SpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109VersionHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965DomainAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965PortAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965Spec"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965SpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965VersionAttributeHandler"); - knownMetadata.add("org.apache.http.impl.entity.EntityDeserializer"); - knownMetadata.add("org.apache.http.impl.entity.EntitySerializer"); - knownMetadata.add("org.apache.http.impl.entity.LaxContentLengthStrategy"); - knownMetadata.add("org.apache.http.impl.entity.StrictContentLengthStrategy"); - knownMetadata.add("org.apache.http.impl.io.AbstractMessageParser"); - knownMetadata.add("org.apache.http.impl.io.AbstractMessageWriter"); - knownMetadata.add("org.apache.http.impl.io.AbstractSessionInputBuffer"); - knownMetadata.add("org.apache.http.impl.io.AbstractSessionOutputBuffer"); - knownMetadata.add("org.apache.http.impl.io.ChunkedInputStream"); - knownMetadata.add("org.apache.http.impl.io.ChunkedOutputStream"); - knownMetadata.add("org.apache.http.impl.io.ContentLengthInputStream"); - knownMetadata.add("org.apache.http.impl.io.ContentLengthOutputStream"); - knownMetadata.add("org.apache.http.impl.io.HttpRequestParser"); - knownMetadata.add("org.apache.http.impl.io.HttpRequestWriter"); - knownMetadata.add("org.apache.http.impl.io.HttpResponseParser"); - knownMetadata.add("org.apache.http.impl.io.HttpResponseWriter"); - knownMetadata.add("org.apache.http.impl.io.HttpTransportMetricsImpl"); - knownMetadata.add("org.apache.http.impl.io.IdentityInputStream"); - knownMetadata.add("org.apache.http.impl.io.IdentityOutputStream"); - knownMetadata.add("org.apache.http.impl.io.SocketInputBuffer"); - knownMetadata.add("org.apache.http.impl.io.SocketOutputBuffer"); - knownMetadata.add("org.apache.http.io.HttpMessageParser"); - knownMetadata.add("org.apache.http.io.HttpMessageWriter"); - knownMetadata.add("org.apache.http.io.HttpTransportMetrics"); - knownMetadata.add("org.apache.http.io.SessionInputBuffer"); - knownMetadata.add("org.apache.http.io.SessionOutputBuffer"); - knownMetadata.add("org.apache.http.message.AbstractHttpMessage"); - knownMetadata.add("org.apache.http.message.BasicHeader"); - knownMetadata.add("org.apache.http.message.BasicHeaderElement"); - knownMetadata.add("org.apache.http.message.BasicHeaderElementIterator"); - knownMetadata.add("org.apache.http.message.BasicHeaderIterator"); - knownMetadata.add("org.apache.http.message.BasicHeaderValueFormatter"); - knownMetadata.add("org.apache.http.message.BasicHeaderValueParser"); - knownMetadata.add("org.apache.http.message.BasicHttpEntityEnclosingRequest"); - knownMetadata.add("org.apache.http.message.BasicHttpRequest"); - knownMetadata.add("org.apache.http.message.BasicHttpResponse"); - knownMetadata.add("org.apache.http.message.BasicLineFormatter"); - knownMetadata.add("org.apache.http.message.BasicLineParser"); - knownMetadata.add("org.apache.http.message.BasicListHeaderIterator"); - knownMetadata.add("org.apache.http.message.BasicNameValuePair"); - knownMetadata.add("org.apache.http.message.BasicRequestLine"); - knownMetadata.add("org.apache.http.message.BasicStatusLine"); - knownMetadata.add("org.apache.http.message.BasicTokenIterator"); - knownMetadata.add("org.apache.http.message.BufferedHeader"); - knownMetadata.add("org.apache.http.message.HeaderGroup"); - knownMetadata.add("org.apache.http.message.HeaderValueFormatter"); - knownMetadata.add("org.apache.http.message.HeaderValueParser"); - knownMetadata.add("org.apache.http.message.LineFormatter"); - knownMetadata.add("org.apache.http.message.LineParser"); - knownMetadata.add("org.apache.http.message.ParserCursor"); - knownMetadata.add("org.apache.http.params.AbstractHttpParams"); - knownMetadata.add("org.apache.http.params.BasicHttpParams"); - knownMetadata.add("org.apache.http.params.CoreConnectionPNames"); - knownMetadata.add("org.apache.http.params.CoreProtocolPNames"); - knownMetadata.add("org.apache.http.params.DefaultedHttpParams"); - knownMetadata.add("org.apache.http.params.HttpAbstractParamBean"); - knownMetadata.add("org.apache.http.params.HttpConnectionParamBean"); - knownMetadata.add("org.apache.http.params.HttpConnectionParams"); - knownMetadata.add("org.apache.http.params.HttpParams"); - knownMetadata.add("org.apache.http.params.HttpProtocolParamBean"); - knownMetadata.add("org.apache.http.params.HttpProtocolParams"); - knownMetadata.add("org.apache.http.protocol.BasicHttpContext"); - knownMetadata.add("org.apache.http.protocol.BasicHttpProcessor"); - knownMetadata.add("org.apache.http.protocol.DefaultedHttpContext"); - knownMetadata.add("org.apache.http.protocol.ExecutionContext"); - knownMetadata.add("org.apache.http.protocol.HTTP"); - knownMetadata.add("org.apache.http.protocol.HttpContext"); - knownMetadata.add("org.apache.http.protocol.HttpDateGenerator"); - knownMetadata.add("org.apache.http.protocol.HttpExpectationVerifier"); - knownMetadata.add("org.apache.http.protocol.HttpProcessor"); - knownMetadata.add("org.apache.http.protocol.HttpRequestExecutor"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandler"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandlerRegistry"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandlerResolver"); - knownMetadata.add("org.apache.http.protocol.HttpRequestInterceptorList"); - knownMetadata.add("org.apache.http.protocol.HttpResponseInterceptorList"); - knownMetadata.add("org.apache.http.protocol.HttpService"); - knownMetadata.add("org.apache.http.protocol.RequestConnControl"); - knownMetadata.add("org.apache.http.protocol.RequestContent"); - knownMetadata.add("org.apache.http.protocol.RequestDate"); - knownMetadata.add("org.apache.http.protocol.RequestExpectContinue"); - knownMetadata.add("org.apache.http.protocol.RequestTargetHost"); - knownMetadata.add("org.apache.http.protocol.RequestUserAgent"); - knownMetadata.add("org.apache.http.protocol.ResponseConnControl"); - knownMetadata.add("org.apache.http.protocol.ResponseContent"); - knownMetadata.add("org.apache.http.protocol.ResponseDate"); - knownMetadata.add("org.apache.http.protocol.ResponseServer"); - knownMetadata.add("org.apache.http.protocol.SyncBasicHttpContext"); - knownMetadata.add("org.apache.http.protocol.UriPatternMatcher"); - knownMetadata.add("org.apache.http.util.ByteArrayBuffer"); - knownMetadata.add("org.apache.http.util.CharArrayBuffer"); - knownMetadata.add("org.apache.http.util.EncodingUtils"); - knownMetadata.add("org.apache.http.util.EntityUtils"); - knownMetadata.add("org.apache.http.util.ExceptionUtils"); - knownMetadata.add("org.apache.http.util.LangUtils"); - knownMetadata.add("org.apache.http.util.VersionInfo"); - knownMetadata.add("org.json.JSONArray"); - knownMetadata.add("org.json.JSONException"); - knownMetadata.add("org.json.JSONObject"); - knownMetadata.add("org.json.JSONStringer"); - knownMetadata.add("org.json.JSONTokener"); - knownMetadata.add("org.w3c.dom.Attr"); - knownMetadata.add("org.w3c.dom.CDATASection"); - knownMetadata.add("org.w3c.dom.CharacterData"); - knownMetadata.add("org.w3c.dom.Comment"); - knownMetadata.add("org.w3c.dom.DOMConfiguration"); - knownMetadata.add("org.w3c.dom.DOMError"); - knownMetadata.add("org.w3c.dom.DOMErrorHandler"); - knownMetadata.add("org.w3c.dom.DOMException"); - knownMetadata.add("org.w3c.dom.DOMImplementation"); - knownMetadata.add("org.w3c.dom.DOMImplementationList"); - knownMetadata.add("org.w3c.dom.DOMImplementationSource"); - knownMetadata.add("org.w3c.dom.DOMLocator"); - knownMetadata.add("org.w3c.dom.DOMStringList"); - knownMetadata.add("org.w3c.dom.Document"); - knownMetadata.add("org.w3c.dom.DocumentFragment"); - knownMetadata.add("org.w3c.dom.DocumentType"); - knownMetadata.add("org.w3c.dom.Element"); - knownMetadata.add("org.w3c.dom.Entity"); - knownMetadata.add("org.w3c.dom.EntityReference"); - knownMetadata.add("org.w3c.dom.NameList"); - knownMetadata.add("org.w3c.dom.NamedNodeMap"); - knownMetadata.add("org.w3c.dom.Node"); - knownMetadata.add("org.w3c.dom.NodeList"); - knownMetadata.add("org.w3c.dom.Notation"); - knownMetadata.add("org.w3c.dom.ProcessingInstruction"); - knownMetadata.add("org.w3c.dom.Text"); - knownMetadata.add("org.w3c.dom.TypeInfo"); - knownMetadata.add("org.w3c.dom.UserDataHandler"); - knownMetadata.add("org.w3c.dom.ls.DOMImplementationLS"); - knownMetadata.add("org.w3c.dom.ls.LSException"); - knownMetadata.add("org.w3c.dom.ls.LSInput"); - knownMetadata.add("org.w3c.dom.ls.LSOutput"); - knownMetadata.add("org.w3c.dom.ls.LSParser"); - knownMetadata.add("org.w3c.dom.ls.LSParserFilter"); - knownMetadata.add("org.w3c.dom.ls.LSResourceResolver"); - knownMetadata.add("org.w3c.dom.ls.LSSerializer"); - knownMetadata.add("org.xml.sax.AttributeList"); - knownMetadata.add("org.xml.sax.Attributes"); - knownMetadata.add("org.xml.sax.ContentHandler"); - knownMetadata.add("org.xml.sax.DTDHandler"); - knownMetadata.add("org.xml.sax.DocumentHandler"); - knownMetadata.add("org.xml.sax.EntityResolver"); - knownMetadata.add("org.xml.sax.ErrorHandler"); - knownMetadata.add("org.xml.sax.HandlerBase"); - knownMetadata.add("org.xml.sax.InputSource"); - knownMetadata.add("org.xml.sax.Locator"); - knownMetadata.add("org.xml.sax.Parser"); - knownMetadata.add("org.xml.sax.SAXException"); - knownMetadata.add("org.xml.sax.SAXNotRecognizedException"); - knownMetadata.add("org.xml.sax.SAXNotSupportedException"); - knownMetadata.add("org.xml.sax.SAXParseException"); - knownMetadata.add("org.xml.sax.XMLFilter"); - knownMetadata.add("org.xml.sax.XMLReader"); - knownMetadata.add("org.xml.sax.ext.Attributes2"); - knownMetadata.add("org.xml.sax.ext.Attributes2Impl"); - knownMetadata.add("org.xml.sax.ext.DeclHandler"); - knownMetadata.add("org.xml.sax.ext.DefaultHandler2"); - knownMetadata.add("org.xml.sax.ext.EntityResolver2"); - knownMetadata.add("org.xml.sax.ext.LexicalHandler"); - knownMetadata.add("org.xml.sax.ext.Locator2"); - knownMetadata.add("org.xml.sax.ext.Locator2Impl"); - knownMetadata.add("org.xml.sax.helpers.AttributeListImpl"); - knownMetadata.add("org.xml.sax.helpers.AttributesImpl"); - knownMetadata.add("org.xml.sax.helpers.DefaultHandler"); - knownMetadata.add("org.xml.sax.helpers.LocatorImpl"); - knownMetadata.add("org.xml.sax.helpers.NamespaceSupport"); - knownMetadata.add("org.xml.sax.helpers.ParserAdapter"); - knownMetadata.add("org.xml.sax.helpers.ParserFactory"); - knownMetadata.add("org.xml.sax.helpers.XMLFilterImpl"); - knownMetadata.add("org.xml.sax.helpers.XMLReaderAdapter"); - knownMetadata.add("org.xml.sax.helpers.XMLReaderFactory"); - knownMetadata.add("org.xmlpull.v1.XmlPullParser"); - knownMetadata.add("org.xmlpull.v1.XmlPullParserException"); - knownMetadata.add("org.xmlpull.v1.XmlPullParserFactory"); - knownMetadata.add("org.xmlpull.v1.XmlSerializer"); - knownMetadata.add("org.xmlpull.v1.sax2.Driver"); - knownMetadata.add("com.koushikdutta.ion.DeferredLoadBitmap"); - knownMetadata.add("com.koushikdutta.ion.DiskLruCacheStore"); - knownMetadata.add("com.koushikdutta.ion.HeadersCallback"); - knownMetadata.add("com.koushikdutta.ion.InputStreamParser"); - knownMetadata.add("com.koushikdutta.ion.Ion"); - knownMetadata.add("com.koushikdutta.ion.Ion$Config"); - knownMetadata.add("com.koushikdutta.ion.LoadBitmapBase"); - knownMetadata.add("com.koushikdutta.ion.LoadBitmapRegion"); - knownMetadata.add("com.koushikdutta.ion.LoadDeepZoom"); - knownMetadata.add("com.koushikdutta.ion.Loader"); - knownMetadata.add("com.koushikdutta.ion.Loader$LoaderEmitter"); - knownMetadata.add("com.koushikdutta.ion.NetworkImageView"); - knownMetadata.add("com.koushikdutta.ion.ProgressCallback"); - knownMetadata.add("com.koushikdutta.ion.Response"); - knownMetadata.add("com.koushikdutta.ion.bitmap.BitmapInfo"); - knownMetadata.add("com.koushikdutta.ion.bitmap.Exif"); - knownMetadata.add("com.koushikdutta.ion.bitmap.IonBitmapCache"); - knownMetadata.add("com.koushikdutta.ion.bitmap.SoftReferenceHashtable"); - knownMetadata.add("com.koushikdutta.ion.bitmap.Transform"); - knownMetadata.add("com.koushikdutta.ion.builder.BitmapBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.BitmapFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$B"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$BF"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$F"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$IF"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$M"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$U"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$ImageView"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$ImageView$F"); - knownMetadata.add("com.koushikdutta.ion.builder.FutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.ImageViewBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.ImageViewFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.LoadBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.LoadImageViewFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.MultipartBodyBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.RequestBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.UrlEncodedBuilder"); - knownMetadata.add("com.koushikdutta.ion.cookie.CookieMiddleware"); - knownMetadata.add("com.koushikdutta.ion.future.ResponseFuture"); - knownMetadata.add("com.koushikdutta.ion.gif.GifAction"); - knownMetadata.add("com.koushikdutta.ion.gif.GifDecoder"); - knownMetadata.add("com.koushikdutta.ion.gif.GifFrame"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonBody"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonParser"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonSerializer"); - knownMetadata.add("com.koushikdutta.ion.gson.PojoBody"); - knownMetadata.add("com.koushikdutta.ion.loader.AsyncHttpRequestFactory"); - knownMetadata.add("com.koushikdutta.ion.loader.ContentLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.FileLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.HttpLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.MediaFile"); - knownMetadata.add("com.koushikdutta.ion.loader.MediaFile$MediaFileType"); - knownMetadata.add("com.koushikdutta.ion.loader.MtpConstants"); - knownMetadata.add("com.koushikdutta.ion.loader.PackageIconLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.SimpleLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.VideoLoader"); - knownMetadata.add("com.koushikdutta.async.ArrayDeque"); - knownMetadata.add("com.koushikdutta.async.AsyncDatagramSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncNetworkSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLException"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLSocketWrapper"); - knownMetadata.add("com.koushikdutta.async.AsyncSemaphore"); - knownMetadata.add("com.koushikdutta.async.AsyncServer"); - knownMetadata.add("com.koushikdutta.async.AsyncServerSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSocket"); - knownMetadata.add("com.koushikdutta.async.BufferedDataEmitter"); - knownMetadata.add("com.koushikdutta.async.BufferedDataSink"); - knownMetadata.add("com.koushikdutta.async.ByteBufferList"); - knownMetadata.add("com.koushikdutta.async.DataEmitter"); - knownMetadata.add("com.koushikdutta.async.DataEmitterBase"); - knownMetadata.add("com.koushikdutta.async.DataEmitterReader"); - knownMetadata.add("com.koushikdutta.async.DataSink"); - knownMetadata.add("com.koushikdutta.async.DataTrackingEmitter"); - knownMetadata.add("com.koushikdutta.async.DataTrackingEmitter$DataTracker"); - knownMetadata.add("com.koushikdutta.async.Deque"); - knownMetadata.add("com.koushikdutta.async.FileDataEmitter"); - knownMetadata.add("com.koushikdutta.async.FilteredDataEmitter"); - knownMetadata.add("com.koushikdutta.async.FilteredDataSink"); - knownMetadata.add("com.koushikdutta.async.HostnameResolutionException"); - knownMetadata.add("com.koushikdutta.async.LineEmitter"); - knownMetadata.add("com.koushikdutta.async.LineEmitter$StringCallback"); - knownMetadata.add("com.koushikdutta.async.NullDataCallback"); - knownMetadata.add("com.koushikdutta.async.PushParser"); - knownMetadata.add("com.koushikdutta.async.SelectorWrapper"); - knownMetadata.add("com.koushikdutta.async.TapCallback"); - knownMetadata.add("com.koushikdutta.async.ThreadQueue"); - knownMetadata.add("com.koushikdutta.async.Util"); - knownMetadata.add("com.koushikdutta.async.ZipDataSink"); - knownMetadata.add("com.koushikdutta.async.callback.CompletedCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ConnectCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ContinuationCallback"); - knownMetadata.add("com.koushikdutta.async.callback.DataCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ListenCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ResultCallback"); - knownMetadata.add("com.koushikdutta.async.callback.WritableCallback"); - knownMetadata.add("com.koushikdutta.async.dns.Dns"); - knownMetadata.add("com.koushikdutta.async.dns.DnsResponse"); - knownMetadata.add("com.koushikdutta.async.future.Cancellable"); - knownMetadata.add("com.koushikdutta.async.future.Continuation"); - knownMetadata.add("com.koushikdutta.async.future.DependentCancellable"); - knownMetadata.add("com.koushikdutta.async.future.DependentFuture"); - knownMetadata.add("com.koushikdutta.async.future.Future"); - knownMetadata.add("com.koushikdutta.async.future.FutureCallback"); - knownMetadata.add("com.koushikdutta.async.future.FutureRunnable"); - knownMetadata.add("com.koushikdutta.async.future.FutureThread"); - knownMetadata.add("com.koushikdutta.async.future.HandlerFuture"); - knownMetadata.add("com.koushikdutta.async.future.SimpleCancellable"); - knownMetadata.add("com.koushikdutta.async.future.SimpleFuture"); - knownMetadata.add("com.koushikdutta.async.future.TransformFuture"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$DownloadCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$FileCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$JSONArrayCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$JSONObjectCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$RequestCallbackBase"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$StringCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$WebSocketConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$GetSocketData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnBodyData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnHeadersReceivedData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnRequestCompleteData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnSocketData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpGet"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpHead"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpPost"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpRequest"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpResponse"); - knownMetadata.add("com.koushikdutta.async.http.AsyncSSLSocketMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.AsyncSocketMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.BodyDecoderException"); - knownMetadata.add("com.koushikdutta.async.http.ConnectionClosedException"); - knownMetadata.add("com.koushikdutta.async.http.ConnectionFailedException"); - knownMetadata.add("com.koushikdutta.async.http.HttpUtil"); - knownMetadata.add("com.koushikdutta.async.http.HybiParser$ProtocolError"); - knownMetadata.add("com.koushikdutta.async.http.Multimap"); - knownMetadata.add("com.koushikdutta.async.http.RedirectLimitExceededException"); - knownMetadata.add("com.koushikdutta.async.http.ResponseCacheMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.ResponseCacheMiddleware$CacheData"); - knownMetadata.add("com.koushikdutta.async.http.SimpleMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.WebSocket"); - knownMetadata.add("com.koushikdutta.async.http.WebSocket$StringCallback"); - knownMetadata.add("com.koushikdutta.async.http.WebSocketHandshakeException"); - knownMetadata.add("com.koushikdutta.async.http.WebSocketImpl"); - knownMetadata.add("com.koushikdutta.async.http.body.AsyncHttpRequestBody"); - knownMetadata.add("com.koushikdutta.async.http.body.DocumentBody"); - knownMetadata.add("com.koushikdutta.async.http.body.FileBody"); - knownMetadata.add("com.koushikdutta.async.http.body.FilePart"); - knownMetadata.add("com.koushikdutta.async.http.body.JSONArrayBody"); - knownMetadata.add("com.koushikdutta.async.http.body.JSONObjectBody"); - knownMetadata.add("com.koushikdutta.async.http.body.MultipartFormDataBody"); - knownMetadata.add("com.koushikdutta.async.http.body.MultipartFormDataBody$MultipartCallback"); - knownMetadata.add("com.koushikdutta.async.http.body.Part"); - knownMetadata.add("com.koushikdutta.async.http.body.StreamBody"); - knownMetadata.add("com.koushikdutta.async.http.body.StreamPart"); - knownMetadata.add("com.koushikdutta.async.http.body.StringBody"); - knownMetadata.add("com.koushikdutta.async.http.body.StringPart"); - knownMetadata.add("com.koushikdutta.async.http.body.UrlEncodedFormBody"); - knownMetadata.add("com.koushikdutta.async.http.callback.HttpConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.callback.RequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedDataException"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedOutputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.ContentLengthFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.DataRemainingException"); - knownMetadata.add("com.koushikdutta.async.http.filter.GZIPInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.InflaterInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.PrematureDataEndException"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Charsets"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache$Editor"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache$Snapshot"); - knownMetadata.add("com.koushikdutta.async.http.libcore.HeaderParser$CacheControlHandler"); - knownMetadata.add("com.koushikdutta.async.http.libcore.HttpDate"); - knownMetadata.add("com.koushikdutta.async.http.libcore.IoUtils"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Memory"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Objects"); - knownMetadata.add("com.koushikdutta.async.http.libcore.RawHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.RequestHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.ResponseHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.ResponseSource"); - knownMetadata.add("com.koushikdutta.async.http.libcore.StrictLineReader"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServer"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServer$WebSocketRequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerRequest"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerRequestImpl"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerResponse"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerResponseImpl"); - knownMetadata.add("com.koushikdutta.async.http.server.BoundaryEmitter"); - knownMetadata.add("com.koushikdutta.async.http.server.HttpServerRequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.server.MalformedRangeException"); - knownMetadata.add("com.koushikdutta.async.http.server.MimeEncodingException"); - knownMetadata.add("com.koushikdutta.async.http.server.StreamSkipException"); - knownMetadata.add("com.koushikdutta.async.http.server.UnknownRequestBody"); - knownMetadata.add("com.koushikdutta.async.http.socketio.Acknowledge"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.DisconnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ErrorCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.EventCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.EventEmitter"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ExceptionCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.JSONCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ReconnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIOClient"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIOException"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIORequest"); - knownMetadata.add("com.koushikdutta.async.http.socketio.StringCallback"); - knownMetadata.add("com.koushikdutta.async.parser.AsyncParser"); - knownMetadata.add("com.koushikdutta.async.parser.ByteBufferListParser"); - knownMetadata.add("com.koushikdutta.async.parser.DocumentParser"); - knownMetadata.add("com.koushikdutta.async.parser.JSONArrayParser"); - knownMetadata.add("com.koushikdutta.async.parser.JSONObjectParser"); - knownMetadata.add("com.koushikdutta.async.parser.StringParser"); - knownMetadata.add("com.koushikdutta.async.stream.ByteBufferListInputStream"); - knownMetadata.add("com.koushikdutta.async.stream.FileDataSink"); - knownMetadata.add("com.koushikdutta.async.stream.InputStreamDataEmitter"); - knownMetadata.add("com.koushikdutta.async.stream.OutputStreamDataCallback"); - knownMetadata.add("com.koushikdutta.async.stream.OutputStreamDataSink"); - knownMetadata.add("com.koushikdutta.async.util.HashList"); - knownMetadata.add("com.koushikdutta.async.util.StreamUtility"); - knownMetadata.add("com.koushikdutta.async.wrapper.AsyncSocketWrapper"); - knownMetadata.add("com.koushikdutta.async.wrapper.DataEmitterWrapper"); - knownMetadata.add("android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat"); - knownMetadata.add("android.support.v4.app.ActionBarDrawerToggle"); - knownMetadata.add("android.support.v4.app.ActivityCompat"); - knownMetadata.add("android.support.v4.app.ActivityOptionsCompat"); - knownMetadata.add("android.support.v4.app.DialogFragment"); - knownMetadata.add("android.support.v4.app.Fragment"); - knownMetadata.add("android.support.v4.app.Fragment$InstantiationException"); - knownMetadata.add("android.support.v4.app.Fragment$SavedState"); - knownMetadata.add("android.support.v4.app.FragmentActivity"); - knownMetadata.add("android.support.v4.app.FragmentManager"); - knownMetadata.add("android.support.v4.app.FragmentManager$BackStackEntry"); - knownMetadata.add("android.support.v4.app.FragmentManager$OnBackStackChangedListener"); - knownMetadata.add("android.support.v4.app.FragmentPagerAdapter"); - knownMetadata.add("android.support.v4.app.FragmentStatePagerAdapter"); - knownMetadata.add("android.support.v4.app.FragmentTabHost"); - knownMetadata.add("android.support.v4.app.FragmentTransaction"); - knownMetadata.add("android.support.v4.app.ListFragment"); - knownMetadata.add("android.support.v4.app.LoaderManager"); - knownMetadata.add("android.support.v4.app.LoaderManager$LoaderCallbacks"); - knownMetadata.add("android.support.v4.app.NavUtils"); - knownMetadata.add("android.support.v4.app.NotificationCompat"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Action"); - knownMetadata.add("android.support.v4.app.NotificationCompat$BigPictureStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$BigTextStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Builder"); - knownMetadata.add("android.support.v4.app.NotificationCompat$InboxStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Style"); - knownMetadata.add("android.support.v4.app.ServiceCompat"); - knownMetadata.add("android.support.v4.app.ShareCompat"); - knownMetadata.add("android.support.v4.app.ShareCompat$IntentBuilder"); - knownMetadata.add("android.support.v4.app.ShareCompat$IntentReader"); - knownMetadata.add("android.support.v4.app.TaskStackBuilder"); - knownMetadata.add("android.support.v4.app.TaskStackBuilderHoneycomb"); - knownMetadata.add("android.support.v4.content.AsyncTaskLoader"); - knownMetadata.add("android.support.v4.content.ContextCompat"); - knownMetadata.add("android.support.v4.content.CursorLoader"); - knownMetadata.add("android.support.v4.content.FileProvider"); - knownMetadata.add("android.support.v4.content.IntentCompat"); - knownMetadata.add("android.support.v4.content.Loader"); - knownMetadata.add("android.support.v4.content.Loader$ForceLoadContentObserver"); - knownMetadata.add("android.support.v4.content.Loader$OnLoadCompleteListener"); - knownMetadata.add("android.support.v4.content.LocalBroadcastManager"); - knownMetadata.add("android.support.v4.content.ModernAsyncTask$Status"); - knownMetadata.add("android.support.v4.content.pm.ActivityInfoCompat"); - knownMetadata.add("android.support.v4.database.DatabaseUtilsCompat"); - knownMetadata.add("android.support.v4.net.ConnectivityManagerCompat"); - knownMetadata.add("android.support.v4.net.TrafficStatsCompat"); - knownMetadata.add("android.support.v4.net.TrafficStatsCompatIcs"); - knownMetadata.add("android.support.v4.os.ParcelableCompat"); - knownMetadata.add("android.support.v4.os.ParcelableCompatCreatorCallbacks"); - knownMetadata.add("android.support.v4.util.AtomicFile"); - knownMetadata.add("android.support.v4.util.DebugUtils"); - knownMetadata.add("android.support.v4.util.LogWriter"); - knownMetadata.add("android.support.v4.util.LongSparseArray"); - knownMetadata.add("android.support.v4.util.LruCache"); - knownMetadata.add("android.support.v4.util.SparseArrayCompat"); - knownMetadata.add("android.support.v4.util.TimeUtils"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompat"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompatIcs$AccessibilityDelegateBridge"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompatJellyBean$AccessibilityDelegateBridgeJellyBean"); - knownMetadata.add("android.support.v4.view.GestureDetectorCompat"); - knownMetadata.add("android.support.v4.view.GravityCompat"); - knownMetadata.add("android.support.v4.view.KeyEventCompat"); - knownMetadata.add("android.support.v4.view.MenuCompat"); - knownMetadata.add("android.support.v4.view.MenuItemCompat"); - knownMetadata.add("android.support.v4.view.MotionEventCompat"); - knownMetadata.add("android.support.v4.view.PagerAdapter"); - knownMetadata.add("android.support.v4.view.PagerTabStrip"); - knownMetadata.add("android.support.v4.view.PagerTitleStrip"); - knownMetadata.add("android.support.v4.view.VelocityTrackerCompat"); - knownMetadata.add("android.support.v4.view.ViewCompat"); - knownMetadata.add("android.support.v4.view.ViewCompatJB"); - knownMetadata.add("android.support.v4.view.ViewConfigurationCompat"); - knownMetadata.add("android.support.v4.view.ViewGroupCompat"); - knownMetadata.add("android.support.v4.view.ViewPager"); - knownMetadata.add("android.support.v4.view.ViewPager$LayoutParams"); - knownMetadata.add("android.support.v4.view.ViewPager$OnPageChangeListener"); - knownMetadata.add("android.support.v4.view.ViewPager$PageTransformer"); - knownMetadata.add("android.support.v4.view.ViewPager$SavedState"); - knownMetadata.add("android.support.v4.view.ViewPager$SimpleOnPageChangeListener"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityEventCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityManagerCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityNodeInfoCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityNodeProviderCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityRecordCompat"); - knownMetadata.add("android.support.v4.widget.CursorAdapter"); - knownMetadata.add("android.support.v4.widget.DrawerLayout"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$DrawerListener"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$LayoutParams"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$SimpleDrawerListener"); - knownMetadata.add("android.support.v4.widget.EdgeEffectCompat"); - knownMetadata.add("android.support.v4.widget.ResourceCursorAdapter"); - knownMetadata.add("android.support.v4.widget.ScrollerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat$OnCloseListenerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat$OnQueryTextListenerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompatIcs$MySearchView"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter$CursorToStringConverter"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter$ViewBinder"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$LayoutParams"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$PanelSlideListener"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$SimplePanelSlideListener"); - knownMetadata.add("android.support.v4.widget.ViewDragHelper"); - knownMetadata.add("android.support.v4.widget.ViewDragHelper$Callback"); - } - return knownMetadata; - } -} \ No newline at end of file diff --git a/src/src/com/tns/NativeScriptActivity.java b/src/src/com/tns/NativeScriptActivity.java index f9506713e..88ff353e2 100644 --- a/src/src/com/tns/NativeScriptActivity.java +++ b/src/src/com/tns/NativeScriptActivity.java @@ -1,3290 +1,3922 @@ package com.tns; -import android.util.Log; - -public class NativeScriptActivity extends android.app.Activity implements com.tns.NativeScriptHashCodeProvider { - public NativeScriptActivity() { - super(); - if (__ctorOverridden) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } +public class NativeScriptActivity extends android.app.Activity +{ + private final int objectId; + + public NativeScriptActivity() + { + com.tns.Platform.initInstance(this); + objectId = com.tns.Platform.getorCreateJavaObjectID(this); } - public void addContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) { - if ((__ho0 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "addContentView", params); - } else { + public void addContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) + { + if (__ho0) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "addContentView", args); + } + else + { super.addContentView(param_0, param_1); } } - public void applyOverrideConfiguration(android.content.res.Configuration param_0) { - if ((__ho0 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "applyOverrideConfiguration", params); - } else { + public void applyOverrideConfiguration(android.content.res.Configuration param_0) + { + if (__ho1) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "applyOverrideConfiguration", args); + } + else + { super.applyOverrideConfiguration(param_0); } } - protected void attachBaseContext(android.content.Context param_0) { - if ((__ho0 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "attachBaseContext", params); - } else { - super.attachBaseContext(param_0); + public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) + { + if (__ho2) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Boolean)com.tns.Platform.callJSMethod(this, "bindService", args); } - } - - public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) { - if ((__ho0 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "bindService", params); - } else { + else + { return super.bindService(param_0, param_1, param_2); } } - public int checkCallingOrSelfPermission(java.lang.String param_0) { - if ((__ho0 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", params); - } else { + public int checkCallingOrSelfPermission(java.lang.String param_0) + { + if (__ho3) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", args); + } + else + { return super.checkCallingOrSelfPermission(param_0); } } - public int checkCallingOrSelfUriPermission(android.net.Uri param_0, int param_1) { - if ((__ho0 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", params); - } else { + public int checkCallingOrSelfUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho4) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", args); + } + else + { return super.checkCallingOrSelfUriPermission(param_0, param_1); } } - public int checkCallingPermission(java.lang.String param_0) { - if ((__ho0 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingPermission", params); - } else { + public int checkCallingPermission(java.lang.String param_0) + { + if (__ho5) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingPermission", args); + } + else + { return super.checkCallingPermission(param_0); } } - public int checkCallingUriPermission(android.net.Uri param_0, int param_1) { - if ((__ho0 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", params); - } else { + public int checkCallingUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho6) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", args); + } + else + { return super.checkCallingUriPermission(param_0, param_1); } } - public int checkPermission(java.lang.String param_0, int param_1, int param_2) { - if ((__ho1 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Integer)com.tns.Platform.callJSMethod(this, "checkPermission", params); - } else { + public int checkPermission(java.lang.String param_0, int param_1, int param_2) + { + if (__ho7) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Integer)com.tns.Platform.callJSMethod(this, "checkPermission", args); + } + else + { return super.checkPermission(param_0, param_1, param_2); } } - public int checkUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3) { - - if ((__ho1 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", params); - } else { + public int checkUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3) + { + if (__ho8) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + } + else + { return super.checkUriPermission(param_0, param_1, param_2, param_3); } } - public int checkUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5) { - - if ((__ho1 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", params); - } else { + public int checkUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5) + { + if (__ho8) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + } + else + { return super.checkUriPermission(param_0, param_1, param_2, param_3, param_4, param_5); } } - public void clearWallpaper() throws java.io.IOException { - - if ((__ho1 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "clearWallpaper", params); - } else { + public void clearWallpaper() throws java.io.IOException + { + if (__ho9) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "clearWallpaper", args); + } + else + { super.clearWallpaper(); } } - protected java.lang.Object clone() throws java.lang.CloneNotSupportedException { - - if ((__ho1 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "clone", params); - } else { - return super.clone(); + public void closeContextMenu() + { + if (__ho10) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "closeContextMenu", args); } - } - - public void closeContextMenu() { - - if ((__ho1 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "closeContextMenu", params); - } else { + else + { super.closeContextMenu(); } } - public void closeOptionsMenu() { - - if ((__ho1 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "closeOptionsMenu", params); - } else { + public void closeOptionsMenu() + { + if (__ho11) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "closeOptionsMenu", args); + } + else + { super.closeOptionsMenu(); } } - public android.content.Context createConfigurationContext(android.content.res.Configuration param_0) { - - if ((__ho1 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createConfigurationContext", params); - } else { + public android.content.Context createConfigurationContext(android.content.res.Configuration param_0) + { + if (__ho12) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createConfigurationContext", args); + } + else + { return super.createConfigurationContext(param_0); } } - public android.content.Context createDisplayContext(android.view.Display param_0) { - - if ((__ho1 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createDisplayContext", params); - } else { + public android.content.Context createDisplayContext(android.view.Display param_0) + { + if (__ho13) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createDisplayContext", args); + } + else + { return super.createDisplayContext(param_0); } } - public android.content.Context createPackageContext(java.lang.String param_0, int param_1) throws android.content.pm.PackageManager.NameNotFoundException { - - if ((__ho2 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createPackageContext", params); - } else { + public android.content.Context createPackageContext(java.lang.String param_0, int param_1) throws android.content.pm.PackageManager.NameNotFoundException + { + if (__ho14) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createPackageContext", args); + } + else + { return super.createPackageContext(param_0, param_1); } } - public android.app.PendingIntent createPendingResult(int param_0, android.content.Intent param_1, int param_2) { - - if ((__ho2 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.app.PendingIntent)com.tns.Platform.callJSMethod(this, "createPendingResult", params); - } else { + public android.app.PendingIntent createPendingResult(int param_0, android.content.Intent param_1, int param_2) + { + if (__ho15) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.app.PendingIntent)com.tns.Platform.callJSMethod(this, "createPendingResult", args); + } + else + { return super.createPendingResult(param_0, param_1, param_2); } } - public java.lang.String[] databaseList() { - - if ((__ho2 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String[])com.tns.Platform.callJSMethod(this, "databaseList", params); - } else { + public java.lang.String[] databaseList() + { + if (__ho16) + { + Object[] args = null; + return (java.lang.String[])com.tns.Platform.callJSMethod(this, "databaseList", args); + } + else + { return super.databaseList(); } } - public boolean deleteDatabase(java.lang.String param_0) { - - if ((__ho2 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", params); - } else { + public boolean deleteDatabase(java.lang.String param_0) + { + if (__ho17) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", args); + } + else + { return super.deleteDatabase(param_0); } } - public boolean deleteFile(java.lang.String param_0) { - - if ((__ho2 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "deleteFile", params); - } else { + public boolean deleteFile(java.lang.String param_0) + { + if (__ho18) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "deleteFile", args); + } + else + { return super.deleteFile(param_0); } } - public boolean dispatchGenericMotionEvent(android.view.MotionEvent param_0) { - - if ((__ho2 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", params); - } else { + public boolean dispatchGenericMotionEvent(android.view.MotionEvent param_0) + { + if (__ho19) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", args); + } + else + { return super.dispatchGenericMotionEvent(param_0); } } - public boolean dispatchKeyEvent(android.view.KeyEvent param_0) { - - if ((__ho2 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", params); - } else { + public boolean dispatchKeyEvent(android.view.KeyEvent param_0) + { + if (__ho20) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", args); + } + else + { return super.dispatchKeyEvent(param_0); } } - public boolean dispatchKeyShortcutEvent(android.view.KeyEvent param_0) { - - if ((__ho2 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", params); - } else { + public boolean dispatchKeyShortcutEvent(android.view.KeyEvent param_0) + { + if (__ho21) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", args); + } + else + { return super.dispatchKeyShortcutEvent(param_0); } } - public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent param_0) { - - if ((__ho3 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", params); - } else { + public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent param_0) + { + if (__ho22) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", args); + } + else + { return super.dispatchPopulateAccessibilityEvent(param_0); } } - public boolean dispatchTouchEvent(android.view.MotionEvent param_0) { - - if ((__ho3 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", params); - } else { + public boolean dispatchTouchEvent(android.view.MotionEvent param_0) + { + if (__ho23) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", args); + } + else + { return super.dispatchTouchEvent(param_0); } } - public boolean dispatchTrackballEvent(android.view.MotionEvent param_0) { - - if ((__ho3 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", params); - } else { + public boolean dispatchTrackballEvent(android.view.MotionEvent param_0) + { + if (__ho24) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", args); + } + else + { return super.dispatchTrackballEvent(param_0); } } - public void dump(java.lang.String param_0, java.io.FileDescriptor param_1, java.io.PrintWriter param_2, java.lang.String[] param_3) { - - if ((__ho3 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "dump", params); - } else { + public void dump(java.lang.String param_0, java.io.FileDescriptor param_1, java.io.PrintWriter param_2, java.lang.String[] param_3) + { + if (__ho25) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "dump", args); + } + else + { super.dump(param_0, param_1, param_2, param_3); } } - public void enforceCallingOrSelfPermission(java.lang.String param_0, java.lang.String param_1) { - - if ((__ho3 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfPermission", params); - } else { + public void enforceCallingOrSelfPermission(java.lang.String param_0, java.lang.String param_1) + { + if (__ho26) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfPermission", args); + } + else + { super.enforceCallingOrSelfPermission(param_0, param_1); } } - public void enforceCallingOrSelfUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) { - - if ((__ho3 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfUriPermission", params); - } else { + public void enforceCallingOrSelfUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) + { + if (__ho27) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfUriPermission", args); + } + else + { super.enforceCallingOrSelfUriPermission(param_0, param_1, param_2); } } - public void enforceCallingPermission(java.lang.String param_0, java.lang.String param_1) { - - if ((__ho3 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "enforceCallingPermission", params); - } else { + public void enforceCallingPermission(java.lang.String param_0, java.lang.String param_1) + { + if (__ho28) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "enforceCallingPermission", args); + } + else + { super.enforceCallingPermission(param_0, param_1); } } - public void enforceCallingUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) { - - if ((__ho3 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "enforceCallingUriPermission", params); - } else { + public void enforceCallingUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) + { + if (__ho29) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "enforceCallingUriPermission", args); + } + else + { super.enforceCallingUriPermission(param_0, param_1, param_2); } } - public void enforcePermission(java.lang.String param_0, int param_1, int param_2, java.lang.String param_3) { - - if ((__ho4 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "enforcePermission", params); - } else { + public void enforcePermission(java.lang.String param_0, int param_1, int param_2, java.lang.String param_3) + { + if (__ho30) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "enforcePermission", args); + } + else + { super.enforcePermission(param_0, param_1, param_2, param_3); } } - public void enforceUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3, java.lang.String param_4) { - - if ((__ho4 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[5]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - com.tns.Platform.callJSMethod(this, "enforceUriPermission", params); - } else { - super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4); + public void enforceUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5, java.lang.String param_6) + { + if (__ho31) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "enforceUriPermission", args); + } + else + { + super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } } - public void enforceUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5, java.lang.String param_6) { - - if ((__ho4 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "enforceUriPermission", params); - } else { - super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + public void enforceUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3, java.lang.String param_4) + { + if (__ho31) + { + Object[] args = new Object[5]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + com.tns.Platform.callJSMethod(this, "enforceUriPermission", args); + } + else + { + super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4); } } - public boolean equals(java.lang.Object param_0) { - - if ((__ho4 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "equals", params); - } else { + public boolean equals(java.lang.Object param_0) + { + if (__ho32) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "equals", args); + } + else + { return super.equals(param_0); } } - public java.lang.String[] fileList() { - - if ((__ho4 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String[])com.tns.Platform.callJSMethod(this, "fileList", params); - } else { + public java.lang.String[] fileList() + { + if (__ho33) + { + Object[] args = null; + return (java.lang.String[])com.tns.Platform.callJSMethod(this, "fileList", args); + } + else + { return super.fileList(); } } - protected void finalize() throws java.lang.Throwable { - - if ((__ho4 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finalize", params); - } else { - super.finalize(); + public android.view.View findViewById(int param_0) + { + if (__ho34) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.View)com.tns.Platform.callJSMethod(this, "findViewById", args); } - } - - public android.view.View findViewById(int param_0) { - - if ((__ho4 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.View)com.tns.Platform.callJSMethod(this, "findViewById", params); - } else { + else + { return super.findViewById(param_0); } } - public void finish() { - - if ((__ho4 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finish", params); - } else { + public void finish() + { + if (__ho35) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "finish", args); + } + else + { super.finish(); } } - public void finishActivity(int param_0) { - - if ((__ho4 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "finishActivity", params); - } else { + public void finishActivity(int param_0) + { + if (__ho36) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "finishActivity", args); + } + else + { super.finishActivity(param_0); } } - public void finishActivityFromChild(android.app.Activity param_0, int param_1) { - - if ((__ho5 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "finishActivityFromChild", params); - } else { + public void finishActivityFromChild(android.app.Activity param_0, int param_1) + { + if (__ho37) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "finishActivityFromChild", args); + } + else + { super.finishActivityFromChild(param_0, param_1); } } - public void finishAffinity() { - - if ((__ho5 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finishAffinity", params); - } else { + public void finishAffinity() + { + if (__ho38) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "finishAffinity", args); + } + else + { super.finishAffinity(); } } - public void finishFromChild(android.app.Activity param_0) { - - if ((__ho5 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "finishFromChild", params); - } else { + public void finishFromChild(android.app.Activity param_0) + { + if (__ho39) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "finishFromChild", args); + } + else + { super.finishFromChild(param_0); } } - public android.app.ActionBar getActionBar() { - - if ((__ho5 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.app.ActionBar)com.tns.Platform.callJSMethod(this, "getActionBar", params); - } else { + public android.app.ActionBar getActionBar() + { + if (__ho40) + { + Object[] args = null; + return (android.app.ActionBar)com.tns.Platform.callJSMethod(this, "getActionBar", args); + } + else + { return super.getActionBar(); } } - public android.content.Context getApplicationContext() { - - if ((__ho5 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "getApplicationContext", params); - } else { + public android.content.Context getApplicationContext() + { + if (__ho41) + { + Object[] args = null; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "getApplicationContext", args); + } + else + { return super.getApplicationContext(); } } - public android.content.pm.ApplicationInfo getApplicationInfo() { - if ((__ho5 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.content.pm.ApplicationInfo)com.tns.Platform.callJSMethod(this, "getApplicationInfo", params); - } else { + public android.content.pm.ApplicationInfo getApplicationInfo() + { + if (__ho42) + { + Object[] args = null; + return (android.content.pm.ApplicationInfo)com.tns.Platform.callJSMethod(this, "getApplicationInfo", args); + } + else + { return super.getApplicationInfo(); } } - public android.content.res.AssetManager getAssets() { - - if ((__ho5 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.AssetManager)com.tns.Platform.callJSMethod(this, "getAssets", params); - } else { + public android.content.res.AssetManager getAssets() + { + if (__ho43) + { + Object[] args = null; + return (android.content.res.AssetManager)com.tns.Platform.callJSMethod(this, "getAssets", args); + } + else + { return super.getAssets(); } } - public android.content.Context getBaseContext() { - if ((__ho5 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "getBaseContext", params); - } else { + public android.content.Context getBaseContext() + { + if (__ho44) + { + Object[] args = null; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "getBaseContext", args); + } + else + { return super.getBaseContext(); } } - public java.io.File getCacheDir() { - - if ((__ho6 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getCacheDir", params); - } else { + public java.io.File getCacheDir() + { + if (__ho45) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getCacheDir", args); + } + else + { return super.getCacheDir(); } } - public android.content.ComponentName getCallingActivity() { - - if ((__ho6 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getCallingActivity", params); - } else { + public android.content.ComponentName getCallingActivity() + { + if (__ho46) + { + Object[] args = null; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getCallingActivity", args); + } + else + { return super.getCallingActivity(); } } - public java.lang.String getCallingPackage() { - - if ((__ho6 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getCallingPackage", params); - } else { + public java.lang.String getCallingPackage() + { + if (__ho47) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getCallingPackage", args); + } + else + { return super.getCallingPackage(); } } - public int getChangingConfigurations() { - - if ((__ho6 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", params); - } else { + public int getChangingConfigurations() + { + if (__ho48) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", args); + } + else + { return super.getChangingConfigurations(); } } - public java.lang.ClassLoader getClassLoader() { - - if ((__ho6 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (java.lang.ClassLoader)com.tns.Platform.callJSMethod(this, "getClassLoader", params); - } else { - return super.getClassLoader(); + public java.lang.ClassLoader getClassLoader() + { + if (__ho49) + { + Object[] args = null; + return (java.lang.ClassLoader)com.tns.Platform.callJSMethod(this, "getClassLoader", args); + } + else + { + return super.getClassLoader(); } } - public android.content.ComponentName getComponentName() { - - if ((__ho6 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getComponentName", params); - } else { + public android.content.ComponentName getComponentName() + { + if (__ho50) + { + Object[] args = null; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getComponentName", args); + } + else + { return super.getComponentName(); } } - public android.content.ContentResolver getContentResolver() { - - if ((__ho6 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.ContentResolver)com.tns.Platform.callJSMethod(this, "getContentResolver", params); - } else { + public android.content.ContentResolver getContentResolver() + { + if (__ho51) + { + Object[] args = null; + return (android.content.ContentResolver)com.tns.Platform.callJSMethod(this, "getContentResolver", args); + } + else + { return super.getContentResolver(); } } - public android.view.View getCurrentFocus() { - - if ((__ho6 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.view.View)com.tns.Platform.callJSMethod(this, "getCurrentFocus", params); - } else { + public android.view.View getCurrentFocus() + { + if (__ho52) + { + Object[] args = null; + return (android.view.View)com.tns.Platform.callJSMethod(this, "getCurrentFocus", args); + } + else + { return super.getCurrentFocus(); } } - public java.io.File getDatabasePath(java.lang.String param_0) { - - if ((__ho7 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getDatabasePath", params); - } else { + public java.io.File getDatabasePath(java.lang.String param_0) + { + if (__ho53) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getDatabasePath", args); + } + else + { return super.getDatabasePath(param_0); } } - public java.io.File getDir(java.lang.String param_0, int param_1) { - - if ((__ho7 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getDir", params); - } else { + public java.io.File getDir(java.lang.String param_0, int param_1) + { + if (__ho54) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getDir", args); + } + else + { return super.getDir(param_0, param_1); } } - public java.io.File getExternalCacheDir() { - - if ((__ho7 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalCacheDir", params); - } else { + public java.io.File getExternalCacheDir() + { + if (__ho55) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalCacheDir", args); + } + else + { return super.getExternalCacheDir(); } } - public java.io.File getExternalFilesDir(java.lang.String param_0) { - - if ((__ho7 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalFilesDir", params); - } else { + public java.io.File getExternalFilesDir(java.lang.String param_0) + { + if (__ho56) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalFilesDir", args); + } + else + { return super.getExternalFilesDir(param_0); } } - public java.io.File getFileStreamPath(java.lang.String param_0) { - - if ((__ho7 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getFileStreamPath", params); - } else { + public java.io.File getFileStreamPath(java.lang.String param_0) + { + if (__ho57) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getFileStreamPath", args); + } + else + { return super.getFileStreamPath(param_0); } } - public java.io.File getFilesDir() { - - if ((__ho7 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getFilesDir", params); - } else { + public java.io.File getFilesDir() + { + if (__ho58) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getFilesDir", args); + } + else + { return super.getFilesDir(); } } - public android.app.FragmentManager getFragmentManager() { - - if ((__ho7 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.app.FragmentManager)com.tns.Platform.callJSMethod(this, "getFragmentManager", params); - } else { + public android.app.FragmentManager getFragmentManager() + { + if (__ho59) + { + Object[] args = null; + return (android.app.FragmentManager)com.tns.Platform.callJSMethod(this, "getFragmentManager", args); + } + else + { return super.getFragmentManager(); } } - public android.content.Intent getIntent() { - - if ((__ho7 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getIntent", params); - } else { + public android.content.Intent getIntent() + { + if (__ho60) + { + Object[] args = null; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getIntent", args); + } + else + { return super.getIntent(); } } - public java.lang.Object getLastNonConfigurationInstance() { - - if ((__ho8 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getLastNonConfigurationInstance", params); - } else { + public java.lang.Object getLastNonConfigurationInstance() + { + if (__ho61) + { + Object[] args = null; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getLastNonConfigurationInstance", args); + } + else + { return super.getLastNonConfigurationInstance(); } } - public android.view.LayoutInflater getLayoutInflater() { - - if ((__ho8 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.view.LayoutInflater)com.tns.Platform.callJSMethod(this, "getLayoutInflater", params); - } else { + public android.view.LayoutInflater getLayoutInflater() + { + if (__ho62) + { + Object[] args = null; + return (android.view.LayoutInflater)com.tns.Platform.callJSMethod(this, "getLayoutInflater", args); + } + else + { return super.getLayoutInflater(); } } - public android.app.LoaderManager getLoaderManager() { - - if ((__ho8 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (android.app.LoaderManager)com.tns.Platform.callJSMethod(this, "getLoaderManager", params); - } else { + public android.app.LoaderManager getLoaderManager() + { + if (__ho63) + { + Object[] args = null; + return (android.app.LoaderManager)com.tns.Platform.callJSMethod(this, "getLoaderManager", args); + } + else + { return super.getLoaderManager(); } } - public java.lang.String getLocalClassName() { - - if ((__ho8 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getLocalClassName", params); - } else { + public java.lang.String getLocalClassName() + { + if (__ho64) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getLocalClassName", args); + } + else + { return super.getLocalClassName(); } } - public android.os.Looper getMainLooper() { - - if ((__ho8 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (android.os.Looper)com.tns.Platform.callJSMethod(this, "getMainLooper", params); - } else { + public android.os.Looper getMainLooper() + { + if (__ho65) + { + Object[] args = null; + return (android.os.Looper)com.tns.Platform.callJSMethod(this, "getMainLooper", args); + } + else + { return super.getMainLooper(); } } - public android.view.MenuInflater getMenuInflater() { - - if ((__ho8 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.view.MenuInflater)com.tns.Platform.callJSMethod(this, "getMenuInflater", params); - } else { + public android.view.MenuInflater getMenuInflater() + { + if (__ho66) + { + Object[] args = null; + return (android.view.MenuInflater)com.tns.Platform.callJSMethod(this, "getMenuInflater", args); + } + else + { return super.getMenuInflater(); } } - public java.io.File getObbDir() { - - if ((__ho8 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getObbDir", params); - } else { + public java.io.File getObbDir() + { + if (__ho67) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getObbDir", args); + } + else + { return super.getObbDir(); } } - public java.lang.String getPackageCodePath() { - - if ((__ho8 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageCodePath", params); - } else { + public java.lang.String getPackageCodePath() + { + if (__ho68) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageCodePath", args); + } + else + { return super.getPackageCodePath(); } } - public android.content.pm.PackageManager getPackageManager() { - - if ((__ho9 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (android.content.pm.PackageManager)com.tns.Platform.callJSMethod(this, "getPackageManager", params); - } else { + public android.content.pm.PackageManager getPackageManager() + { + if (__ho69) + { + Object[] args = null; + return (android.content.pm.PackageManager)com.tns.Platform.callJSMethod(this, "getPackageManager", args); + } + else + { return super.getPackageManager(); } } - public java.lang.String getPackageName() { - - if ((__ho9 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageName", params); - } else { + public java.lang.String getPackageName() + { + if (__ho70) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageName", args); + } + else + { return super.getPackageName(); } } - public java.lang.String getPackageResourcePath() { - - if ((__ho9 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageResourcePath", params); - } else { + public java.lang.String getPackageResourcePath() + { + if (__ho71) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageResourcePath", args); + } + else + { return super.getPackageResourcePath(); } } - public android.content.Intent getParentActivityIntent() { - - if ((__ho9 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getParentActivityIntent", params); - } else { + public android.content.Intent getParentActivityIntent() + { + if (__ho72) + { + Object[] args = null; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getParentActivityIntent", args); + } + else + { return super.getParentActivityIntent(); } } - public android.content.SharedPreferences getPreferences(int param_0) { - - if ((__ho9 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getPreferences", params); - } else { + public android.content.SharedPreferences getPreferences(int param_0) + { + if (__ho73) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getPreferences", args); + } + else + { return super.getPreferences(param_0); } } - public int getRequestedOrientation() { - - if ((__ho9 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", params); - } else { + public int getRequestedOrientation() + { + if (__ho74) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", args); + } + else + { return super.getRequestedOrientation(); } } - public android.content.res.Resources getResources() { - if ((__ho9 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.Resources)com.tns.Platform.callJSMethod(this, "getResources", params); - } else { + public android.content.res.Resources getResources() + { + if (__ho75) + { + Object[] args = null; + return (android.content.res.Resources)com.tns.Platform.callJSMethod(this, "getResources", args); + } + else + { return super.getResources(); } } - public android.content.SharedPreferences getSharedPreferences(java.lang.String param_0, int param_1) { - - if ((__ho9 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getSharedPreferences", params); - } else { + public android.content.SharedPreferences getSharedPreferences(java.lang.String param_0, int param_1) + { + if (__ho76) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getSharedPreferences", args); + } + else + { return super.getSharedPreferences(param_0, param_1); } } - public java.lang.Object getSystemService(java.lang.String param_0) { - if ((__ho10 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getSystemService", params); - } else { + public java.lang.Object getSystemService(java.lang.String param_0) + { + if (__ho77) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getSystemService", args); + } + else + { return super.getSystemService(param_0); } } - public int getTaskId() { - - if ((__ho10 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getTaskId", params); - } else { + public int getTaskId() + { + if (__ho78) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "getTaskId", args); + } + else + { return super.getTaskId(); } } - public android.content.res.Resources.Theme getTheme() { - - if ((__ho10 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.Resources.Theme)com.tns.Platform.callJSMethod(this, "getTheme", params); - } else { + public android.content.res.Resources.Theme getTheme() + { + if (__ho79) + { + Object[] args = null; + return (android.content.res.Resources.Theme)com.tns.Platform.callJSMethod(this, "getTheme", args); + } + else + { return super.getTheme(); } } - public android.graphics.drawable.Drawable getWallpaper() { - - if ((__ho10 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "getWallpaper", params); - } else { + public android.graphics.drawable.Drawable getWallpaper() + { + if (__ho80) + { + Object[] args = null; + return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "getWallpaper", args); + } + else + { return super.getWallpaper(); } } - public int getWallpaperDesiredMinimumHeight() { - - if ((__ho10 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", params); - } else { + public int getWallpaperDesiredMinimumHeight() + { + if (__ho81) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", args); + } + else + { return super.getWallpaperDesiredMinimumHeight(); } } - public int getWallpaperDesiredMinimumWidth() { - - if ((__ho10 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", params); - } else { + public int getWallpaperDesiredMinimumWidth() + { + if (__ho82) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", args); + } + else + { return super.getWallpaperDesiredMinimumWidth(); } } - public android.view.Window getWindow() { - - if ((__ho10 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.view.Window)com.tns.Platform.callJSMethod(this, "getWindow", params); - } else { + public android.view.Window getWindow() + { + if (__ho83) + { + Object[] args = null; + return (android.view.Window)com.tns.Platform.callJSMethod(this, "getWindow", args); + } + else + { return super.getWindow(); } } - public android.view.WindowManager getWindowManager() { - - if ((__ho10 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.view.WindowManager)com.tns.Platform.callJSMethod(this, "getWindowManager", params); - } else { + public android.view.WindowManager getWindowManager() + { + if (__ho84) + { + Object[] args = null; + return (android.view.WindowManager)com.tns.Platform.callJSMethod(this, "getWindowManager", args); + } + else + { return super.getWindowManager(); } } - public void grantUriPermission(java.lang.String param_0, android.net.Uri param_1, int param_2) { - - if ((__ho11 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "grantUriPermission", params); - } else { + public void grantUriPermission(java.lang.String param_0, android.net.Uri param_1, int param_2) + { + if (__ho85) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "grantUriPermission", args); + } + else + { super.grantUriPermission(param_0, param_1, param_2); } } - public boolean hasWindowFocus() { - - if ((__ho11 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", params); - } else { + public boolean hasWindowFocus() + { + if (__ho86) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", args); + } + else + { return super.hasWindowFocus(); } } - public int hashCode() { - - if ((__ho11 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "hashCode", params); - } else { + public int hashCode() + { + if (__ho87) + { + Object[] args = null; + return (Integer)com.tns.Platform.callJSMethod(this, "hashCode", args); + } + else + { return super.hashCode(); } } - public void invalidateOptionsMenu() { - - if ((__ho11 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "invalidateOptionsMenu", params); - } else { + public void invalidateOptionsMenu() + { + if (__ho88) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "invalidateOptionsMenu", args); + } + else + { super.invalidateOptionsMenu(); } } - public boolean isChangingConfigurations() { - - if ((__ho11 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", params); - } else { + public boolean isChangingConfigurations() + { + if (__ho89) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", args); + } + else + { return super.isChangingConfigurations(); } } - public boolean isDestroyed() { - - if ((__ho11 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", params); - } else { + public boolean isDestroyed() + { + if (__ho90) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", args); + } + else + { return super.isDestroyed(); } } - public boolean isFinishing() { - - if ((__ho11 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isFinishing", params); - } else { + public boolean isFinishing() + { + if (__ho91) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "isFinishing", args); + } + else + { return super.isFinishing(); } } - public boolean isRestricted() { - - if ((__ho11 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isRestricted", params); - } else { + public boolean isRestricted() + { + if (__ho92) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "isRestricted", args); + } + else + { return super.isRestricted(); } } - public boolean isTaskRoot() { - - if ((__ho12 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", params); - } else { + public boolean isTaskRoot() + { + if (__ho93) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", args); + } + else + { return super.isTaskRoot(); } } - public boolean moveTaskToBack(boolean param_0) { - - if ((__ho12 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", params); - } else { + public boolean moveTaskToBack(boolean param_0) + { + if (__ho94) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", args); + } + else + { return super.moveTaskToBack(param_0); } } - public boolean navigateUpTo(android.content.Intent param_0) { - - if ((__ho12 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", params); - } else { + public boolean navigateUpTo(android.content.Intent param_0) + { + if (__ho95) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", args); + } + else + { return super.navigateUpTo(param_0); } } - public boolean navigateUpToFromChild(android.app.Activity param_0, android.content.Intent param_1) { - - if ((__ho12 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", params); - } else { + public boolean navigateUpToFromChild(android.app.Activity param_0, android.content.Intent param_1) + { + if (__ho96) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", args); + } + else + { return super.navigateUpToFromChild(param_0, param_1); } } - public void onActionModeFinished(android.view.ActionMode param_0) { - - if ((__ho12 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onActionModeFinished", params); - } else { + public void onActionModeFinished(android.view.ActionMode param_0) + { + if (__ho97) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onActionModeFinished", args); + } + else + { super.onActionModeFinished(param_0); } } - public void onActionModeStarted(android.view.ActionMode param_0) { - - if ((__ho12 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onActionModeStarted", params); - } else { + public void onActionModeStarted(android.view.ActionMode param_0) + { + if (__ho98) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onActionModeStarted", args); + } + else + { super.onActionModeStarted(param_0); } } - protected void onActivityResult(int param_0, int param_1, android.content.Intent param_2) { - - if ((__ho12 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onActivityResult", params); - } else { + protected void onActivityResult(int param_0, int param_1, android.content.Intent param_2) + { + if (__ho99) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onActivityResult", args); + } + else + { super.onActivityResult(param_0, param_1, param_2); } } - protected void onApplyThemeResource(android.content.res.Resources.Theme param_0, int param_1, boolean param_2) { - if ((__ho12 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onApplyThemeResource", params); - } else { + protected void onApplyThemeResource(android.content.res.Resources.Theme param_0, int param_1, boolean param_2) + { + if (__ho100) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onApplyThemeResource", args); + } + else + { super.onApplyThemeResource(param_0, param_1, param_2); } } - public void onAttachFragment(android.app.Fragment param_0) { - - if ((__ho13 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onAttachFragment", params); - } else { + public void onAttachFragment(android.app.Fragment param_0) + { + if (__ho101) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onAttachFragment", args); + } + else + { super.onAttachFragment(param_0); } } - public void onAttachedToWindow() { - - if ((__ho13 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onAttachedToWindow", params); - } else { + public void onAttachedToWindow() + { + if (__ho102) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onAttachedToWindow", args); + } + else + { super.onAttachedToWindow(); } } - public void onBackPressed() { - - if ((__ho13 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onBackPressed", params); - } else { + public void onBackPressed() + { + if (__ho103) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onBackPressed", args); + } + else + { super.onBackPressed(); } } - protected void onChildTitleChanged(android.app.Activity param_0, java.lang.CharSequence param_1) { - - if ((__ho13 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onChildTitleChanged", params); - } else { + protected void onChildTitleChanged(android.app.Activity param_0, java.lang.CharSequence param_1) + { + if (__ho104) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onChildTitleChanged", args); + } + else + { super.onChildTitleChanged(param_0, param_1); } } - public void onConfigurationChanged(android.content.res.Configuration param_0) { - - if ((__ho13 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onConfigurationChanged", params); - } else { + public void onConfigurationChanged(android.content.res.Configuration param_0) + { + if (__ho105) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onConfigurationChanged", args); + } + else + { super.onConfigurationChanged(param_0); } } - public void onContentChanged() { - - if ((__ho13 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onContentChanged", params); - } else { + public void onContentChanged() + { + if (__ho106) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onContentChanged", args); + } + else + { super.onContentChanged(); } } - public boolean onContextItemSelected(android.view.MenuItem param_0) { - - if ((__ho13 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", params); - } else { + public boolean onContextItemSelected(android.view.MenuItem param_0) + { + if (__ho107) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", args); + } + else + { return super.onContextItemSelected(param_0); } } - public void onContextMenuClosed(android.view.Menu param_0) { - - if ((__ho13 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onContextMenuClosed", params); - } else { + public void onContextMenuClosed(android.view.Menu param_0) + { + if (__ho108) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onContextMenuClosed", args); + } + else + { super.onContextMenuClosed(param_0); } } + + private native String[] getMethodOverrides(int objectId, Object[] packagesArgs); - protected void onCreate(android.os.Bundle param_0) { - if(ErrorReport.HasApplicationCreateError) + protected void onCreate(android.os.Bundle param_0) + { + Object[] packagesArgs = Platform.packageArgs(this); + String[] methodOverrides = getMethodOverrides(objectId, packagesArgs); + setMethodOverrides(methodOverrides); + + if (__ho109) { - super.onCreate(param_0); - this.finish(); - return; + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onCreate", args); + android.util.Log.d(com.tns.Platform.DEFAULT_LOG_TAG, "NativeScriptActivity.onCreate called"); } - - if (!__initialized) { - __initialized = true; - - Log.d(Platform.DEFAULT_LOG_TAG, "Creating Activity with intent: " + super.getIntent().toString() + " action:" + super.getIntent().getAction()); - - if (BuildConfig.DEBUG && super.getIntent().getAction() == null) - { - super.getIntent().setAction(android.content.Intent.ACTION_MAIN); - } - com.tns.Platform.initInstance(this, super.getIntent()); - } - if ((__ho14 & (1 << 0)) > 0) { - boolean isErrorReport = ErrorReport.hasIntent(this.getIntent()); - if (isErrorReport) - { - super.onCreate(param_0); - new ErrorReport(this).buildUI(); - } - else - { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onCreate", params); - } - } else { + else + { super.onCreate(param_0); } - } - public void onCreateContextMenu(android.view.ContextMenu param_0, android.view.View param_1, android.view.ContextMenu.ContextMenuInfo param_2) { - - if ((__ho14 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onCreateContextMenu", params); - } else { + public void onCreateContextMenu(android.view.ContextMenu param_0, android.view.View param_1, android.view.ContextMenu.ContextMenuInfo param_2) + { + if (__ho110) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onCreateContextMenu", args); + } + else + { super.onCreateContextMenu(param_0, param_1, param_2); } } - public java.lang.CharSequence onCreateDescription() { - - if ((__ho14 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.CharSequence)com.tns.Platform.callJSMethod(this, "onCreateDescription", params); - } else { + public java.lang.CharSequence onCreateDescription() + { + if (__ho111) + { + Object[] args = null; + return (java.lang.CharSequence)com.tns.Platform.callJSMethod(this, "onCreateDescription", args); + } + else + { return super.onCreateDescription(); } } - protected android.app.Dialog onCreateDialog(int param_0) { - - if ((__ho14 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", params); - } else { - return super.onCreateDialog(param_0); + protected android.app.Dialog onCreateDialog(int param_0, android.os.Bundle param_1) + { + if (__ho112) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", args); + } + else + { + return super.onCreateDialog(param_0, param_1); } } - protected android.app.Dialog onCreateDialog(int param_0, android.os.Bundle param_1) { - - if ((__ho14 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", params); - } else { - return super.onCreateDialog(param_0, param_1); + protected android.app.Dialog onCreateDialog(int param_0) + { + if (__ho112) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", args); + } + else + { + return super.onCreateDialog(param_0); } } - public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder param_0) { - - if ((__ho14 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onCreateNavigateUpTaskStack", params); - } else { + public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder param_0) + { + if (__ho113) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onCreateNavigateUpTaskStack", args); + } + else + { super.onCreateNavigateUpTaskStack(param_0); } } - public boolean onCreateOptionsMenu(android.view.Menu param_0) { - - if ((__ho14 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", params); - } else { + public boolean onCreateOptionsMenu(android.view.Menu param_0) + { + if (__ho114) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", args); + } + else + { return super.onCreateOptionsMenu(param_0); } } - public boolean onCreatePanelMenu(int param_0, android.view.Menu param_1) { - - if ((__ho14 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", params); - } else { + public boolean onCreatePanelMenu(int param_0, android.view.Menu param_1) + { + if (__ho115) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", args); + } + else + { return super.onCreatePanelMenu(param_0, param_1); } } - public android.view.View onCreatePanelView(int param_0) { - - if ((__ho14 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreatePanelView", params); - } else { + public android.view.View onCreatePanelView(int param_0) + { + if (__ho116) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreatePanelView", args); + } + else + { return super.onCreatePanelView(param_0); } } - public boolean onCreateThumbnail(android.graphics.Bitmap param_0, android.graphics.Canvas param_1) { - - if ((__ho15 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", params); - } else { + public boolean onCreateThumbnail(android.graphics.Bitmap param_0, android.graphics.Canvas param_1) + { + if (__ho117) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", args); + } + else + { return super.onCreateThumbnail(param_0, param_1); } } - public android.view.View onCreateView(java.lang.String param_0, android.content.Context param_1, android.util.AttributeSet param_2) { - - if ((__ho15 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", params); - } else { + public android.view.View onCreateView(java.lang.String param_0, android.content.Context param_1, android.util.AttributeSet param_2) + { + if (__ho118) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", args); + } + else + { return super.onCreateView(param_0, param_1, param_2); } } - public android.view.View onCreateView(android.view.View param_0, java.lang.String param_1, android.content.Context param_2, android.util.AttributeSet param_3) { - - if ((__ho15 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", params); - } else { + public android.view.View onCreateView(android.view.View param_0, java.lang.String param_1, android.content.Context param_2, android.util.AttributeSet param_3) + { + if (__ho118) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", args); + } + else + { return super.onCreateView(param_0, param_1, param_2, param_3); } } - protected void onDestroy() { - - if ((__ho15 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onDestroy", params); - } else { + protected void onDestroy() + { + if (__ho119) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onDestroy", args); + } + else + { super.onDestroy(); } + // TODO: remove from com.tns.Platform.strongInstances } - public void onDetachedFromWindow() { - - if ((__ho15 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onDetachedFromWindow", params); - } else { + public void onDetachedFromWindow() + { + if (__ho120) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onDetachedFromWindow", args); + } + else + { super.onDetachedFromWindow(); } } - public boolean onGenericMotionEvent(android.view.MotionEvent param_0) { - - if ((__ho15 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", params); - } else { + public boolean onGenericMotionEvent(android.view.MotionEvent param_0) + { + if (__ho121) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", args); + } + else + { return super.onGenericMotionEvent(param_0); } } - public boolean onKeyDown(int param_0, android.view.KeyEvent param_1) { - - if ((__ho15 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", params); - } else { + public boolean onKeyDown(int param_0, android.view.KeyEvent param_1) + { + if (__ho122) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", args); + } + else + { return super.onKeyDown(param_0, param_1); } } - public boolean onKeyLongPress(int param_0, android.view.KeyEvent param_1) { - - if ((__ho15 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", params); - } else { + public boolean onKeyLongPress(int param_0, android.view.KeyEvent param_1) + { + if (__ho123) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", args); + } + else + { return super.onKeyLongPress(param_0, param_1); } } - public boolean onKeyMultiple(int param_0, int param_1, android.view.KeyEvent param_2) { - - if ((__ho15 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", params); - } else { + public boolean onKeyMultiple(int param_0, int param_1, android.view.KeyEvent param_2) + { + if (__ho124) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", args); + } + else + { return super.onKeyMultiple(param_0, param_1, param_2); } } - public boolean onKeyShortcut(int param_0, android.view.KeyEvent param_1) { - - if ((__ho16 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", params); - } else { + public boolean onKeyShortcut(int param_0, android.view.KeyEvent param_1) + { + if (__ho125) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", args); + } + else + { return super.onKeyShortcut(param_0, param_1); } } - public boolean onKeyUp(int param_0, android.view.KeyEvent param_1) { - - if ((__ho16 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", params); - } else { + public boolean onKeyUp(int param_0, android.view.KeyEvent param_1) + { + if (__ho126) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", args); + } + else + { return super.onKeyUp(param_0, param_1); } } - public void onLowMemory() { - - if ((__ho16 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onLowMemory", params); - } else { + public void onLowMemory() + { + if (__ho127) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onLowMemory", args); + } + else + { super.onLowMemory(); } } - public boolean onMenuItemSelected(int param_0, android.view.MenuItem param_1) { - - if ((__ho16 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", params); - } else { + public boolean onMenuItemSelected(int param_0, android.view.MenuItem param_1) + { + if (__ho128) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", args); + } + else + { return super.onMenuItemSelected(param_0, param_1); } } - public boolean onMenuOpened(int param_0, android.view.Menu param_1) { - - if ((__ho16 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", params); - } else { + public boolean onMenuOpened(int param_0, android.view.Menu param_1) + { + if (__ho129) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", args); + } + else + { return super.onMenuOpened(param_0, param_1); } } - public boolean onNavigateUp() { - - if ((__ho16 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", params); - } else { + public boolean onNavigateUp() + { + if (__ho130) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", args); + } + else + { return super.onNavigateUp(); } } - public boolean onNavigateUpFromChild(android.app.Activity param_0) { - - if ((__ho16 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", params); - } else { + public boolean onNavigateUpFromChild(android.app.Activity param_0) + { + if (__ho131) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", args); + } + else + { return super.onNavigateUpFromChild(param_0); } } - protected void onNewIntent(android.content.Intent param_0) { - - if ((__ho16 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onNewIntent", params); - } else { + protected void onNewIntent(android.content.Intent param_0) + { + if (__ho132) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onNewIntent", args); + } + else + { super.onNewIntent(param_0); } } - public boolean onOptionsItemSelected(android.view.MenuItem param_0) { - - if ((__ho17 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", params); - } else { + public boolean onOptionsItemSelected(android.view.MenuItem param_0) + { + if (__ho133) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", args); + } + else + { return super.onOptionsItemSelected(param_0); } } - public void onOptionsMenuClosed(android.view.Menu param_0) { - - if ((__ho17 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onOptionsMenuClosed", params); - } else { + public void onOptionsMenuClosed(android.view.Menu param_0) + { + if (__ho134) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onOptionsMenuClosed", args); + } + else + { super.onOptionsMenuClosed(param_0); } } - public void onPanelClosed(int param_0, android.view.Menu param_1) { - - if ((__ho17 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onPanelClosed", params); - } else { + public void onPanelClosed(int param_0, android.view.Menu param_1) + { + if (__ho135) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onPanelClosed", args); + } + else + { super.onPanelClosed(param_0, param_1); } } - protected void onPause() { - - if ((__ho17 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onPause", params); - } else { + protected void onPause() + { + if (__ho136) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onPause", args); + } + else + { super.onPause(); } } - protected void onPostCreate(android.os.Bundle param_0) { - - if ((__ho17 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onPostCreate", params); - } else { + protected void onPostCreate(android.os.Bundle param_0) + { + if (__ho137) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onPostCreate", args); + } + else + { super.onPostCreate(param_0); } } - protected void onPostResume() { - - if ((__ho17 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onPostResume", params); - } else { + protected void onPostResume() + { + if (__ho138) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onPostResume", args); + } + else + { super.onPostResume(); } } - protected void onPrepareDialog(int param_0, android.app.Dialog param_1, android.os.Bundle param_2) { - - if ((__ho17 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onPrepareDialog", params); - } else { - super.onPrepareDialog(param_0, param_1, param_2); + protected void onPrepareDialog(int param_0, android.app.Dialog param_1) + { + if (__ho139) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onPrepareDialog", args); + } + else + { + super.onPrepareDialog(param_0, param_1); } } - protected void onPrepareDialog(int param_0, android.app.Dialog param_1) { - - if ((__ho17 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onPrepareDialog", params); - } else { - super.onPrepareDialog(param_0, param_1); + protected void onPrepareDialog(int param_0, android.app.Dialog param_1, android.os.Bundle param_2) + { + if (__ho139) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onPrepareDialog", args); + } + else + { + super.onPrepareDialog(param_0, param_1, param_2); } } - public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder param_0) { - - if ((__ho17 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onPrepareNavigateUpTaskStack", params); - } else { + public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder param_0) + { + if (__ho140) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onPrepareNavigateUpTaskStack", args); + } + else + { super.onPrepareNavigateUpTaskStack(param_0); } } - public boolean onPrepareOptionsMenu(android.view.Menu param_0) { - - if ((__ho18 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", params); - } else { + public boolean onPrepareOptionsMenu(android.view.Menu param_0) + { + if (__ho141) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", args); + } + else + { return super.onPrepareOptionsMenu(param_0); } } - public boolean onPreparePanel(int param_0, android.view.View param_1, android.view.Menu param_2) { - - if ((__ho18 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", params); - } else { + public boolean onPreparePanel(int param_0, android.view.View param_1, android.view.Menu param_2) + { + if (__ho142) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", args); + } + else + { return super.onPreparePanel(param_0, param_1, param_2); } } - protected void onRestart() { - - if ((__ho18 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onRestart", params); - } else { + protected void onRestart() + { + if (__ho143) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onRestart", args); + } + else + { super.onRestart(); } } - protected void onRestoreInstanceState(android.os.Bundle param_0) { - - if ((__ho18 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onRestoreInstanceState", params); - } else { + protected void onRestoreInstanceState(android.os.Bundle param_0) + { + if (__ho144) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onRestoreInstanceState", args); + } + else + { super.onRestoreInstanceState(param_0); } } - protected void onResume() { - - if ((__ho18 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onResume", params); - } else { + protected void onResume() + { + if (__ho145) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onResume", args); + } + else + { super.onResume(); } } - public java.lang.Object onRetainNonConfigurationInstance() { - - if ((__ho18 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "onRetainNonConfigurationInstance", params); - } else { + public java.lang.Object onRetainNonConfigurationInstance() + { + if (__ho146) + { + Object[] args = null; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "onRetainNonConfigurationInstance", args); + } + else + { return super.onRetainNonConfigurationInstance(); } } - protected void onSaveInstanceState(android.os.Bundle param_0) { - - if ((__ho18 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onSaveInstanceState", params); - } else { - super.onSaveInstanceState(param_0); - } + protected void onSaveInstanceState(android.os.Bundle param_0) + { + if (__ho147) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onSaveInstanceState", args); + } + else + { + super.onSaveInstanceState(param_0); + } } - public boolean onSearchRequested() { - - if ((__ho18 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", params); - } else { + public boolean onSearchRequested() + { + if (__ho148) + { + Object[] args = null; + return (Boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", args); + } + else + { return super.onSearchRequested(); } } - protected void onStart() { - - if ((__ho19 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onStart", params); - } else { + protected void onStart() + { + if (__ho149) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onStart", args); + } + else + { super.onStart(); } } - protected void onStop() { - - if ((__ho19 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onStop", params); - } else { + protected void onStop() + { + if (__ho150) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onStop", args); + } + else + { super.onStop(); } } - protected void onTitleChanged(java.lang.CharSequence param_0, int param_1) { - - if ((__ho19 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onTitleChanged", params); - } else { + protected void onTitleChanged(java.lang.CharSequence param_0, int param_1) + { + if (__ho151) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onTitleChanged", args); + } + else + { super.onTitleChanged(param_0, param_1); } } - public boolean onTouchEvent(android.view.MotionEvent param_0) { - - if ((__ho19 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", params); - } else { + public boolean onTouchEvent(android.view.MotionEvent param_0) + { + if (__ho152) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", args); + } + else + { return super.onTouchEvent(param_0); } } - public boolean onTrackballEvent(android.view.MotionEvent param_0) { - - if ((__ho19 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", params); - } else { + public boolean onTrackballEvent(android.view.MotionEvent param_0) + { + if (__ho153) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", args); + } + else + { return super.onTrackballEvent(param_0); } } - public void onTrimMemory(int param_0) { - - if ((__ho19 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onTrimMemory", params); - } else { + public void onTrimMemory(int param_0) + { + if (__ho154) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onTrimMemory", args); + } + else + { super.onTrimMemory(param_0); } } - public void onUserInteraction() { - - if ((__ho19 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onUserInteraction", params); - } else { + public void onUserInteraction() + { + if (__ho155) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onUserInteraction", args); + } + else + { super.onUserInteraction(); } } - protected void onUserLeaveHint() { - - if ((__ho19 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onUserLeaveHint", params); - } else { + protected void onUserLeaveHint() + { + if (__ho156) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onUserLeaveHint", args); + } + else + { super.onUserLeaveHint(); } } - public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams param_0) { - - if ((__ho20 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onWindowAttributesChanged", params); - } else { + public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams param_0) + { + if (__ho157) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onWindowAttributesChanged", args); + } + else + { super.onWindowAttributesChanged(param_0); } } - public void onWindowFocusChanged(boolean param_0) { - - if ((__ho20 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onWindowFocusChanged", params); - } else { + public void onWindowFocusChanged(boolean param_0) + { + if (__ho158) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onWindowFocusChanged", args); + } + else + { super.onWindowFocusChanged(param_0); } } - public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback param_0) { - - if ((__ho20 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "onWindowStartingActionMode", params); - } else { + public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback param_0) + { + if (__ho159) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "onWindowStartingActionMode", args); + } + else + { return super.onWindowStartingActionMode(param_0); } } - public void openContextMenu(android.view.View param_0) { - - if ((__ho20 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "openContextMenu", params); - } else { + public void openContextMenu(android.view.View param_0) + { + if (__ho160) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "openContextMenu", args); + } + else + { super.openContextMenu(param_0); } } - public java.io.FileInputStream openFileInput(java.lang.String param_0) throws java.io.FileNotFoundException { - - if ((__ho20 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.FileInputStream)com.tns.Platform.callJSMethod(this, "openFileInput", params); - } else { + public java.io.FileInputStream openFileInput(java.lang.String param_0) throws java.io.FileNotFoundException + { + if (__ho161) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.FileInputStream)com.tns.Platform.callJSMethod(this, "openFileInput", args); + } + else + { return super.openFileInput(param_0); } } - public java.io.FileOutputStream openFileOutput(java.lang.String param_0, int param_1) throws java.io.FileNotFoundException { - - if ((__ho20 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (java.io.FileOutputStream)com.tns.Platform.callJSMethod(this, "openFileOutput", params); - } else { + public java.io.FileOutputStream openFileOutput(java.lang.String param_0, int param_1) throws java.io.FileNotFoundException + { + if (__ho162) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (java.io.FileOutputStream)com.tns.Platform.callJSMethod(this, "openFileOutput", args); + } + else + { return super.openFileOutput(param_0, param_1); } } - public void openOptionsMenu() { - - if ((__ho20 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "openOptionsMenu", params); - } else { + public void openOptionsMenu() + { + if (__ho163) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "openOptionsMenu", args); + } + else + { super.openOptionsMenu(); } } - public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2, android.database.DatabaseErrorHandler param_3) { - - if ((__ho20 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", params); - } else { + public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2, android.database.DatabaseErrorHandler param_3) + { + if (__ho164) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", args); + } + else + { return super.openOrCreateDatabase(param_0, param_1, param_2, param_3); } } - public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2) { - - if ((__ho20 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", params); - } else { + public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2) + { + if (__ho164) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", args); + } + else + { return super.openOrCreateDatabase(param_0, param_1, param_2); } } - public void overridePendingTransition(int param_0, int param_1) { - - if ((__ho21 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "overridePendingTransition", params); - } else { + public void overridePendingTransition(int param_0, int param_1) + { + if (__ho165) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "overridePendingTransition", args); + } + else + { super.overridePendingTransition(param_0, param_1); } } - public android.graphics.drawable.Drawable peekWallpaper() { - - if ((__ho21 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "peekWallpaper", params); - } else { + public android.graphics.drawable.Drawable peekWallpaper() + { + if (__ho166) + { + Object[] args = null; + return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "peekWallpaper", args); + } + else + { return super.peekWallpaper(); } } - public void recreate() { - - if ((__ho21 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "recreate", params); - } else { + public void recreate() + { + if (__ho167) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "recreate", args); + } + else + { super.recreate(); } } - public void registerComponentCallbacks(android.content.ComponentCallbacks param_0) { - - if ((__ho21 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "registerComponentCallbacks", params); - } else { + public void registerComponentCallbacks(android.content.ComponentCallbacks param_0) + { + if (__ho168) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "registerComponentCallbacks", args); + } + else + { super.registerComponentCallbacks(param_0); } } - public void registerForContextMenu(android.view.View param_0) { - - if ((__ho21 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "registerForContextMenu", params); - } else { + public void registerForContextMenu(android.view.View param_0) + { + if (__ho169) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "registerForContextMenu", args); + } + else + { super.registerForContextMenu(param_0); } } - public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1, java.lang.String param_2, android.os.Handler param_3) { - - if ((__ho21 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", params); - } else { + public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1, java.lang.String param_2, android.os.Handler param_3) + { + if (__ho170) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", args); + } + else + { return super.registerReceiver(param_0, param_1, param_2, param_3); } } - public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1) { - - if ((__ho21 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", params); - } else { + public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1) + { + if (__ho170) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", args); + } + else + { return super.registerReceiver(param_0, param_1); } } - public void removeStickyBroadcast(android.content.Intent param_0) { - - if ((__ho21 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "removeStickyBroadcast", params); - } else { + public void removeStickyBroadcast(android.content.Intent param_0) + { + if (__ho171) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "removeStickyBroadcast", args); + } + else + { super.removeStickyBroadcast(param_0); } } - public void removeStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho21 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "removeStickyBroadcastAsUser", params); - } else { + public void removeStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho172) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "removeStickyBroadcastAsUser", args); + } + else + { super.removeStickyBroadcastAsUser(param_0, param_1); } } - public void revokeUriPermission(android.net.Uri param_0, int param_1) { - - if ((__ho22 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "revokeUriPermission", params); - } else { + public void revokeUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho173) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "revokeUriPermission", args); + } + else + { super.revokeUriPermission(param_0, param_1); } } - public void sendBroadcast(android.content.Intent param_0, java.lang.String param_1) { - - if ((__ho22 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendBroadcast", params); - } else { + public void sendBroadcast(android.content.Intent param_0, java.lang.String param_1) + { + if (__ho174) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendBroadcast", args); + } + else + { super.sendBroadcast(param_0, param_1); } } - public void sendBroadcast(android.content.Intent param_0) { - - if ((__ho22 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "sendBroadcast", params); - } else { + public void sendBroadcast(android.content.Intent param_0) + { + if (__ho174) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "sendBroadcast", args); + } + else + { super.sendBroadcast(param_0); } } - public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho22 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", params); - } else { + public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho175) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", args); + } + else + { super.sendBroadcastAsUser(param_0, param_1); } } - public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2) { - - if ((__ho22 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", params); - } else { + public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2) + { + if (__ho175) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", args); + } + else + { super.sendBroadcastAsUser(param_0, param_1, param_2); } } - public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1) { - - if ((__ho22 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", params); - } else { - super.sendOrderedBroadcast(param_0, param_1); + public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) + { + if (__ho176) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", args); + } + else + { + super.sendOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } } - public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) { - - if ((__ho22 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", params); - } else { - super.sendOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1) + { + if (__ho176) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", args); + } + else + { + super.sendOrderedBroadcast(param_0, param_1); } } - public void sendOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2, android.content.BroadcastReceiver param_3, android.os.Handler param_4, int param_5, java.lang.String param_6, android.os.Bundle param_7) { - - if ((__ho22 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[8]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - params[7] = param_7; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcastAsUser", params); - } else { + public void sendOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2, android.content.BroadcastReceiver param_3, android.os.Handler param_4, int param_5, java.lang.String param_6, android.os.Bundle param_7) + { + if (__ho177) + { + Object[] args = new Object[8]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + args[7] = param_7; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcastAsUser", args); + } + else + { super.sendOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); } } - public void sendStickyBroadcast(android.content.Intent param_0) { - - if ((__ho22 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "sendStickyBroadcast", params); - } else { + public void sendStickyBroadcast(android.content.Intent param_0) + { + if (__ho178) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "sendStickyBroadcast", args); + } + else + { super.sendStickyBroadcast(param_0); } } - public void sendStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho22 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendStickyBroadcastAsUser", params); - } else { + public void sendStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho179) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendStickyBroadcastAsUser", args); + } + else + { super.sendStickyBroadcastAsUser(param_0, param_1); } } - public void sendStickyOrderedBroadcast(android.content.Intent param_0, android.content.BroadcastReceiver param_1, android.os.Handler param_2, int param_3, java.lang.String param_4, android.os.Bundle param_5) { - - if ((__ho22 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcast", params); - } else { + public void sendStickyOrderedBroadcast(android.content.Intent param_0, android.content.BroadcastReceiver param_1, android.os.Handler param_2, int param_3, java.lang.String param_4, android.os.Bundle param_5) + { + if (__ho180) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcast", args); + } + else + { super.sendStickyOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5); } } - public void sendStickyOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) { - - if ((__ho23 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcastAsUser", params); - } else { + public void sendStickyOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) + { + if (__ho181) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcastAsUser", args); + } + else + { super.sendStickyOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } } - public void setContentView(android.view.View param_0) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { + public void setContentView(int param_0) + { + if (__ho182) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { super.setContentView(param_0); } } - public void setContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { + public void setContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) + { + if (__ho182) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { super.setContentView(param_0, param_1); } } - public void setContentView(int param_0) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { + public void setContentView(android.view.View param_0) + { + if (__ho182) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { super.setContentView(param_0); } } - public void setFinishOnTouchOutside(boolean param_0) { - - if ((__ho23 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setFinishOnTouchOutside", params); - } else { + public void setFinishOnTouchOutside(boolean param_0) + { + if (__ho183) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setFinishOnTouchOutside", args); + } + else + { super.setFinishOnTouchOutside(param_0); } } - public void setIntent(android.content.Intent param_0) { - - if ((__ho23 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setIntent", params); - } else { + public void setIntent(android.content.Intent param_0) + { + if (__ho184) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setIntent", args); + } + else + { super.setIntent(param_0); } } - public void setRequestedOrientation(int param_0) { - - if ((__ho23 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setRequestedOrientation", params); - } else { + public void setRequestedOrientation(int param_0) + { + if (__ho185) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setRequestedOrientation", args); + } + else + { super.setRequestedOrientation(param_0); } } - public void setTheme(int param_0) { - if ((__ho23 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTheme", params); - } else { + public void setTheme(int param_0) + { + if (__ho186) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTheme", args); + } + else + { super.setTheme(param_0); } } - public void setTitle(java.lang.CharSequence param_0) { - - if ((__ho23 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitle", params); - } else { + public void setTitle(java.lang.CharSequence param_0) + { + if (__ho187) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitle", args); + } + else + { super.setTitle(param_0); } } - public void setTitle(int param_0) { - - if ((__ho23 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitle", params); - } else { + public void setTitle(int param_0) + { + if (__ho187) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitle", args); + } + else + { super.setTitle(param_0); } } - public void setTitleColor(int param_0) { - - if ((__ho23 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitleColor", params); - } else { + public void setTitleColor(int param_0) + { + if (__ho188) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitleColor", args); + } + else + { super.setTitleColor(param_0); } } - public void setVisible(boolean param_0) { - - if ((__ho24 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setVisible", params); - } else { + public void setVisible(boolean param_0) + { + if (__ho189) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setVisible", args); + } + else + { super.setVisible(param_0); } } - public void setWallpaper(android.graphics.Bitmap param_0) throws java.io.IOException { - - if ((__ho24 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setWallpaper", params); - } else { + public void setWallpaper(java.io.InputStream param_0) throws java.io.IOException + { + if (__ho190) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setWallpaper", args); + } + else + { super.setWallpaper(param_0); } } - public void setWallpaper(java.io.InputStream param_0) throws java.io.IOException { - - if ((__ho24 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setWallpaper", params); - } else { + public void setWallpaper(android.graphics.Bitmap param_0) throws java.io.IOException + { + if (__ho190) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setWallpaper", args); + } + else + { super.setWallpaper(param_0); } } - public boolean shouldUpRecreateTask(android.content.Intent param_0) { - - if ((__ho24 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", params); - } else { + public boolean shouldUpRecreateTask(android.content.Intent param_0) + { + if (__ho191) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", args); + } + else + { return super.shouldUpRecreateTask(param_0); } } - public android.view.ActionMode startActionMode(android.view.ActionMode.Callback param_0) { - - if ((__ho24 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "startActionMode", params); - } else { + public android.view.ActionMode startActionMode(android.view.ActionMode.Callback param_0) + { + if (__ho192) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "startActionMode", args); + } + else + { return super.startActionMode(param_0); } } - public void startActivities(android.content.Intent[] param_0, android.os.Bundle param_1) { - - if ((__ho24 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivities", params); - } else { + public void startActivities(android.content.Intent[] param_0, android.os.Bundle param_1) + { + if (__ho193) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivities", args); + } + else + { super.startActivities(param_0, param_1); } } - public void startActivities(android.content.Intent[] param_0) { - - if ((__ho24 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startActivities", params); - } else { + public void startActivities(android.content.Intent[] param_0) + { + if (__ho193) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startActivities", args); + } + else + { super.startActivities(param_0); } } - public void startActivity(android.content.Intent param_0) { - - if ((__ho24 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startActivity", params); - } else { - super.startActivity(param_0); + public void startActivity(android.content.Intent param_0, android.os.Bundle param_1) + { + if (__ho194) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivity", args); } - } - - public void startActivity(android.content.Intent param_0, android.os.Bundle param_1) { - - if ((__ho24 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivity", params); - } else { + else + { super.startActivity(param_0, param_1); } } - public void startActivityForResult(android.content.Intent param_0, int param_1, android.os.Bundle param_2) { - - if ((__ho24 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityForResult", params); - } else { - super.startActivityForResult(param_0, param_1, param_2); + public void startActivity(android.content.Intent param_0) + { + if (__ho194) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startActivity", args); + } + else + { + super.startActivity(param_0); } } - public void startActivityForResult(android.content.Intent param_0, int param_1) { - - if ((__ho24 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivityForResult", params); - } else { + public void startActivityForResult(android.content.Intent param_0, int param_1) + { + if (__ho195) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivityForResult", args); + } + else + { super.startActivityForResult(param_0, param_1); } } - public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2) { - - if ((__ho24 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityFromChild", params); - } else { - super.startActivityFromChild(param_0, param_1, param_2); + public void startActivityForResult(android.content.Intent param_0, int param_1, android.os.Bundle param_2) + { + if (__ho195) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityForResult", args); + } + else + { + super.startActivityForResult(param_0, param_1, param_2); } } - public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) { - - if ((__ho24 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startActivityFromChild", params); - } else { + public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) + { + if (__ho196) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startActivityFromChild", args); + } + else + { super.startActivityFromChild(param_0, param_1, param_2, param_3); } } - public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2) { - - if ((__ho25 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityFromFragment", params); - } else { + public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2) + { + if (__ho196) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityFromChild", args); + } + else + { + super.startActivityFromChild(param_0, param_1, param_2); + } + } + + public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2) + { + if (__ho197) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityFromFragment", args); + } + else + { super.startActivityFromFragment(param_0, param_1, param_2); } } - public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) { - - if ((__ho25 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startActivityFromFragment", params); - } else { + public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) + { + if (__ho197) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startActivityFromFragment", args); + } + else + { super.startActivityFromFragment(param_0, param_1, param_2, param_3); } } - public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1) { - - if ((__ho25 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", params); - } else { + public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1) + { + if (__ho198) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + } + else + { return super.startActivityIfNeeded(param_0, param_1); } } - public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1, android.os.Bundle param_2) { - - if ((__ho25 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", params); - } else { + public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1, android.os.Bundle param_2) + { + if (__ho198) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + } + else + { return super.startActivityIfNeeded(param_0, param_1, param_2); } } - public boolean startInstrumentation(android.content.ComponentName param_0, java.lang.String param_1, android.os.Bundle param_2) { - - if ((__ho25 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", params); - } else { + public boolean startInstrumentation(android.content.ComponentName param_0, java.lang.String param_1, android.os.Bundle param_2) + { + if (__ho199) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (Boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", args); + } + else + { return super.startInstrumentation(param_0, param_1, param_2); } } - public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[5]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - com.tns.Platform.callJSMethod(this, "startIntentSender", params); - } else { - super.startIntentSender(param_0, param_1, param_2, param_3, param_4); + public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4, android.os.Bundle param_5) throws android.content.IntentSender.SendIntentException + { + if (__ho200) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "startIntentSender", args); + } + else + { + super.startIntentSender(param_0, param_1, param_2, param_3, param_4, param_5); } } - public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4, android.os.Bundle param_5) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "startIntentSender", params); - } else { - super.startIntentSender(param_0, param_1, param_2, param_3, param_4, param_5); + public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4) throws android.content.IntentSender.SendIntentException + { + if (__ho200) + { + Object[] args = new Object[5]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + com.tns.Platform.callJSMethod(this, "startIntentSender", args); + } + else + { + super.startIntentSender(param_0, param_1, param_2, param_3, param_4); } } - public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5, android.os.Bundle param_6) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", params); - } else { + public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5, android.os.Bundle param_6) throws android.content.IntentSender.SendIntentException + { + if (__ho201) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", args); + } + else + { super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } } - public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", params); - } else { + public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5) throws android.content.IntentSender.SendIntentException + { + if (__ho201) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", args); + } + else + { super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5); } } - public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", params); - } else { - super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6, android.os.Bundle param_7) throws android.content.IntentSender.SendIntentException + { + if (__ho202) + { + Object[] args = new Object[8]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + args[7] = param_7; + com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", args); + } + else + { + super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); } } - public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6, android.os.Bundle param_7) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[8]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - params[7] = param_7; - com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", params); - } else { - super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); + public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6) throws android.content.IntentSender.SendIntentException + { + if (__ho202) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", args); + } + else + { + super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } } - public void startManagingCursor(android.database.Cursor param_0) { - - if ((__ho25 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startManagingCursor", params); - } else { + public void startManagingCursor(android.database.Cursor param_0) + { + if (__ho203) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startManagingCursor", args); + } + else + { super.startManagingCursor(param_0); } } - public boolean startNextMatchingActivity(android.content.Intent param_0) { - - if ((__ho25 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", params); - } else { + public boolean startNextMatchingActivity(android.content.Intent param_0) + { + if (__ho204) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + } + else + { return super.startNextMatchingActivity(param_0); } } - public boolean startNextMatchingActivity(android.content.Intent param_0, android.os.Bundle param_1) { - - if ((__ho25 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", params); - } else { + public boolean startNextMatchingActivity(android.content.Intent param_0, android.os.Bundle param_1) + { + if (__ho204) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + } + else + { return super.startNextMatchingActivity(param_0, param_1); } } - public void startSearch(java.lang.String param_0, boolean param_1, android.os.Bundle param_2, boolean param_3) { - - if ((__ho26 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startSearch", params); - } else { + public void startSearch(java.lang.String param_0, boolean param_1, android.os.Bundle param_2, boolean param_3) + { + if (__ho205) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startSearch", args); + } + else + { super.startSearch(param_0, param_1, param_2, param_3); } } - public android.content.ComponentName startService(android.content.Intent param_0) { - - if ((__ho26 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "startService", params); - } else { + public android.content.ComponentName startService(android.content.Intent param_0) + { + if (__ho206) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "startService", args); + } + else + { return super.startService(param_0); } } - public void stopManagingCursor(android.database.Cursor param_0) { - - if ((__ho26 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "stopManagingCursor", params); - } else { + public void stopManagingCursor(android.database.Cursor param_0) + { + if (__ho207) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "stopManagingCursor", args); + } + else + { super.stopManagingCursor(param_0); } } - public boolean stopService(android.content.Intent param_0) { - - if ((__ho26 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "stopService", params); - } else { + public boolean stopService(android.content.Intent param_0) + { + if (__ho208) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (Boolean)com.tns.Platform.callJSMethod(this, "stopService", args); + } + else + { return super.stopService(param_0); } } - public void takeKeyEvents(boolean param_0) { - - if ((__ho26 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "takeKeyEvents", params); - } else { + public void takeKeyEvents(boolean param_0) + { + if (__ho209) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "takeKeyEvents", args); + } + else + { super.takeKeyEvents(param_0); } } - public java.lang.String toString() { - - if ((__ho26 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "toString", params); - } else { + public java.lang.String toString() + { + if (__ho210) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "toString", args); + } + else + { return super.toString(); } } - public void triggerSearch(java.lang.String param_0, android.os.Bundle param_1) { - - if ((__ho26 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "triggerSearch", params); - } else { + public void triggerSearch(java.lang.String param_0, android.os.Bundle param_1) + { + if (__ho211) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "triggerSearch", args); + } + else + { super.triggerSearch(param_0, param_1); } } - public void unbindService(android.content.ServiceConnection param_0) { - - if ((__ho26 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unbindService", params); - } else { + public void unbindService(android.content.ServiceConnection param_0) + { + if (__ho212) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unbindService", args); + } + else + { super.unbindService(param_0); } } - public void unregisterComponentCallbacks(android.content.ComponentCallbacks param_0) { - - if ((__ho27 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterComponentCallbacks", params); - } else { + public void unregisterComponentCallbacks(android.content.ComponentCallbacks param_0) + { + if (__ho213) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterComponentCallbacks", args); + } + else + { super.unregisterComponentCallbacks(param_0); } } - public void unregisterForContextMenu(android.view.View param_0) { - - if ((__ho27 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterForContextMenu", params); - } else { + public void unregisterForContextMenu(android.view.View param_0) + { + if (__ho214) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterForContextMenu", args); + } + else + { super.unregisterForContextMenu(param_0); } } - public void unregisterReceiver(android.content.BroadcastReceiver param_0) { - - if ((__ho27 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterReceiver", params); - } else { + public void unregisterReceiver(android.content.BroadcastReceiver param_0) + { + if (__ho215) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterReceiver", args); + } + else + { super.unregisterReceiver(param_0); } } - public boolean equals__super(java.lang.Object other) { - return super.equals(other); - } - public int hashCode__super() { - return super.hashCode(); - } - public void setNativeScriptOverrides(java.lang.String[] overrides) { - for (java.lang.String name: overrides) { - setNativeScriptOverride(name); - } - } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) { - __ctorOverridden = true; - } - if (name.equals("addContentView")) { - __ho0 |= (1 << 0); - } else if (name.equals("applyOverrideConfiguration")) { - __ho0 |= (1 << 1); - } else if (name.equals("attachBaseContext")) { - __ho0 |= (1 << 2); - } else if (name.equals("bindService")) { - __ho0 |= (1 << 3); - } else if (name.equals("checkCallingOrSelfPermission")) { - __ho0 |= (1 << 4); - } else if (name.equals("checkCallingOrSelfUriPermission")) { - __ho0 |= (1 << 5); - } else if (name.equals("checkCallingPermission")) { - __ho0 |= (1 << 6); - } else if (name.equals("checkCallingUriPermission")) { - __ho0 |= (1 << 7); - } else if (name.equals("checkPermission")) { - __ho1 |= (1 << 0); - } else if (name.equals("checkUriPermission")) { - __ho1 |= (1 << 1); - } else if (name.equals("clearWallpaper")) { - __ho1 |= (1 << 2); - } else if (name.equals("clone")) { - __ho1 |= (1 << 3); - } else if (name.equals("closeContextMenu")) { - __ho1 |= (1 << 4); - } else if (name.equals("closeOptionsMenu")) { - __ho1 |= (1 << 5); - } else if (name.equals("createConfigurationContext")) { - __ho1 |= (1 << 6); - } else if (name.equals("createDisplayContext")) { - __ho1 |= (1 << 7); - } else if (name.equals("createPackageContext")) { - __ho2 |= (1 << 0); - } else if (name.equals("createPendingResult")) { - __ho2 |= (1 << 1); - } else if (name.equals("databaseList")) { - __ho2 |= (1 << 2); - } else if (name.equals("deleteDatabase")) { - __ho2 |= (1 << 3); - } else if (name.equals("deleteFile")) { - __ho2 |= (1 << 4); - } else if (name.equals("dispatchGenericMotionEvent")) { - __ho2 |= (1 << 5); - } else if (name.equals("dispatchKeyEvent")) { - __ho2 |= (1 << 6); - } else if (name.equals("dispatchKeyShortcutEvent")) { - __ho2 |= (1 << 7); - } else if (name.equals("dispatchPopulateAccessibilityEvent")) { - __ho3 |= (1 << 0); - } else if (name.equals("dispatchTouchEvent")) { - __ho3 |= (1 << 1); - } else if (name.equals("dispatchTrackballEvent")) { - __ho3 |= (1 << 2); - } else if (name.equals("dump")) { - __ho3 |= (1 << 3); - } else if (name.equals("enforceCallingOrSelfPermission")) { - __ho3 |= (1 << 4); - } else if (name.equals("enforceCallingOrSelfUriPermission")) { - __ho3 |= (1 << 5); - } else if (name.equals("enforceCallingPermission")) { - __ho3 |= (1 << 6); - } else if (name.equals("enforceCallingUriPermission")) { - __ho3 |= (1 << 7); - } else if (name.equals("enforcePermission")) { - __ho4 |= (1 << 0); - } else if (name.equals("enforceUriPermission")) { - __ho4 |= (1 << 1); - } else if (name.equals("equals")) { - __ho4 |= (1 << 2); - } else if (name.equals("fileList")) { - __ho4 |= (1 << 3); - } else if (name.equals("finalize")) { - __ho4 |= (1 << 4); - } else if (name.equals("findViewById")) { - __ho4 |= (1 << 5); - } else if (name.equals("finish")) { - __ho4 |= (1 << 6); - } else if (name.equals("finishActivity")) { - __ho4 |= (1 << 7); - } else if (name.equals("finishActivityFromChild")) { - __ho5 |= (1 << 0); - } else if (name.equals("finishAffinity")) { - __ho5 |= (1 << 1); - } else if (name.equals("finishFromChild")) { - __ho5 |= (1 << 2); - } else if (name.equals("getActionBar")) { - __ho5 |= (1 << 3); - } else if (name.equals("getApplicationContext")) { - __ho5 |= (1 << 4); - } else if (name.equals("getApplicationInfo")) { - __ho5 |= (1 << 5); - } else if (name.equals("getAssets")) { - __ho5 |= (1 << 6); - } else if (name.equals("getBaseContext")) { - __ho5 |= (1 << 7); - } else if (name.equals("getCacheDir")) { - __ho6 |= (1 << 0); - } else if (name.equals("getCallingActivity")) { - __ho6 |= (1 << 1); - } else if (name.equals("getCallingPackage")) { - __ho6 |= (1 << 2); - } else if (name.equals("getChangingConfigurations")) { - __ho6 |= (1 << 3); - } else if (name.equals("getClassLoader")) { - __ho6 |= (1 << 4); - } else if (name.equals("getComponentName")) { - __ho6 |= (1 << 5); - } else if (name.equals("getContentResolver")) { - __ho6 |= (1 << 6); - } else if (name.equals("getCurrentFocus")) { - __ho6 |= (1 << 7); - } else if (name.equals("getDatabasePath")) { - __ho7 |= (1 << 0); - } else if (name.equals("getDir")) { - __ho7 |= (1 << 1); - } else if (name.equals("getExternalCacheDir")) { - __ho7 |= (1 << 2); - } else if (name.equals("getExternalFilesDir")) { - __ho7 |= (1 << 3); - } else if (name.equals("getFileStreamPath")) { - __ho7 |= (1 << 4); - } else if (name.equals("getFilesDir")) { - __ho7 |= (1 << 5); - } else if (name.equals("getFragmentManager")) { - __ho7 |= (1 << 6); - } else if (name.equals("getIntent")) { - __ho7 |= (1 << 7); - } else if (name.equals("getLastNonConfigurationInstance")) { - __ho8 |= (1 << 0); - } else if (name.equals("getLayoutInflater")) { - __ho8 |= (1 << 1); - } else if (name.equals("getLoaderManager")) { - __ho8 |= (1 << 2); - } else if (name.equals("getLocalClassName")) { - __ho8 |= (1 << 3); - } else if (name.equals("getMainLooper")) { - __ho8 |= (1 << 4); - } else if (name.equals("getMenuInflater")) { - __ho8 |= (1 << 5); - } else if (name.equals("getObbDir")) { - __ho8 |= (1 << 6); - } else if (name.equals("getPackageCodePath")) { - __ho8 |= (1 << 7); - } else if (name.equals("getPackageManager")) { - __ho9 |= (1 << 0); - } else if (name.equals("getPackageName")) { - __ho9 |= (1 << 1); - } else if (name.equals("getPackageResourcePath")) { - __ho9 |= (1 << 2); - } else if (name.equals("getParentActivityIntent")) { - __ho9 |= (1 << 3); - } else if (name.equals("getPreferences")) { - __ho9 |= (1 << 4); - } else if (name.equals("getRequestedOrientation")) { - __ho9 |= (1 << 5); - } else if (name.equals("getResources")) { - __ho9 |= (1 << 6); - } else if (name.equals("getSharedPreferences")) { - __ho9 |= (1 << 7); - } else if (name.equals("getSystemService")) { - __ho10 |= (1 << 0); - } else if (name.equals("getTaskId")) { - __ho10 |= (1 << 1); - } else if (name.equals("getTheme")) { - __ho10 |= (1 << 2); - } else if (name.equals("getWallpaper")) { - __ho10 |= (1 << 3); - } else if (name.equals("getWallpaperDesiredMinimumHeight")) { - __ho10 |= (1 << 4); - } else if (name.equals("getWallpaperDesiredMinimumWidth")) { - __ho10 |= (1 << 5); - } else if (name.equals("getWindow")) { - __ho10 |= (1 << 6); - } else if (name.equals("getWindowManager")) { - __ho10 |= (1 << 7); - } else if (name.equals("grantUriPermission")) { - __ho11 |= (1 << 0); - } else if (name.equals("hasWindowFocus")) { - __ho11 |= (1 << 1); - } else if (name.equals("hashCode")) { - __ho11 |= (1 << 2); - } else if (name.equals("invalidateOptionsMenu")) { - __ho11 |= (1 << 3); - } else if (name.equals("isChangingConfigurations")) { - __ho11 |= (1 << 4); - } else if (name.equals("isDestroyed")) { - __ho11 |= (1 << 5); - } else if (name.equals("isFinishing")) { - __ho11 |= (1 << 6); - } else if (name.equals("isRestricted")) { - __ho11 |= (1 << 7); - } else if (name.equals("isTaskRoot")) { - __ho12 |= (1 << 0); - } else if (name.equals("moveTaskToBack")) { - __ho12 |= (1 << 1); - } else if (name.equals("navigateUpTo")) { - __ho12 |= (1 << 2); - } else if (name.equals("navigateUpToFromChild")) { - __ho12 |= (1 << 3); - } else if (name.equals("onActionModeFinished")) { - __ho12 |= (1 << 4); - } else if (name.equals("onActionModeStarted")) { - __ho12 |= (1 << 5); - } else if (name.equals("onActivityResult")) { - __ho12 |= (1 << 6); - } else if (name.equals("onApplyThemeResource")) { - __ho12 |= (1 << 7); - } else if (name.equals("onAttachFragment")) { - __ho13 |= (1 << 0); - } else if (name.equals("onAttachedToWindow")) { - __ho13 |= (1 << 1); - } else if (name.equals("onBackPressed")) { - __ho13 |= (1 << 2); - } else if (name.equals("onChildTitleChanged")) { - __ho13 |= (1 << 3); - } else if (name.equals("onConfigurationChanged")) { - __ho13 |= (1 << 4); - } else if (name.equals("onContentChanged")) { - __ho13 |= (1 << 5); - } else if (name.equals("onContextItemSelected")) { - __ho13 |= (1 << 6); - } else if (name.equals("onContextMenuClosed")) { - __ho13 |= (1 << 7); - } else if (name.equals("onCreate")) { - __ho14 |= (1 << 0); - } else if (name.equals("onCreateContextMenu")) { - __ho14 |= (1 << 1); - } else if (name.equals("onCreateDescription")) { - __ho14 |= (1 << 2); - } else if (name.equals("onCreateDialog")) { - __ho14 |= (1 << 3); - } else if (name.equals("onCreateNavigateUpTaskStack")) { - __ho14 |= (1 << 4); - } else if (name.equals("onCreateOptionsMenu")) { - __ho14 |= (1 << 5); - } else if (name.equals("onCreatePanelMenu")) { - __ho14 |= (1 << 6); - } else if (name.equals("onCreatePanelView")) { - __ho14 |= (1 << 7); - } else if (name.equals("onCreateThumbnail")) { - __ho15 |= (1 << 0); - } else if (name.equals("onCreateView")) { - __ho15 |= (1 << 1); - } else if (name.equals("onDestroy")) { - __ho15 |= (1 << 2); - } else if (name.equals("onDetachedFromWindow")) { - __ho15 |= (1 << 3); - } else if (name.equals("onGenericMotionEvent")) { - __ho15 |= (1 << 4); - } else if (name.equals("onKeyDown")) { - __ho15 |= (1 << 5); - } else if (name.equals("onKeyLongPress")) { - __ho15 |= (1 << 6); - } else if (name.equals("onKeyMultiple")) { - __ho15 |= (1 << 7); - } else if (name.equals("onKeyShortcut")) { - __ho16 |= (1 << 0); - } else if (name.equals("onKeyUp")) { - __ho16 |= (1 << 1); - } else if (name.equals("onLowMemory")) { - __ho16 |= (1 << 2); - } else if (name.equals("onMenuItemSelected")) { - __ho16 |= (1 << 3); - } else if (name.equals("onMenuOpened")) { - __ho16 |= (1 << 4); - } else if (name.equals("onNavigateUp")) { - __ho16 |= (1 << 5); - } else if (name.equals("onNavigateUpFromChild")) { - __ho16 |= (1 << 6); - } else if (name.equals("onNewIntent")) { - __ho16 |= (1 << 7); - } else if (name.equals("onOptionsItemSelected")) { - __ho17 |= (1 << 0); - } else if (name.equals("onOptionsMenuClosed")) { - __ho17 |= (1 << 1); - } else if (name.equals("onPanelClosed")) { - __ho17 |= (1 << 2); - } else if (name.equals("onPause")) { - __ho17 |= (1 << 3); - } else if (name.equals("onPostCreate")) { - __ho17 |= (1 << 4); - } else if (name.equals("onPostResume")) { - __ho17 |= (1 << 5); - } else if (name.equals("onPrepareDialog")) { - __ho17 |= (1 << 6); - } else if (name.equals("onPrepareNavigateUpTaskStack")) { - __ho17 |= (1 << 7); - } else if (name.equals("onPrepareOptionsMenu")) { - __ho18 |= (1 << 0); - } else if (name.equals("onPreparePanel")) { - __ho18 |= (1 << 1); - } else if (name.equals("onRestart")) { - __ho18 |= (1 << 2); - } else if (name.equals("onRestoreInstanceState")) { - __ho18 |= (1 << 3); - } else if (name.equals("onResume")) { - __ho18 |= (1 << 4); - } else if (name.equals("onRetainNonConfigurationInstance")) { - __ho18 |= (1 << 5); - } else if (name.equals("onSaveInstanceState")) { - __ho18 |= (1 << 6); - } else if (name.equals("onSearchRequested")) { - __ho18 |= (1 << 7); - } else if (name.equals("onStart")) { - __ho19 |= (1 << 0); - } else if (name.equals("onStop")) { - __ho19 |= (1 << 1); - } else if (name.equals("onTitleChanged")) { - __ho19 |= (1 << 2); - } else if (name.equals("onTouchEvent")) { - __ho19 |= (1 << 3); - } else if (name.equals("onTrackballEvent")) { - __ho19 |= (1 << 4); - } else if (name.equals("onTrimMemory")) { - __ho19 |= (1 << 5); - } else if (name.equals("onUserInteraction")) { - __ho19 |= (1 << 6); - } else if (name.equals("onUserLeaveHint")) { - __ho19 |= (1 << 7); - } else if (name.equals("onWindowAttributesChanged")) { - __ho20 |= (1 << 0); - } else if (name.equals("onWindowFocusChanged")) { - __ho20 |= (1 << 1); - } else if (name.equals("onWindowStartingActionMode")) { - __ho20 |= (1 << 2); - } else if (name.equals("openContextMenu")) { - __ho20 |= (1 << 3); - } else if (name.equals("openFileInput")) { - __ho20 |= (1 << 4); - } else if (name.equals("openFileOutput")) { - __ho20 |= (1 << 5); - } else if (name.equals("openOptionsMenu")) { - __ho20 |= (1 << 6); - } else if (name.equals("openOrCreateDatabase")) { - __ho20 |= (1 << 7); - } else if (name.equals("overridePendingTransition")) { - __ho21 |= (1 << 0); - } else if (name.equals("peekWallpaper")) { - __ho21 |= (1 << 1); - } else if (name.equals("recreate")) { - __ho21 |= (1 << 2); - } else if (name.equals("registerComponentCallbacks")) { - __ho21 |= (1 << 3); - } else if (name.equals("registerForContextMenu")) { - __ho21 |= (1 << 4); - } else if (name.equals("registerReceiver")) { - __ho21 |= (1 << 5); - } else if (name.equals("removeStickyBroadcast")) { - __ho21 |= (1 << 6); - } else if (name.equals("removeStickyBroadcastAsUser")) { - __ho21 |= (1 << 7); - } else if (name.equals("revokeUriPermission")) { - __ho22 |= (1 << 0); - } else if (name.equals("sendBroadcast")) { - __ho22 |= (1 << 1); - } else if (name.equals("sendBroadcastAsUser")) { - __ho22 |= (1 << 2); - } else if (name.equals("sendOrderedBroadcast")) { - __ho22 |= (1 << 3); - } else if (name.equals("sendOrderedBroadcastAsUser")) { - __ho22 |= (1 << 4); - } else if (name.equals("sendStickyBroadcast")) { - __ho22 |= (1 << 5); - } else if (name.equals("sendStickyBroadcastAsUser")) { - __ho22 |= (1 << 6); - } else if (name.equals("sendStickyOrderedBroadcast")) { - __ho22 |= (1 << 7); - } else if (name.equals("sendStickyOrderedBroadcastAsUser")) { - __ho23 |= (1 << 0); - } else if (name.equals("setContentView")) { - __ho23 |= (1 << 1); - } else if (name.equals("setFinishOnTouchOutside")) { - __ho23 |= (1 << 2); - } else if (name.equals("setIntent")) { - __ho23 |= (1 << 3); - } else if (name.equals("setRequestedOrientation")) { - __ho23 |= (1 << 4); - } else if (name.equals("setTheme")) { - __ho23 |= (1 << 5); - } else if (name.equals("setTitle")) { - __ho23 |= (1 << 6); - } else if (name.equals("setTitleColor")) { - __ho23 |= (1 << 7); - } else if (name.equals("setVisible")) { - __ho24 |= (1 << 0); - } else if (name.equals("setWallpaper")) { - __ho24 |= (1 << 1); - } else if (name.equals("shouldUpRecreateTask")) { - __ho24 |= (1 << 2); - } else if (name.equals("startActionMode")) { - __ho24 |= (1 << 3); - } else if (name.equals("startActivities")) { - __ho24 |= (1 << 4); - } else if (name.equals("startActivity")) { - __ho24 |= (1 << 5); - } else if (name.equals("startActivityForResult")) { - __ho24 |= (1 << 6); - } else if (name.equals("startActivityFromChild")) { - __ho24 |= (1 << 7); - } else if (name.equals("startActivityFromFragment")) { - __ho25 |= (1 << 0); - } else if (name.equals("startActivityIfNeeded")) { - __ho25 |= (1 << 1); - } else if (name.equals("startInstrumentation")) { - __ho25 |= (1 << 2); - } else if (name.equals("startIntentSender")) { - __ho25 |= (1 << 3); - } else if (name.equals("startIntentSenderForResult")) { - __ho25 |= (1 << 4); - } else if (name.equals("startIntentSenderFromChild")) { - __ho25 |= (1 << 5); - } else if (name.equals("startManagingCursor")) { - __ho25 |= (1 << 6); - } else if (name.equals("startNextMatchingActivity")) { - __ho25 |= (1 << 7); - } else if (name.equals("startSearch")) { - __ho26 |= (1 << 0); - } else if (name.equals("startService")) { - __ho26 |= (1 << 1); - } else if (name.equals("stopManagingCursor")) { - __ho26 |= (1 << 2); - } else if (name.equals("stopService")) { - __ho26 |= (1 << 3); - } else if (name.equals("takeKeyEvents")) { - __ho26 |= (1 << 4); - } else if (name.equals("toString")) { - __ho26 |= (1 << 5); - } else if (name.equals("triggerSearch")) { - __ho26 |= (1 << 6); - } else if (name.equals("unbindService")) { - __ho26 |= (1 << 7); - } else if (name.equals("unregisterComponentCallbacks")) { - __ho27 |= (1 << 0); - } else if (name.equals("unregisterForContextMenu")) { - __ho27 |= (1 << 1); - } else if (name.equals("unregisterReceiver")) { - __ho27 |= (1 << 2); - } - - } - private boolean __initialized; - private boolean __ctorOverridden; - private byte __ho0; - private byte __ho1; - private byte __ho2; - private byte __ho3; - private byte __ho4; - private byte __ho5; - private byte __ho6; - private byte __ho7; - private byte __ho8; - private byte __ho9; - private byte __ho10; - private byte __ho11; - private byte __ho12; - private byte __ho13; - private byte __ho14; - private byte __ho15; - private byte __ho16; - private byte __ho17; - private byte __ho18; - private byte __ho19; - private byte __ho20; - private byte __ho21; - private byte __ho22; - private byte __ho23; - private byte __ho24; - private byte __ho25; - private byte __ho26; - private byte __ho27; - private byte __ho28; + private void setMethodOverrides(String[] methodOverrides) + { + for (String m: methodOverrides) + { + if (m.equals("onChildTitleChanged")) __ho104= true; + if (m.equals("getChangingConfigurations")) __ho48= true; + if (m.equals("getObbDir")) __ho67= true; + if (m.equals("onSearchRequested")) __ho148= true; + if (m.equals("navigateUpToFromChild")) __ho96= true; + if (m.equals("deleteDatabase")) __ho17= true; + if (m.equals("checkPermission")) __ho7= true; + if (m.equals("enforceUriPermission")) __ho31= true; + if (m.equals("startActivityFromFragment")) __ho197= true; + if (m.equals("databaseList")) __ho16= true; + if (m.equals("dispatchGenericMotionEvent")) __ho19= true; + if (m.equals("getFilesDir")) __ho58= true; + if (m.equals("sendStickyOrderedBroadcastAsUser")) __ho181= true; + if (m.equals("fileList")) __ho33= true; + if (m.equals("getWallpaper")) __ho80= true; + if (m.equals("onBackPressed")) __ho103= true; + if (m.equals("onRestart")) __ho143= true; + if (m.equals("shouldUpRecreateTask")) __ho191= true; + if (m.equals("finishAffinity")) __ho38= true; + if (m.equals("setIntent")) __ho184= true; + if (m.equals("unregisterComponentCallbacks")) __ho213= true; + if (m.equals("dispatchPopulateAccessibilityEvent")) __ho22= true; + if (m.equals("getLoaderManager")) __ho63= true; + if (m.equals("startIntentSender")) __ho200= true; + if (m.equals("openOrCreateDatabase")) __ho164= true; + if (m.equals("getFileStreamPath")) __ho57= true; + if (m.equals("closeOptionsMenu")) __ho11= true; + if (m.equals("getWallpaperDesiredMinimumHeight")) __ho81= true; + if (m.equals("getCallingActivity")) __ho46= true; + if (m.equals("openOptionsMenu")) __ho163= true; + if (m.equals("onWindowAttributesChanged")) __ho157= true; + if (m.equals("invalidateOptionsMenu")) __ho88= true; + if (m.equals("onCreateNavigateUpTaskStack")) __ho113= true; + if (m.equals("removeStickyBroadcast")) __ho171= true; + if (m.equals("dispatchKeyEvent")) __ho20= true; + if (m.equals("getCurrentFocus")) __ho52= true; + if (m.equals("peekWallpaper")) __ho166= true; + if (m.equals("createConfigurationContext")) __ho12= true; + if (m.equals("getApplicationContext")) __ho41= true; + if (m.equals("sendStickyBroadcast")) __ho178= true; + if (m.equals("getResources")) __ho75= true; + if (m.equals("onOptionsMenuClosed")) __ho134= true; + if (m.equals("getSharedPreferences")) __ho76= true; + if (m.equals("setFinishOnTouchOutside")) __ho183= true; + if (m.equals("onAttachedToWindow")) __ho102= true; + if (m.equals("getWallpaperDesiredMinimumWidth")) __ho82= true; + if (m.equals("startInstrumentation")) __ho199= true; + if (m.equals("onPrepareOptionsMenu")) __ho141= true; + if (m.equals("getComponentName")) __ho50= true; + if (m.equals("sendStickyBroadcastAsUser")) __ho179= true; + if (m.equals("setWallpaper")) __ho190= true; + if (m.equals("stopManagingCursor")) __ho207= true; + if (m.equals("getParentActivityIntent")) __ho72= true; + if (m.equals("onTrimMemory")) __ho154= true; + if (m.equals("onActionModeFinished")) __ho97= true; + if (m.equals("recreate")) __ho167= true; + if (m.equals("sendStickyOrderedBroadcast")) __ho180= true; + if (m.equals("onCreateDialog")) __ho112= true; + if (m.equals("startActivityForResult")) __ho195= true; + if (m.equals("onTitleChanged")) __ho151= true; + if (m.equals("getActionBar")) __ho40= true; + if (m.equals("onCreatePanelView")) __ho116= true; + if (m.equals("onNewIntent")) __ho132= true; + if (m.equals("onKeyMultiple")) __ho124= true; + if (m.equals("toString")) __ho210= true; + if (m.equals("applyOverrideConfiguration")) __ho1= true; + if (m.equals("getFragmentManager")) __ho59= true; + if (m.equals("onPanelClosed")) __ho135= true; + if (m.equals("createDisplayContext")) __ho13= true; + if (m.equals("onKeyShortcut")) __ho125= true; + if (m.equals("dispatchTrackballEvent")) __ho24= true; + if (m.equals("addContentView")) __ho0= true; + if (m.equals("onActivityResult")) __ho99= true; + if (m.equals("openFileInput")) __ho161= true; + if (m.equals("getRequestedOrientation")) __ho74= true; + if (m.equals("getWindowManager")) __ho84= true; + if (m.equals("triggerSearch")) __ho211= true; + if (m.equals("finish")) __ho35= true; + if (m.equals("dispatchKeyShortcutEvent")) __ho21= true; + if (m.equals("setVisible")) __ho189= true; + if (m.equals("isDestroyed")) __ho90= true; + if (m.equals("setTitle")) __ho187= true; + if (m.equals("startActivities")) __ho193= true; + if (m.equals("onKeyLongPress")) __ho123= true; + if (m.equals("onGenericMotionEvent")) __ho121= true; + if (m.equals("getMenuInflater")) __ho66= true; + if (m.equals("isChangingConfigurations")) __ho89= true; + if (m.equals("getPackageName")) __ho70= true; + if (m.equals("setRequestedOrientation")) __ho185= true; + if (m.equals("enforceCallingUriPermission")) __ho29= true; + if (m.equals("getLocalClassName")) __ho64= true; + if (m.equals("getWindow")) __ho83= true; + if (m.equals("onRestoreInstanceState")) __ho144= true; + if (m.equals("checkCallingOrSelfUriPermission")) __ho4= true; + if (m.equals("setTitleColor")) __ho188= true; + if (m.equals("getClassLoader")) __ho49= true; + if (m.equals("closeContextMenu")) __ho10= true; + if (m.equals("createPackageContext")) __ho14= true; + if (m.equals("openFileOutput")) __ho162= true; + if (m.equals("moveTaskToBack")) __ho94= true; + if (m.equals("dispatchTouchEvent")) __ho23= true; + if (m.equals("onActionModeStarted")) __ho98= true; + if (m.equals("onPostCreate")) __ho137= true; + if (m.equals("hashCode")) __ho87= true; + if (m.equals("getMainLooper")) __ho65= true; + if (m.equals("getDir")) __ho54= true; + if (m.equals("deleteFile")) __ho18= true; + if (m.equals("getTaskId")) __ho78= true; + if (m.equals("navigateUpTo")) __ho95= true; + if (m.equals("revokeUriPermission")) __ho173= true; + if (m.equals("finishActivity")) __ho36= true; + if (m.equals("finishFromChild")) __ho39= true; + if (m.equals("takeKeyEvents")) __ho209= true; + if (m.equals("overridePendingTransition")) __ho165= true; + if (m.equals("checkCallingPermission")) __ho5= true; + if (m.equals("enforceCallingPermission")) __ho28= true; + if (m.equals("unregisterForContextMenu")) __ho214= true; + if (m.equals("findViewById")) __ho34= true; + if (m.equals("onNavigateUp")) __ho130= true; + if (m.equals("enforceCallingOrSelfPermission")) __ho26= true; + if (m.equals("removeStickyBroadcastAsUser")) __ho172= true; + if (m.equals("onNavigateUpFromChild")) __ho131= true; + if (m.equals("isTaskRoot")) __ho93= true; + if (m.equals("getContentResolver")) __ho51= true; + if (m.equals("getPackageResourcePath")) __ho71= true; + if (m.equals("isFinishing")) __ho91= true; + if (m.equals("getIntent")) __ho60= true; + if (m.equals("onStop")) __ho150= true; + if (m.equals("onWindowStartingActionMode")) __ho159= true; + if (m.equals("enforceCallingOrSelfUriPermission")) __ho27= true; + if (m.equals("getDatabasePath")) __ho53= true; + if (m.equals("startActivityIfNeeded")) __ho198= true; + if (m.equals("getCacheDir")) __ho45= true; + if (m.equals("getTheme")) __ho79= true; + if (m.equals("checkCallingOrSelfPermission")) __ho3= true; + if (m.equals("setTheme")) __ho186= true; + if (m.equals("sendOrderedBroadcastAsUser")) __ho177= true; + if (m.equals("onCreatePanelMenu")) __ho115= true; + if (m.equals("onPostResume")) __ho138= true; + if (m.equals("bindService")) __ho2= true; + if (m.equals("isRestricted")) __ho92= true; + if (m.equals("onPreparePanel")) __ho142= true; + if (m.equals("checkCallingUriPermission")) __ho6= true; + if (m.equals("getSystemService")) __ho77= true; + if (m.equals("startSearch")) __ho205= true; + if (m.equals("getPackageCodePath")) __ho68= true; + if (m.equals("onContextItemSelected")) __ho107= true; + if (m.equals("onApplyThemeResource")) __ho100= true; + if (m.equals("onPause")) __ho136= true; + if (m.equals("finishActivityFromChild")) __ho37= true; + if (m.equals("startActivity")) __ho194= true; + if (m.equals("getLayoutInflater")) __ho62= true; + if (m.equals("startActionMode")) __ho192= true; + if (m.equals("grantUriPermission")) __ho85= true; + if (m.equals("onRetainNonConfigurationInstance")) __ho146= true; + if (m.equals("getAssets")) __ho43= true; + if (m.equals("onDestroy")) __ho119= true; + if (m.equals("onKeyUp")) __ho126= true; + if (m.equals("onMenuOpened")) __ho129= true; + if (m.equals("getExternalFilesDir")) __ho56= true; + if (m.equals("startManagingCursor")) __ho203= true; + if (m.equals("onPrepareDialog")) __ho139= true; + if (m.equals("openContextMenu")) __ho160= true; + if (m.equals("getCallingPackage")) __ho47= true; + if (m.equals("equals")) __ho32= true; + if (m.equals("onAttachFragment")) __ho101= true; + if (m.equals("hasWindowFocus")) __ho86= true; + if (m.equals("onSaveInstanceState")) __ho147= true; + if (m.equals("onCreateOptionsMenu")) __ho114= true; + if (m.equals("registerComponentCallbacks")) __ho168= true; + if (m.equals("sendOrderedBroadcast")) __ho176= true; + if (m.equals("sendBroadcastAsUser")) __ho175= true; + if (m.equals("getExternalCacheDir")) __ho55= true; + if (m.equals("startIntentSenderForResult")) __ho201= true; + if (m.equals("onLowMemory")) __ho127= true; + if (m.equals("onOptionsItemSelected")) __ho133= true; + if (m.equals("onCreateThumbnail")) __ho117= true; + if (m.equals("onStart")) __ho149= true; + if (m.equals("startNextMatchingActivity")) __ho204= true; + if (m.equals("onUserInteraction")) __ho155= true; + if (m.equals("onTrackballEvent")) __ho153= true; + if (m.equals("onTouchEvent")) __ho152= true; + if (m.equals("onUserLeaveHint")) __ho156= true; + if (m.equals("onResume")) __ho145= true; + if (m.equals("getPreferences")) __ho73= true; + if (m.equals("startService")) __ho206= true; + if (m.equals("onContextMenuClosed")) __ho108= true; + if (m.equals("registerReceiver")) __ho170= true; + if (m.equals("getPackageManager")) __ho69= true; + if (m.equals("onCreateView")) __ho118= true; + if (m.equals("onConfigurationChanged")) __ho105= true; + if (m.equals("onContentChanged")) __ho106= true; + if (m.equals("onCreateContextMenu")) __ho110= true; + if (m.equals("onPrepareNavigateUpTaskStack")) __ho140= true; + if (m.equals("getLastNonConfigurationInstance")) __ho61= true; + if (m.equals("onKeyDown")) __ho122= true; + if (m.equals("sendBroadcast")) __ho174= true; + if (m.equals("unbindService")) __ho212= true; + if (m.equals("createPendingResult")) __ho15= true; + if (m.equals("getBaseContext")) __ho44= true; + if (m.equals("registerForContextMenu")) __ho169= true; + if (m.equals("enforcePermission")) __ho30= true; + if (m.equals("checkUriPermission")) __ho8= true; + if (m.equals("dump")) __ho25= true; + if (m.equals("startIntentSenderFromChild")) __ho202= true; + if (m.equals("onCreate")) __ho109= true; + if (m.equals("clearWallpaper")) __ho9= true; + if (m.equals("onWindowFocusChanged")) __ho158= true; + if (m.equals("startActivityFromChild")) __ho196= true; + if (m.equals("onMenuItemSelected")) __ho128= true; + if (m.equals("onCreateDescription")) __ho111= true; + if (m.equals("getApplicationInfo")) __ho42= true; + if (m.equals("setContentView")) __ho182= true; + if (m.equals("unregisterReceiver")) __ho215= true; + if (m.equals("stopService")) __ho208= true; + if (m.equals("onDetachedFromWindow")) __ho120= true; + } + } + private boolean __ho0; + private boolean __ho1; + private boolean __ho2; + private boolean __ho3; + private boolean __ho4; + private boolean __ho5; + private boolean __ho6; + private boolean __ho7; + private boolean __ho8; + private boolean __ho9; + private boolean __ho10; + private boolean __ho11; + private boolean __ho12; + private boolean __ho13; + private boolean __ho14; + private boolean __ho15; + private boolean __ho16; + private boolean __ho17; + private boolean __ho18; + private boolean __ho19; + private boolean __ho20; + private boolean __ho21; + private boolean __ho22; + private boolean __ho23; + private boolean __ho24; + private boolean __ho25; + private boolean __ho26; + private boolean __ho27; + private boolean __ho28; + private boolean __ho29; + private boolean __ho30; + private boolean __ho31; + private boolean __ho32; + private boolean __ho33; + private boolean __ho34; + private boolean __ho35; + private boolean __ho36; + private boolean __ho37; + private boolean __ho38; + private boolean __ho39; + private boolean __ho40; + private boolean __ho41; + private boolean __ho42; + private boolean __ho43; + private boolean __ho44; + private boolean __ho45; + private boolean __ho46; + private boolean __ho47; + private boolean __ho48; + private boolean __ho49; + private boolean __ho50; + private boolean __ho51; + private boolean __ho52; + private boolean __ho53; + private boolean __ho54; + private boolean __ho55; + private boolean __ho56; + private boolean __ho57; + private boolean __ho58; + private boolean __ho59; + private boolean __ho60; + private boolean __ho61; + private boolean __ho62; + private boolean __ho63; + private boolean __ho64; + private boolean __ho65; + private boolean __ho66; + private boolean __ho67; + private boolean __ho68; + private boolean __ho69; + private boolean __ho70; + private boolean __ho71; + private boolean __ho72; + private boolean __ho73; + private boolean __ho74; + private boolean __ho75; + private boolean __ho76; + private boolean __ho77; + private boolean __ho78; + private boolean __ho79; + private boolean __ho80; + private boolean __ho81; + private boolean __ho82; + private boolean __ho83; + private boolean __ho84; + private boolean __ho85; + private boolean __ho86; + private boolean __ho87; + private boolean __ho88; + private boolean __ho89; + private boolean __ho90; + private boolean __ho91; + private boolean __ho92; + private boolean __ho93; + private boolean __ho94; + private boolean __ho95; + private boolean __ho96; + private boolean __ho97; + private boolean __ho98; + private boolean __ho99; + private boolean __ho100; + private boolean __ho101; + private boolean __ho102; + private boolean __ho103; + private boolean __ho104; + private boolean __ho105; + private boolean __ho106; + private boolean __ho107; + private boolean __ho108; + private boolean __ho109; + private boolean __ho110; + private boolean __ho111; + private boolean __ho112; + private boolean __ho113; + private boolean __ho114; + private boolean __ho115; + private boolean __ho116; + private boolean __ho117; + private boolean __ho118; + private boolean __ho119; + private boolean __ho120; + private boolean __ho121; + private boolean __ho122; + private boolean __ho123; + private boolean __ho124; + private boolean __ho125; + private boolean __ho126; + private boolean __ho127; + private boolean __ho128; + private boolean __ho129; + private boolean __ho130; + private boolean __ho131; + private boolean __ho132; + private boolean __ho133; + private boolean __ho134; + private boolean __ho135; + private boolean __ho136; + private boolean __ho137; + private boolean __ho138; + private boolean __ho139; + private boolean __ho140; + private boolean __ho141; + private boolean __ho142; + private boolean __ho143; + private boolean __ho144; + private boolean __ho145; + private boolean __ho146; + private boolean __ho147; + private boolean __ho148; + private boolean __ho149; + private boolean __ho150; + private boolean __ho151; + private boolean __ho152; + private boolean __ho153; + private boolean __ho154; + private boolean __ho155; + private boolean __ho156; + private boolean __ho157; + private boolean __ho158; + private boolean __ho159; + private boolean __ho160; + private boolean __ho161; + private boolean __ho162; + private boolean __ho163; + private boolean __ho164; + private boolean __ho165; + private boolean __ho166; + private boolean __ho167; + private boolean __ho168; + private boolean __ho169; + private boolean __ho170; + private boolean __ho171; + private boolean __ho172; + private boolean __ho173; + private boolean __ho174; + private boolean __ho175; + private boolean __ho176; + private boolean __ho177; + private boolean __ho178; + private boolean __ho179; + private boolean __ho180; + private boolean __ho181; + private boolean __ho182; + private boolean __ho183; + private boolean __ho184; + private boolean __ho185; + private boolean __ho186; + private boolean __ho187; + private boolean __ho188; + private boolean __ho189; + private boolean __ho190; + private boolean __ho191; + private boolean __ho192; + private boolean __ho193; + private boolean __ho194; + private boolean __ho195; + private boolean __ho196; + private boolean __ho197; + private boolean __ho198; + private boolean __ho199; + private boolean __ho200; + private boolean __ho201; + private boolean __ho202; + private boolean __ho203; + private boolean __ho204; + private boolean __ho205; + private boolean __ho206; + private boolean __ho207; + private boolean __ho208; + private boolean __ho209; + private boolean __ho210; + private boolean __ho211; + private boolean __ho212; + private boolean __ho213; + private boolean __ho214; + private boolean __ho215; } diff --git a/src/src/com/tns/NativeScriptApplication.java b/src/src/com/tns/NativeScriptApplication.java index dd2647d54..1b2a6235a 100644 --- a/src/src/com/tns/NativeScriptApplication.java +++ b/src/src/com/tns/NativeScriptApplication.java @@ -72,10 +72,6 @@ public int hashCode__super() { } public void setNativeScriptOverrides(java.lang.String[] overrides) { } - @Override - public void setNativeScriptOverride(String override) - { - } } public NativeScriptApplication() { super(); @@ -100,8 +96,6 @@ protected void attachBaseContext(android.content.Context param_0) { } else { super.attachBaseContext(param_0); } - - com.tns.Platform.installSecondaryDexes(this); } public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) { @@ -1302,13 +1296,13 @@ public boolean equals__super(java.lang.Object other) { public int hashCode__super() { return super.hashCode(); } -public void setNativeScriptOverrides(java.lang.String[] overrides) { + + public void setNativeScriptOverrides(java.lang.String[] overrides) { for (java.lang.String name: overrides) { setNativeScriptOverride(name); } } - @Override public void setNativeScriptOverride(String name) { if (name.equals("init")) { diff --git a/src/src/com/tns/Platform.java b/src/src/com/tns/Platform.java index bd3970f2b..85587a058 100644 --- a/src/src/com/tns/Platform.java +++ b/src/src/com/tns/Platform.java @@ -37,7 +37,7 @@ public class Platform private static native Object callJSMethodNative(int javaObjectID, String methodName, boolean isConstructor, Object... packagedArgs) throws NativeScriptException; - private static native String[] createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName, boolean createActivity, Object[] packagedCreationArgs); + private static native void createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName); private static native int generateNewObjectId(); @@ -66,8 +66,6 @@ public class Platform private final static Object keyNotFoundObject = new Object(); public final static String ApplicationAssetsPath = "app/"; - private static Object[] empty = new Object[0]; - private static String[] methodOverrides; private static int currentObjectId = -1; private static ExtractPolicy extractPolicy; @@ -129,11 +127,6 @@ public static int init(Context context) throws RuntimeException return appJavaObjectId; } - static void installSecondaryDexes(Context context) - { - com.tns.multidex.MultiDex.install(context); - } - public static void enableVerboseLogging() { IsLogEnabled = true; @@ -208,7 +201,7 @@ private static int cacheConstructor(String name, String className, Object[] args return ctorId; } - private static Object createInstance(Object[] args, String[] methodOverrides, int objectId, int constructorId) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, IOException + private static Object createInstance(Object[] args, int objectId, int constructorId) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, IOException { Constructor ctor = ctorCache.get(constructorId); boolean success = MethodResolver.convertConstructorArgs(ctor, args); @@ -237,14 +230,12 @@ private static Object createInstance(Object[] args, String[] methodOverrides, in try { Platform.currentObjectId = objectId; - Platform.methodOverrides = methodOverrides; instance = ctor.newInstance(args); makeInstanceStrong(instance, objectId); } finally { - Platform.methodOverrides = null; Platform.currentObjectId = -1; } @@ -271,65 +262,29 @@ private static void adjustAmountOfExternalAllocatedMemory() // one since it is not needed after bindings recompile. public static void initInstance(Object instance) { - initInstance(instance, empty); - } - - public static void initInstance(Object instance, Object... args) - { - String[] methodOverrides = Platform.methodOverrides; - - if (methodOverrides == null) - { - methodOverrides = createJSInstance(instance, args); - } - - if (instance instanceof NativeScriptHashCodeProvider) - { - NativeScriptHashCodeProvider obj = (NativeScriptHashCodeProvider) instance; - for (String name: methodOverrides) - { - obj.setNativeScriptOverride(name); - } - } - int objectId = Platform.currentObjectId; if (objectId != -1) { makeInstanceStrong(instance, objectId); - - Platform.currentObjectId = -1; + } + else + { + createJSInstance(instance); } } - private static String[] createJSInstance(Object instance, Object... args) + private static void createJSInstance(Object instance) { int javaObjectID = generateNewObjectId(); makeInstanceStrong(instance, javaObjectID); - Object[] packagedArgs = packageArgs(args); - String className = instance.getClass().getName(); - boolean isGeneratedProxy = instance instanceof NativeScriptHashCodeProvider; - boolean createActivity = instance instanceof Activity; - if (isGeneratedProxy && !createActivity) - { - className = instance.getClass().getSuperclass().getName(); - } - String[] methodOverrides = createJSInstanceNative(instance, javaObjectID, className, createActivity, packagedArgs); - - if (IsLogEnabled) - { - Log.d(DEFAULT_LOG_TAG, "JSInstance for " + instance.getClass().toString() + " created with overrides"); - for (Object methodOverride : methodOverrides) - { - Log.d(DEFAULT_LOG_TAG, methodOverride.toString()); - } - } + createJSInstanceNative(instance, javaObjectID, className); - return methodOverrides; + if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "JSInstance for " + instance.getClass().toString() + " created with overrides"); } private static String[] getTypeMetadata(String className, int index) throws ClassNotFoundException @@ -477,16 +432,6 @@ public int compare(Method lhs, Method rhs) } }; - public static int makeClassInstanceOfTypeStrong(String classPath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException - { - if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "Making Class instance of " + classPath + " strong"); - Class clazz = Class.forName(classPath.replace('/', '.')); - int key = generateNewObjectId(); - makeInstanceStrong(clazz, key); - if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "Class of " + classPath + " made strong id:" + key); - return key; - } - private static void makeInstanceStrong(Object instance, int objectId) { if (instance == null) @@ -660,7 +605,7 @@ public static Object callJSMethod(Object javaObject, String methodName, boolean // (typeid, javaObjectID, canonicalName) // if javaObject has no javaObjecID meaning javascript object does not // exists for this object we assign one. - private static Object[] packageArgs(Object... args) + static Object[] packageArgs(Object... args) { int len = (args != null) ? (args.length * 3) : 0; Object[] packagedArgs = new Object[len]; diff --git a/src/src/com/tns/internal/DefaultExtractPolicy.java b/src/src/com/tns/internal/DefaultExtractPolicy.java index dbaf69cde..a67b600cf 100644 --- a/src/src/com/tns/internal/DefaultExtractPolicy.java +++ b/src/src/com/tns/internal/DefaultExtractPolicy.java @@ -1,17 +1,129 @@ package com.tns.internal; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.util.Log; + +import com.tns.Platform; + public class DefaultExtractPolicy implements ExtractPolicy { + private final static String ASSETS_THUMB_FILENAME = "assetsThumb"; + public boolean shouldExtract(android.content.Context context) { - return true; + String assetsThumb = generateAssetsThumb(context); + if (assetsThumb != null) + { + String assetsThumbFilePath = context.getFilesDir().getPath() + File.separatorChar + ASSETS_THUMB_FILENAME; + String oldAssetsThumb = getCachedAssetsThumb(assetsThumbFilePath); + if (oldAssetsThumb == null || !assetsThumb.equals(oldAssetsThumb)) + { + saveNewAssetsThumb(assetsThumb, assetsThumbFilePath); + return true; + } + } + + return false; } + public boolean forceOverwrite() { return true; } + public FileExtractor extractor() { return null; } + + private static String generateAssetsThumb(Context context) + { + try + { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + int code = packageInfo.versionCode; + long updateTime = packageInfo.lastUpdateTime; + return String.valueOf(updateTime) + "-" + String.valueOf(code); + } + catch (PackageManager.NameNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current assets thumb"); + e.printStackTrace(); + } + + return null; + } + + private static String getCachedAssetsThumb(String assetsThumbFilePath) + { + try + { + File cachedThumbFile = new File(assetsThumbFilePath); + if (cachedThumbFile.exists()) + { + FileInputStream in = new FileInputStream(cachedThumbFile); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + String cachedThumb = reader.readLine(); + reader.close(); + in.close(); + return cachedThumb; + } + } + catch (FileNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current assets thumb"); + e.printStackTrace(); + } + catch (IOException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current asstes thumb"); + e.printStackTrace(); + } + + return null; + } + + private void saveNewAssetsThumb(String newThumb, String assetsThumbFile) + { + File cachedThumbFile = new File(assetsThumbFile); + try + { + FileOutputStream out = new FileOutputStream(cachedThumbFile, false); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); + try + { + writer.write(newThumb); + writer.newLine(); + writer.flush(); + } + finally + { + writer.close(); + out.close(); + } + } + catch (FileNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while writting current assets thumb"); + e.printStackTrace(); + } + catch (IOException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while writting current assets thumb"); + e.printStackTrace(); + } + } + } diff --git a/src/src/com/tns/multidex/MultiDex.java b/src/src/com/tns/multidex/MultiDex.java deleted file mode 100644 index 3b97ac3e3..000000000 --- a/src/src/com/tns/multidex/MultiDex.java +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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 com.tns.multidex; - -import android.app.Application; -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Build; -import android.util.Log; -import dalvik.system.DexFile; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipFile; - -/** - * Monkey patches {@link Context#getClassLoader() the application context class - * loader} in order to load classes from more than one dex file. The primary - * {@code classes.dex} must contain the classes necessary for calling this class - * methods. Secondary dex files named classes2.dex, classes3.dex... found in the - * application apk will be added to the classloader after first call to - * {@link #install(Context)}. - * - *

- * This library provides compatibility for platforms with API level 4 through - * 20. This library does nothing on newer versions of the platform which provide - * built-in support for secondary dex files. - */ -public final class MultiDex -{ - - static final String TAG = "MultiDex"; - - private static final String OLD_SECONDARY_FOLDER_NAME = "secondary-dexes"; - - private static final String SECONDARY_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes"; - - private static final int MAX_SUPPORTED_SDK_VERSION = 20; - - private static final int MIN_SDK_VERSION = 4; - - private static final int VM_WITH_MULTIDEX_VERSION_MAJOR = 2; - - private static final int VM_WITH_MULTIDEX_VERSION_MINOR = 1; - - private static final Set installedApk = new HashSet(); - - private static final boolean IS_VM_MULTIDEX_CAPABLE = isVMMultidexCapable(System.getProperty("java.vm.version")); - - private MultiDex() - { - } - - /** - * Patches the application context class loader by appending extra dex files - * loaded from the application apk. This method should be called in the - * attachBaseContext of your {@link Application}, see - * {@link MultiDexApplication} for more explanation and an example. - * - * @param context - * application context. - * @throws RuntimeException - * if an error occurred preventing the classloader extension. - */ - public static void install(Context context) - { - Log.i(TAG, "install"); - if (IS_VM_MULTIDEX_CAPABLE) - { - Log.i(TAG, "VM has multidex support, MultiDex support library is disabled."); - return; - } - - if (Build.VERSION.SDK_INT < MIN_SDK_VERSION) - { - throw new RuntimeException("Multi dex installation failed. SDK " + Build.VERSION.SDK_INT + " is unsupported. Min SDK version is " + MIN_SDK_VERSION + "."); - } - - try - { - ApplicationInfo applicationInfo = getApplicationInfo(context); - if (applicationInfo == null) - { - // Looks like running on a test Context, so just return without - // patching. - return; - } - - synchronized (installedApk) - { - String apkPath = applicationInfo.sourceDir; - if (installedApk.contains(apkPath)) - { - return; - } - installedApk.add(apkPath); - - if (Build.VERSION.SDK_INT > MAX_SUPPORTED_SDK_VERSION) - { - Log.w(TAG, "MultiDex is not guaranteed to work in SDK version " + Build.VERSION.SDK_INT + ": SDK version higher than " + MAX_SUPPORTED_SDK_VERSION + " should be backed by " + "runtime with built-in multidex capabilty but it's not the " + "case here: java.vm.version=\"" + System.getProperty("java.vm.version") + "\""); - } - - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional - * DEX file entries. - */ - ClassLoader loader; - try - { - loader = context.getClassLoader(); - } - catch (RuntimeException e) - { - /* - * Ignore those exceptions so that we don't break tests - * relying on Context like a android.test.mock.MockContext - * or a android.content.ContextWrapper with a null base - * Context. - */ - Log.w(TAG, "Failure while trying to obtain Context class loader. " + "Must be running in test mode. Skip patching.", e); - return; - } - if (loader == null) - { - // Note, the context class loader is null when running - // Robolectric tests. - Log.e(TAG, "Context class loader is null. Must be running in test mode. " + "Skip patching."); - return; - } - - try - { - clearOldDexDir(context); - } - catch (Throwable t) - { - Log.w(TAG, "Something went wrong when trying to clear old MultiDex extraction, " + "continuing without cleaning.", t); - } - - File dexDir = new File(applicationInfo.dataDir, SECONDARY_FOLDER_NAME); - List files = MultiDexExtractor.load(context, applicationInfo, dexDir, false); - if (checkValidZipFiles(files)) - { - installSecondaryDexes(loader, dexDir, files); - } - else - { - Log.w(TAG, "Files were not valid zip files. Forcing a reload."); - // Try again, but this time force a reload of the zip file. - files = MultiDexExtractor.load(context, applicationInfo, dexDir, true); - - if (checkValidZipFiles(files)) - { - installSecondaryDexes(loader, dexDir, files); - } - else - { - // Second time didn't work, give up - throw new RuntimeException("Zip files were not valid."); - } - } - } - - } - catch (Exception e) - { - Log.e(TAG, "Multidex installation failure", e); - throw new RuntimeException("Multi dex installation failed (" + e.getMessage() + ")."); - } - Log.i(TAG, "install done"); - } - - private static ApplicationInfo getApplicationInfo(Context context) throws NameNotFoundException - { - PackageManager pm; - String packageName; - try - { - pm = context.getPackageManager(); - packageName = context.getPackageName(); - } - catch (RuntimeException e) - { - /* - * Ignore those exceptions so that we don't break tests relying on - * Context like a android.test.mock.MockContext or a - * android.content.ContextWrapper with a null base Context. - */ - Log.w(TAG, "Failure while trying to obtain ApplicationInfo from Context. " + "Must be running in test mode. Skip patching.", e); - return null; - } - if (pm == null || packageName == null) - { - // This is most likely a mock context, so just return without - // patching. - return null; - } - ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); - return applicationInfo; - } - - /** - * Identifies if the current VM has a native support for multidex, meaning - * there is no need for additional installation by this library. - * - * @return true if the VM handles multidex - */ - /* package visible for test */ - static boolean isVMMultidexCapable(String versionString) - { - // quick and dirty hack for Android 5 until dex files are located in apk - // root - return false; - /* - * boolean isMultidexCapable = false; if (versionString != null) { - * Matcher matcher = - * Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?").matcher(versionString); - * if (matcher.matches()) { try { int major = - * Integer.parseInt(matcher.group(1)); int minor = - * Integer.parseInt(matcher.group(2)); isMultidexCapable = (major > - * VM_WITH_MULTIDEX_VERSION_MAJOR) || ((major == - * VM_WITH_MULTIDEX_VERSION_MAJOR) && (minor >= - * VM_WITH_MULTIDEX_VERSION_MINOR)); } catch (NumberFormatException e) { - * // let isMultidexCapable be false } } } Log.i(TAG, "VM with version " - * + versionString + (isMultidexCapable ? " has multidex support" : - * " does not have multidex support")); return isMultidexCapable; - */ - } - - public static void installSecondaryDexes(ClassLoader loader, File dexDir, List files) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException, IOException - { - if (!files.isEmpty()) - { - if (Build.VERSION.SDK_INT >= 19) - { - V19.install(loader, files, dexDir); - } - else if (Build.VERSION.SDK_INT >= 14) - { - V14.install(loader, files, dexDir); - } - else - { - V4.install(loader, files); - } - } - } - - /** - * Returns whether all files in the list are valid zip files. If - * {@code files} is empty, then returns true. - */ - private static boolean checkValidZipFiles(List files) - { - for (File file : files) - { - if (!MultiDexExtractor.verifyZipFile(file)) - { - return false; - } - } - return true; - } - - /** - * Locates a given field anywhere in the class inheritance hierarchy. - * - * @param instance - * an object to search the field into. - * @param name - * field name - * @return a field object - * @throws NoSuchFieldException - * if the field cannot be located - */ - private static Field findField(Object instance, String name) throws NoSuchFieldException - { - for (Class clazz = instance.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - try - { - Field field = clazz.getDeclaredField(name); - - if (!field.isAccessible()) - { - field.setAccessible(true); - } - - return field; - } - catch (NoSuchFieldException e) - { - // ignore and search next - } - } - - throw new NoSuchFieldException("Field " + name + " not found in " + instance.getClass()); - } - - /** - * Locates a given method anywhere in the class inheritance hierarchy. - * - * @param instance - * an object to search the method into. - * @param name - * method name - * @param parameterTypes - * method parameter types - * @return a method object - * @throws NoSuchMethodException - * if the method cannot be located - */ - private static Method findMethod(Object instance, String name, Class... parameterTypes) throws NoSuchMethodException - { - for (Class clazz = instance.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - try - { - Method method = clazz.getDeclaredMethod(name, parameterTypes); - - if (!method.isAccessible()) - { - method.setAccessible(true); - } - - return method; - } - catch (NoSuchMethodException e) - { - // ignore and search next - } - } - - throw new NoSuchMethodException("Method " + name + " with parameters " + Arrays.asList(parameterTypes) + " not found in " + instance.getClass()); - } - - /** - * Replace the value of a field containing a non null array, by a new array - * containing the elements of the original array plus the elements of - * extraElements. - * - * @param instance - * the instance whose field is to be modified. - * @param fieldName - * the field to modify. - * @param extraElements - * elements to append at the end of the array. - */ - private static void expandFieldArray(Object instance, String fieldName, Object[] extraElements) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException - { - Field jlrField = findField(instance, fieldName); - Object[] original = (Object[]) jlrField.get(instance); - Object[] combined = (Object[]) Array.newInstance(original.getClass().getComponentType(), original.length + extraElements.length); - System.arraycopy(original, 0, combined, 0, original.length); - System.arraycopy(extraElements, 0, combined, original.length, extraElements.length); - jlrField.set(instance, combined); - } - - private static void clearOldDexDir(Context context) throws Exception - { - File dexDir = new File(context.getFilesDir(), OLD_SECONDARY_FOLDER_NAME); - if (dexDir.isDirectory()) - { - Log.i(TAG, "Clearing old secondary dex dir (" + dexDir.getPath() + ")."); - File[] files = dexDir.listFiles(); - if (files == null) - { - Log.w(TAG, "Failed to list secondary dex dir content (" + dexDir.getPath() + ")."); - return; - } - for (File oldFile : files) - { - Log.i(TAG, "Trying to delete old file " + oldFile.getPath() + " of size " + oldFile.length()); - if (!oldFile.delete()) - { - Log.w(TAG, "Failed to delete old file " + oldFile.getPath()); - } - else - { - Log.i(TAG, "Deleted old file " + oldFile.getPath()); - } - } - if (!dexDir.delete()) - { - Log.w(TAG, "Failed to delete secondary dex dir " + dexDir.getPath()); - } - else - { - Log.i(TAG, "Deleted old secondary dex dir " + dexDir.getPath()); - } - } - } - - /** - * Installer for platform versions 19. - */ - private static final class V19 - { - - private static void install(ClassLoader loader, List additionalClassPathEntries, File optimizedDirectory) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional DEX - * file entries. - */ - Field pathListField = findField(loader, "pathList"); - Object dexPathList = pathListField.get(loader); - ArrayList suppressedExceptions = new ArrayList(); - expandFieldArray(dexPathList, "dexElements", makeDexElements(dexPathList, new ArrayList(additionalClassPathEntries), optimizedDirectory, suppressedExceptions)); - if (suppressedExceptions.size() > 0) - { - for (IOException e : suppressedExceptions) - { - Log.w(TAG, "Exception in makeDexElement", e); - } - Field suppressedExceptionsField = findField(loader, "dexElementsSuppressedExceptions"); - IOException[] dexElementsSuppressedExceptions = (IOException[]) suppressedExceptionsField.get(loader); - - if (dexElementsSuppressedExceptions == null) - { - dexElementsSuppressedExceptions = suppressedExceptions.toArray(new IOException[suppressedExceptions.size()]); - } - else - { - IOException[] combined = new IOException[suppressedExceptions.size() + dexElementsSuppressedExceptions.length]; - suppressedExceptions.toArray(combined); - System.arraycopy(dexElementsSuppressedExceptions, 0, combined, suppressedExceptions.size(), dexElementsSuppressedExceptions.length); - dexElementsSuppressedExceptions = combined; - } - - suppressedExceptionsField.set(loader, dexElementsSuppressedExceptions); - } - } - - /** - * A wrapper around - * {@code private static final dalvik.system.DexPathList#makeDexElements} - * . - */ - private static Object[] makeDexElements(Object dexPathList, ArrayList files, File optimizedDirectory, ArrayList suppressedExceptions) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException - { - Method makeDexElements = findMethod(dexPathList, "makeDexElements", ArrayList.class, File.class, ArrayList.class); - - return (Object[]) makeDexElements.invoke(dexPathList, files, optimizedDirectory, suppressedExceptions); - } - } - - /** - * Installer for platform versions 14, 15, 16, 17 and 18. - */ - private static final class V14 - { - - private static void install(ClassLoader loader, List additionalClassPathEntries, File optimizedDirectory) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional DEX - * file entries. - */ - Field pathListField = findField(loader, "pathList"); - Object dexPathList = pathListField.get(loader); - expandFieldArray(dexPathList, "dexElements", makeDexElements(dexPathList, new ArrayList(additionalClassPathEntries), optimizedDirectory)); - } - - /** - * A wrapper around - * {@code private static final dalvik.system.DexPathList#makeDexElements} - * . - */ - private static Object[] makeDexElements(Object dexPathList, ArrayList files, File optimizedDirectory) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException - { - Method makeDexElements = findMethod(dexPathList, "makeDexElements", ArrayList.class, File.class); - - return (Object[]) makeDexElements.invoke(dexPathList, files, optimizedDirectory); - } - } - - /** - * Installer for platform versions 4 to 13. - */ - private static final class V4 - { - private static void install(ClassLoader loader, List additionalClassPathEntries) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, IOException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.DexClassLoader. We modify its fields mPaths, - * mFiles, mZips and mDexs to append additional DEX file entries. - */ - int extraSize = additionalClassPathEntries.size(); - - Field pathField = findField(loader, "path"); - - StringBuilder path = new StringBuilder((String) pathField.get(loader)); - String[] extraPaths = new String[extraSize]; - File[] extraFiles = new File[extraSize]; - ZipFile[] extraZips = new ZipFile[extraSize]; - DexFile[] extraDexs = new DexFile[extraSize]; - for (ListIterator iterator = additionalClassPathEntries.listIterator(); iterator.hasNext();) - { - File additionalEntry = iterator.next(); - String entryPath = additionalEntry.getAbsolutePath(); - path.append(':').append(entryPath); - int index = iterator.previousIndex(); - extraPaths[index] = entryPath; - extraFiles[index] = additionalEntry; - extraZips[index] = new ZipFile(additionalEntry); - extraDexs[index] = DexFile.loadDex(entryPath, entryPath + ".dex", 0); - } - - pathField.set(loader, path.toString()); - expandFieldArray(loader, "mPaths", extraPaths); - expandFieldArray(loader, "mFiles", extraFiles); - expandFieldArray(loader, "mZips", extraZips); - expandFieldArray(loader, "mDexs", extraDexs); - } - } - -} diff --git a/src/src/com/tns/multidex/MultiDexExtractor.java b/src/src/com/tns/multidex/MultiDexExtractor.java deleted file mode 100644 index 7a8df1b34..000000000 --- a/src/src/com/tns/multidex/MultiDexExtractor.java +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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 com.tns.multidex; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.os.Build; -import android.util.Log; - -import java.io.BufferedOutputStream; -import java.io.Closeable; -import java.io.File; -import java.io.FileFilter; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; - -/** - * Exposes application secondary dex files as files in the application data - * directory. - */ -final class MultiDexExtractor -{ - - private static final String TAG = MultiDex.TAG; - - /** - * We look for additional dex files named {@code classes2.dex}, - * {@code classes3.dex}, etc. - */ - private static final String DEX_PREFIX = "classes"; - private static final String DEX_SUFFIX = ".dex"; - - private static final String EXTRACTED_NAME_EXT = ".classes"; - private static final String EXTRACTED_SUFFIX = ".zip"; - private static final int MAX_EXTRACT_ATTEMPTS = 3; - - private static final String PREFS_FILE = "multidex.version"; - private static final String KEY_TIME_STAMP = "timestamp"; - private static final String KEY_CRC = "crc"; - private static final String KEY_DEX_NUMBER = "dex.number"; - - /** - * Size of reading buffers. - */ - private static final int BUFFER_SIZE = 0x4000; - /* Keep value away from 0 because it is a too probable time stamp value */ - private static final long NO_VALUE = -1L; - - /** - * Extracts application secondary dexes into files in the application data - * directory. - * - * @return a list of files that were created. The list may be empty if there - * are no secondary dex files. - * @throws IOException - * if encounters a problem while reading or writing secondary - * dex files - */ - static List load(Context context, ApplicationInfo applicationInfo, File dexDir, boolean forceReload) throws IOException - { - Log.i(TAG, "MultiDexExtractor.load(" + applicationInfo.sourceDir + ", " + forceReload + ")"); - final File sourceApk = new File(applicationInfo.sourceDir); - - long currentCrc = getZipCrc(sourceApk); - - List files; - if (!forceReload && !isModified(context, sourceApk, currentCrc)) - { - try - { - files = loadExistingExtractions(context, sourceApk, dexDir); - } - catch (IOException ioe) - { - Log.w(TAG, "Failed to reload existing extracted secondary dex files," + " falling back to fresh extraction", ioe); - files = performExtractions(sourceApk, dexDir); - putStoredApkInfo(context, getTimeStamp(sourceApk), currentCrc, files.size() + 1); - - } - } - else - { - Log.i(TAG, "Detected that extraction must be performed."); - files = performExtractions(sourceApk, dexDir); - putStoredApkInfo(context, getTimeStamp(sourceApk), currentCrc, files.size() + 1); - } - - Log.i(TAG, "load found " + files.size() + " secondary dex files"); - return files; - } - - private static List loadExistingExtractions(Context context, File sourceApk, File dexDir) throws IOException - { - Log.i(TAG, "loading existing secondary dex files"); - - final String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT; - int totalDexNumber = getMultiDexPreferences(context).getInt(KEY_DEX_NUMBER, 1); - final List files = new ArrayList(totalDexNumber); - - for (int secondaryNumber = 2; secondaryNumber <= totalDexNumber; secondaryNumber++) - { - String fileName = extractedFilePrefix + secondaryNumber + EXTRACTED_SUFFIX; - File extractedFile = new File(dexDir, fileName); - if (extractedFile.isFile()) - { - files.add(extractedFile); - if (!verifyZipFile(extractedFile)) - { - Log.i(TAG, "Invalid zip file: " + extractedFile); - throw new IOException("Invalid ZIP file."); - } - } - else - { - throw new IOException("Missing extracted secondary dex file '" + extractedFile.getPath() + "'"); - } - } - - return files; - } - - private static boolean isModified(Context context, File archive, long currentCrc) - { - SharedPreferences prefs = getMultiDexPreferences(context); - return (prefs.getLong(KEY_TIME_STAMP, NO_VALUE) != getTimeStamp(archive)) || (prefs.getLong(KEY_CRC, NO_VALUE) != currentCrc); - } - - private static long getTimeStamp(File archive) - { - long timeStamp = archive.lastModified(); - if (timeStamp == NO_VALUE) - { - // never return NO_VALUE - timeStamp--; - } - return timeStamp; - } - - private static long getZipCrc(File archive) throws IOException - { - long computedValue = ZipUtil.getZipCrc(archive); - if (computedValue == NO_VALUE) - { - // never return NO_VALUE - computedValue--; - } - return computedValue; - } - - private static List performExtractions(File sourceApk, File dexDir) throws IOException - { - - final String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT; - - // Ensure that whatever deletions happen in prepareDexDir only happen if - // the zip that - // contains a secondary dex file in there is not consistent with the - // latest apk. Otherwise, - // multi-process race conditions can cause a crash loop where one - // process deletes the zip - // while another had created it. - prepareDexDir(dexDir, extractedFilePrefix); - - List files = new ArrayList(); - - final ZipFile apk = new ZipFile(sourceApk); - try - { - - int secondaryNumber = 2; - - String dexName = "assets/bindings/" + DEX_PREFIX + secondaryNumber + DEX_SUFFIX; - ZipEntry dexFile = apk.getEntry(dexName); - while (dexFile != null) - { - String fileName = extractedFilePrefix + secondaryNumber + EXTRACTED_SUFFIX; - File extractedFile = new File(dexDir, fileName); - files.add(extractedFile); - - Log.i(TAG, "Extraction is needed for file " + extractedFile); - int numAttempts = 0; - boolean isExtractionSuccessful = false; - while (numAttempts < MAX_EXTRACT_ATTEMPTS && !isExtractionSuccessful) - { - numAttempts++; - - // Create a zip file (extractedFile) containing only the - // secondary dex file - // (dexFile) from the apk. - extract(apk, dexFile, extractedFile, extractedFilePrefix); - - // Verify that the extracted file is indeed a zip file. - isExtractionSuccessful = verifyZipFile(extractedFile); - - // Log the sha1 of the extracted zip file - Log.i(TAG, "Extraction " + (isExtractionSuccessful ? "success" : "failed") + " - length " + extractedFile.getAbsolutePath() + ": " + extractedFile.length()); - if (!isExtractionSuccessful) - { - // Delete the extracted file - extractedFile.delete(); - if (extractedFile.exists()) - { - Log.w(TAG, "Failed to delete corrupted secondary dex '" + extractedFile.getPath() + "'"); - } - } - } - if (!isExtractionSuccessful) - { - throw new IOException("Could not create zip file " + extractedFile.getAbsolutePath() + " for secondary dex (" + secondaryNumber + ")"); - } - secondaryNumber++; - dexName = "assets/bindings/" + DEX_PREFIX + secondaryNumber + DEX_SUFFIX; - // dexFile = apk.getEntry(DEX_PREFIX + secondaryNumber + - // DEX_SUFFIX); - dexFile = apk.getEntry(dexName); - } - } - finally - { - try - { - apk.close(); - } - catch (IOException e) - { - Log.w(TAG, "Failed to close resource", e); - } - } - - return files; - } - - private static void putStoredApkInfo(Context context, long timeStamp, long crc, int totalDexNumber) - { - SharedPreferences prefs = getMultiDexPreferences(context); - SharedPreferences.Editor edit = prefs.edit(); - edit.putLong(KEY_TIME_STAMP, timeStamp); - edit.putLong(KEY_CRC, crc); - /* - * SharedPreferences.Editor doc says that apply() and commit() - * "atomically performs the requested modifications" it should be OK to - * rely on saving the dex files number (getting old number value would - * go along with old crc and time stamp). - */ - edit.putInt(KEY_DEX_NUMBER, totalDexNumber); - apply(edit); - } - - private static SharedPreferences getMultiDexPreferences(Context context) - { - return context.getSharedPreferences(PREFS_FILE, Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? Context.MODE_PRIVATE : Context.MODE_PRIVATE | Context.MODE_MULTI_PROCESS); - } - - /** - * This removes any files that do not have the correct prefix. - */ - private static void prepareDexDir(File dexDir, final String extractedFilePrefix) throws IOException - { - dexDir.mkdirs(); - if (!dexDir.isDirectory()) - { - throw new IOException("Failed to create dex directory " + dexDir.getPath()); - } - - // Clean possible old files - FileFilter filter = new FileFilter() - { - - @Override - public boolean accept(File pathname) - { - return !pathname.getName().startsWith(extractedFilePrefix); - } - }; - File[] files = dexDir.listFiles(filter); - if (files == null) - { - Log.w(TAG, "Failed to list secondary dex dir content (" + dexDir.getPath() + ")."); - return; - } - for (File oldFile : files) - { - Log.i(TAG, "Trying to delete old file " + oldFile.getPath() + " of size " + oldFile.length()); - if (!oldFile.delete()) - { - Log.w(TAG, "Failed to delete old file " + oldFile.getPath()); - } - else - { - Log.i(TAG, "Deleted old file " + oldFile.getPath()); - } - } - } - - private static void extract(ZipFile apk, ZipEntry dexFile, File extractTo, String extractedFilePrefix) throws IOException, FileNotFoundException - { - - InputStream in = apk.getInputStream(dexFile); - ZipOutputStream out = null; - File tmp = File.createTempFile(extractedFilePrefix, EXTRACTED_SUFFIX, extractTo.getParentFile()); - Log.i(TAG, "Extracting " + tmp.getPath()); - try - { - out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tmp))); - try - { - ZipEntry classesDex = new ZipEntry("classes.dex"); - // keep zip entry time since it is the criteria used by Dalvik - classesDex.setTime(dexFile.getTime()); - out.putNextEntry(classesDex); - - byte[] buffer = new byte[BUFFER_SIZE]; - int length = in.read(buffer); - while (length != -1) - { - out.write(buffer, 0, length); - length = in.read(buffer); - } - out.closeEntry(); - } - finally - { - out.close(); - } - Log.i(TAG, "Renaming to " + extractTo.getPath()); - if (!tmp.renameTo(extractTo)) - { - throw new IOException("Failed to rename \"" + tmp.getAbsolutePath() + "\" to \"" + extractTo.getAbsolutePath() + "\""); - } - } - finally - { - closeQuietly(in); - tmp.delete(); // return status ignored - } - } - - /** - * Returns whether the file is a valid zip file. - */ - static boolean verifyZipFile(File file) - { - try - { - ZipFile zipFile = new ZipFile(file); - try - { - zipFile.close(); - return true; - } - catch (IOException e) - { - Log.w(TAG, "Failed to close zip file: " + file.getAbsolutePath()); - } - } - catch (ZipException ex) - { - Log.w(TAG, "File " + file.getAbsolutePath() + " is not a valid zip file.", ex); - } - catch (IOException ex) - { - Log.w(TAG, "Got an IOException trying to open zip file: " + file.getAbsolutePath(), ex); - } - return false; - } - - /** - * Closes the given {@code Closeable}. Suppresses any IO exceptions. - */ - private static void closeQuietly(Closeable closeable) - { - try - { - closeable.close(); - } - catch (IOException e) - { - Log.w(TAG, "Failed to close resource", e); - } - } - - // The following is taken from SharedPreferencesCompat to avoid having a - // dependency of the - // multidex support library on another support library. - private static Method sApplyMethod; // final - static - { - try - { - Class cls = SharedPreferences.Editor.class; - sApplyMethod = cls.getMethod("apply"); - } - catch (NoSuchMethodException unused) - { - sApplyMethod = null; - } - } - - private static void apply(SharedPreferences.Editor editor) - { - if (sApplyMethod != null) - { - try - { - sApplyMethod.invoke(editor); - return; - } - catch (InvocationTargetException unused) - { - // fall through - } - catch (IllegalAccessException unused) - { - // fall through - } - } - editor.commit(); - } -} diff --git a/src/src/com/tns/multidex/ZipUtil.java b/src/src/com/tns/multidex/ZipUtil.java deleted file mode 100644 index 5927b0b6f..000000000 --- a/src/src/com/tns/multidex/ZipUtil.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -/* Apache Harmony HEADER because the code in this class comes mostly from ZipFile, ZipEntry and - * ZipConstants from android libcore. - */ - -package com.tns.multidex; - -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.util.zip.CRC32; -import java.util.zip.ZipException; - -/** - * Tools to build a quick partial crc of zip files. - */ -final class ZipUtil -{ - static class CentralDirectory - { - long offset; - long size; - } - - /* - * redefine those constant here because of bug 13721174 preventing to - * compile using the constants defined in ZipFile - */ - private static final int ENDHDR = 22; - private static final int ENDSIG = 0x6054b50; - - /** - * Size of reading buffers. - */ - private static final int BUFFER_SIZE = 0x4000; - - /** - * Compute crc32 of the central directory of an apk. The central directory - * contains the crc32 of each entries in the zip so the computed result is - * considered valid for the whole zip file. Does not support zip64 nor - * multidisk but it should be OK for now since ZipFile does not either. - */ - static long getZipCrc(File apk) throws IOException - { - RandomAccessFile raf = new RandomAccessFile(apk, "r"); - try - { - CentralDirectory dir = findCentralDirectory(raf); - - return computeCrcOfCentralDir(raf, dir); - } - finally - { - raf.close(); - } - } - - /* Package visible for testing */ - static CentralDirectory findCentralDirectory(RandomAccessFile raf) throws IOException, ZipException - { - long scanOffset = raf.length() - ENDHDR; - if (scanOffset < 0) - { - throw new ZipException("File too short to be a zip file: " + raf.length()); - } - - long stopOffset = scanOffset - 0x10000 /* - * ".ZIP file comment"'s max - * length - */; - if (stopOffset < 0) - { - stopOffset = 0; - } - - int endSig = Integer.reverseBytes(ENDSIG); - while (true) - { - raf.seek(scanOffset); - if (raf.readInt() == endSig) - { - break; - } - - scanOffset--; - if (scanOffset < stopOffset) - { - throw new ZipException("End Of Central Directory signature not found"); - } - } - // Read the End Of Central Directory. ENDHDR includes the signature - // bytes, - // which we've already read. - - // Pull out the information we need. - raf.skipBytes(2); // diskNumber - raf.skipBytes(2); // diskWithCentralDir - raf.skipBytes(2); // numEntries - raf.skipBytes(2); // totalNumEntries - CentralDirectory dir = new CentralDirectory(); - dir.size = Integer.reverseBytes(raf.readInt()) & 0xFFFFFFFFL; - dir.offset = Integer.reverseBytes(raf.readInt()) & 0xFFFFFFFFL; - return dir; - } - - /* Package visible for testing */ - static long computeCrcOfCentralDir(RandomAccessFile raf, CentralDirectory dir) throws IOException - { - CRC32 crc = new CRC32(); - long stillToRead = dir.size; - raf.seek(dir.offset); - int length = (int) Math.min(BUFFER_SIZE, stillToRead); - byte[] buffer = new byte[BUFFER_SIZE]; - length = raf.read(buffer, 0, length); - while (length != -1) - { - crc.update(buffer, 0, length); - stillToRead -= length; - if (stillToRead == 0) - { - break; - } - length = (int) Math.min(BUFFER_SIZE, stillToRead); - length = raf.read(buffer, 0, length); - } - return crc.getValue(); - } -} diff --git a/test-app/.settings/org.eclipse.jdt.core.prefs b/test-app/.settings/org.eclipse.jdt.core.prefs index 7341ab168..d17b6724d 100644 --- a/test-app/.settings/org.eclipse.jdt.core.prefs +++ b/test-app/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,6 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.7 diff --git a/test-app/AndroidManifest.xml b/test-app/AndroidManifest.xml index 6f8a1f6be..714a14ed6 100644 --- a/test-app/AndroidManifest.xml +++ b/test-app/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:targetSdkVersion="22" /> diff --git a/test-app/ant.properties b/test-app/ant.properties new file mode 100644 index 000000000..e009510c5 --- /dev/null +++ b/test-app/ant.properties @@ -0,0 +1,4 @@ +key.store.password=aaaaaa +key.alias.password=aaaaaa +key.store=./custom_sign.keystore +key.alias=aaaa-alias \ No newline at end of file diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js new file mode 100644 index 000000000..81b04095c --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js @@ -0,0 +1,139 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +var jasmineRequire = require('./jasmine'); +var JUnitXmlReporter = require('../jasmine-reporters/junit_reporter').JUnitXmlReporter; +var TerminalReporter = require('../jasmine-reporters/terminal_reporter').TerminalReporter; + +(function() { + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + var jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + it: function(desc, func) { + return env.it(desc, func); + }, + + xit: function(desc, func) { + return env.xit(desc, func); + }, + + beforeEach: function(beforeEachFunction) { + return env.beforeEach(beforeEachFunction); + }, + + afterEach: function(afterEachFunction) { + return env.afterEach(afterEachFunction); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending(); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + execute: function() { + return env.execute(); + }, + + jasmine: jasmine + }; + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof global == "object") { + extend(global, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * Expose the interface for adding custom equality testers. + */ + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + /** + * Expose the interface for adding custom expectation matchers + */ + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + /** + * Expose the mock interface for the JavaScript timeout functions + */ + jasmine.clock = function() { + return env.clock; + }; + + /** + * ## Runner Parameters + */ + + env.catchExceptions(true); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); +// + env.addReporter(new TerminalReporter({ + verbosity: 5 + })); + + env.addReporter(new JUnitXmlReporter()); + + env.specFilter = function(spec) { + return true; + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } +}()); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js new file mode 100644 index 000000000..63614709d --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js @@ -0,0 +1,2521 @@ +/* +Copyright (c) 2008-2014 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; +}; + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = (function (jasmineGlobal) { + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + } + + return function(j$) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; + }; +})(this); + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] == search) { + return true; + } + } + return false; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.fn = attrs.fn; + this.beforeFns = attrs.beforeFns || function() { return []; }; + this.afterFns = attrs.afterFns || function() { return []; }; + this.onStart = attrs.onStart || function() {}; + this.exceptionFormatter = attrs.exceptionFormatter || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [] + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()); + + this.queueRunnerFactory({ + fns: allFns, + onException: onException, + onComplete: complete, + enforceTimeout: function() { return true; } + }); + + function onException(e) { + if (Spec.isPendingSpecException(e)) { + self.pend(); + return; + } + + self.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + } + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function() { + this.markedPending = true; + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + + var spies = []; + + var currentSpec = null; + var currentSuite = null; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + var equalityTesters = []; + + var customEqualityTesters = []; + this.addCustomEqualityTester = function(tester) { + customEqualityTesters.push(tester); + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: customEqualityTesters, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var specStarted = function(spec) { + currentSpec = spec; + reporter.specStarted(spec.result); + }; + + var beforeFns = function(suite) { + return function() { + var befores = []; + while(suite) { + befores = befores.concat(suite.beforeFns); + suite = suite.parentSuite; + } + return befores.reverse(); + }; + }; + + var afterFns = function(suite) { + return function() { + var afters = []; + while(suite) { + afters = afters.concat(suite.afterFns); + suite = suite.parentSuite; + } + return afters; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + /* + set maximumSpecCallbackDepth to a large number in order to execute tests in very large batches, + e.g. it looks like tests are executed synchronously; this guarantees that test order is preserved. + */ + var maximumSpecCallbackDepth = 20000; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: setTimeout, clearTimeout: clearTimeout}; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory, + resultCallback: function() {} // TODO - hook this up + }); + runnableLookupTable[topSuite.id] = topSuite; + currentSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + runnablesToRun = runnablesToRun || [topSuite.id]; + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + this.addMatchers = function(matchersToAdd) { + j$.Expectation.addMatchers(matchersToAdd); + }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + spies.push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + resultCallback: function(attrs) { + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + + var parentSuite = currentSuite; + parentSuite.addChild(suite); + currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + this.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentSuite = parentSuite; + + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var specFactory = function(description, fn, suite) { + totalSpecsDefined++; + + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeFns: beforeFns(suite), + afterFns: afterFns(suite), + expectationFactory: expectationFactory, + exceptionFormatter: exceptionFormatter, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + fn: fn + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function removeAllSpies() { + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + spies = []; + } + + function specResultCallback(result) { + removeAllSpies(); + j$.Expectation.resetMatchers(); + customEqualityTesters = []; + currentSpec = null; + reporter.specDone(result); + } + }; + + var suiteStarted = function(suite) { + reporter.suiteStarted(suite.result); + }; + + this.it = function(description, fn) { + var spec = specFactory(description, fn, currentSuite); + currentSuite.addChild(spec); + return spec; + }; + + this.xit = function(description, fn) { + var spec = this.it(description, fn); + spec.pend(); + return spec; + }; + + this.expect = function(actual) { + if (!currentSpec) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentSpec.expect(actual); + }; + + this.beforeEach = function(beforeEachFunction) { + currentSuite.beforeEach(beforeEachFunction); + }; + + this.afterEach = function(afterEachFunction) { + currentSuite.afterEach(afterEachFunction); + }; + + this.pending = function() { + throw j$.Spec.pendingSpecExceptionMessage; + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = {}; + + this.suiteStarted = function(result) { + storeSuite(result); + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + function storeSuite(result) { + suites[result.id] = result; + } + + this.suites = function() { + return suites; + }; + + var specs = []; + this.specStarted = function(result) { }; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.jasmineMatches = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + for (var i = 0; i < funcsToRun.length; ++i) { + var funcToRun = funcsToRun[i]; + funcToRun.funcToCall.apply(null, funcToRun.params || []); + + if (funcToRun.recurring) { + reschedule(funcToRun); + } + } + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + var matchers = {}; + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + for (var matcherName in matchers) { + this[matcherName] = matchers[matcherName]; + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.addMatchers = function(matchersToAdd) { + for (var name in matchersToAdd) { + var matcher = matchersToAdd[name]; + matchers[name] = Expectation.prototype.wrapCompare(name, matcher); + } + }; + + Expectation.resetMatchers = function() { + for (var name in matchers) { + delete matchers[name]; + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + return { + matcherName: options.matcherName, + expected: options.expected, + actual: options.actual, + message: message(), + stack: stack(), + passed: options.passed + }; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + if (arguments.length === 0) { + return new GlobalDate(currentTime); + } else { + return new GlobalDate(arguments[0], arguments[1], arguments[2], + arguments[3], arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + var hasKey = function(obj, keyName) { + return obj !== null && !j$.util.isUndefined(obj[keyName]); + }; + + for (var property in this.sample) { + if (!hasKey(other, property) && hasKey(this.sample, property)) { + mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.'); + } + else if (!j$.matchersUtil.equals(other[property], this.sample[property])) { + mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.'); + } + } + + return (mismatchKeys.length === 0 && mismatchValues.length === 0); + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Object'); + return; + } + + var self = this; + this.append('{ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' }'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.fns = attrs.fns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.enforceTimeout = attrs.enforceTimeout || function() { return false; }; + this.userContext = {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.fns, 0); + }; + + QueueRunner.prototype.run = function(fns, recursiveIndex) { + var length = fns.length, + self = this, + iterativeIndex; + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var fn = fns[iterativeIndex]; + if (fn.length > 0) { + return attemptAsync(fn); + } else { + attemptSync(fn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(fn) { + try { + fn.call(self.userContext); + } catch (e) { + handleException(e); + } + } + + function attemptAsync(fn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(fns, iterativeIndex + 1); + }), + timeoutId; + + if (self.enforceTimeout()) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.')); + next(); + }, j$.DEFAULT_TIMEOUT_INTERVAL]]); + } + + try { + fn.call(self.userContext, next); + } catch (e) { + handleException(e); + next(); + } + } + + function handleException(e) { + self.onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + + this.beforeFns = []; + this.afterFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + status: this.disabled ? 'disabled' : '', + description: this.description, + fullName: this.getFullName() + }; + } + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + this.onStart(this); + + this.queueRunner({ + fns: allFns, + onComplete: complete + }); + + function complete() { + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return function(done) { child.execute(done); }; + } + }; + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if (Object.prototype.toString.apply(haystack) === '[object Array]') { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof j$.Any) { + result = a.jasmineMatches(b); + if (result) { + return true; + } + } + + if (b instanceof j$.Any) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (b instanceof j$.ObjectContaining) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; } + } + } + } else { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return obj.hasOwnProperty(key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function() { + + function toMatch() { + return { + compare: function(actual, expected) { + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown, + errorType, + message, + regexp, + name, + constructorName; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + extractExpectedParams.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (arguments.length == 1) { + pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.'; + return pass; + } + + if (errorType) { + name = fnNameFor(errorType); + constructorName = fnNameFor(thrown.constructor); + } + + if (errorType && message) { + if (thrown.constructor == errorType && util.equals(thrown.message, message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType && regexp) { + if (thrown.constructor == errorType && regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType) { + if (thrown.constructor == errorType) { + pass.message = 'Expected function not to throw ' + name + '.'; + return pass; + } else { + fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.'; + return fail; + } + } + + if (message) { + if (thrown.message == message) { + pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (regexp) { + if (regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + function fnNameFor(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + } + + function extractExpectedParams() { + if (arguments.length == 1) { + return; + } + + if (arguments.length == 2) { + var expected = arguments[1]; + + if (expected instanceof RegExp) { + regexp = expected; + } else if (typeof expected == 'string') { + message = expected; + } else if (checkForAnErrorType(expected)) { + errorType = expected; + } + + if (!(errorType || message || regexp)) { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } else { + if (checkForAnErrorType(arguments[1])) { + errorType = arguments[1]; + } else { + throw new Error('Expected error type is not an Error.'); + } + + if (arguments[2] instanceof RegExp) { + regexp = arguments[2]; + } else if (typeof arguments[2] == 'string') { + message = arguments[2]; + } else { + throw new Error('Expected error message is not a string or RegExp.'); + } + } + } + + function checkForAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + }; + } + + return toThrowError; +}; + +getJasmineRequireObj().version = function() { + return '2.0.1'; +}; diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js new file mode 100644 index 000000000..0c1ade7b6 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js @@ -0,0 +1,315 @@ +/* global java, __phantom_writeFile */ +(function(global) { + var UNDEFINED, + exportObject; + + if (typeof module !== "undefined" && module.exports) { + exportObject = exports; + } else { + exportObject = global.jasmineReporters = global.jasmineReporters || {}; + } + + function trim(str) { return str.replace(/^\s+/, "" ).replace(/\s+$/, "" ); } + function elapsed(start, end) { return (end - start)/1000; } + function isFailed(obj) { return obj.status === "failed"; } + function isSkipped(obj) { return obj.status === "pending"; } + function pad(n) { return n < 10 ? '0'+n : n; } + function extend(dupe, obj) { // performs a shallow copy of all props of `obj` onto `dupe` + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + dupe[prop] = obj[prop]; + } + } + return dupe; + } + function ISODateString(d) { + return d.getFullYear() + '-' + + pad(d.getMonth()+1) + '-' + + pad(d.getDate()) + 'T' + + pad(d.getHours()) + ':' + + pad(d.getMinutes()) + ':' + + pad(d.getSeconds()); + } + function escapeInvalidXmlChars(str) { + return str.replace(//g, ">") + .replace(/\"/g, """) + .replace(/\'/g, "'") + .replace(/\&/g, "&"); + } + function getQualifiedFilename(path, filename, separator) { + if (path && path.substr(-1) !== separator && filename.substr(0) !== separator) { + path += separator; + } + return path + filename; + } + function log(str) { + __log(str); +// var con = global.console || console; +// if (con && con.log) { +// con.log(str); +// } + } + + + /** + * Generates JUnit XML for the given spec run. There are various options + * to control where the results are written, and the default values are + * set to create as few .xml files as possible. It is possible to save a + * single XML file, or an XML file for each top-level `describe`, or an + * XML file for each `describe` regardless of nesting. + * + * Usage: + * + * jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter(options); + * + * @param {object} [options] + * @param {string} [savePath] directory to save the files (default: '') + * @param {boolean} [consolidateAll] whether to save all test results in a + * single file (default: true) + * NOTE: if true, {filePrefix} is treated as the full filename (excluding + * extension) + * @param {boolean} [consolidate] whether to save nested describes within the + * same file as their parent (default: true) + * NOTE: true does nothing if consolidateAll is also true. + * NOTE: false also sets consolidateAll to false. + * @param {boolean} [useDotNotation] whether to separate suite names with + * dots instead of spaces, ie "Class.init" not "Class init" (default: true) + * @param {string} [filePrefix] is the string value that is prepended to the + * xml output file (default: junitresults-) + * NOTE: if consolidateAll is true, the default is simply "junitresults" and + * this becomes the actual filename, ie "junitresults.xml" + */ + exportObject.JUnitXmlReporter = function(options) { + var self = this; + self.started = false; + self.finished = false; + // sanitize arguments + options = options || {}; + self.savePath = options.savePath || ''; + self.consolidate = options.consolidate === UNDEFINED ? true : options.consolidate; + self.consolidateAll = self.consolidate !== false && (options.consolidateAll === UNDEFINED ? true : options.consolidateAll); + self.useDotNotation = options.useDotNotation === UNDEFINED ? true : options.useDotNotation; + self.filePrefix = options.filePrefix || (self.consolidateAll ? 'junitresults' : 'junitresults-'); + + var suites = [], + currentSuite = null, + totalSpecsExecuted = 0, + totalSpecsDefined; + + var __suites = {}, __specs = {}; + function getSuite(suite) { + __suites[suite.id] = extend(__suites[suite.id] || {}, suite); + return __suites[suite.id]; + } + function getSpec(spec) { + __specs[spec.id] = extend(__specs[spec.id] || {}, spec); + return __specs[spec.id]; + } + + self.jasmineStarted = function(summary) { + totalSpecsDefined = summary && summary.totalSpecsDefined || NaN; + exportObject.startTime = new Date(); + self.started = true; + }; + self.suiteStarted = function(suite) { + suite = getSuite(suite); + suite._startTime = new Date(); + suite._specs = []; + suite._suites = []; + suite._failures = 0; + suite._skipped = 0; + suite._parent = currentSuite; + if (!currentSuite) { + suites.push(suite); + } else { + currentSuite._suites.push(suite); + } + currentSuite = suite; + }; + self.specStarted = function(spec) { + spec = getSpec(spec); + spec._startTime = new Date(); + spec._suite = currentSuite; + currentSuite._specs.push(spec); + }; + self.specDone = function(spec) { + spec = getSpec(spec); + spec._endTime = new Date(); + if (isSkipped(spec)) { spec._suite._skipped++; } + if (isFailed(spec)) { spec._suite._failures++; } + totalSpecsExecuted++; + }; + self.suiteDone = function(suite) { + suite = getSuite(suite); + // disabled suite (xdescribe) -- suiteStarted was never called + if (suite._parent === UNDEFINED) { + self.suiteStarted(suite); + suite._disabled = true; + } + suite._endTime = new Date(); + currentSuite = suite._parent; + }; + self.jasmineDone = function() { + var output = ''; + for (var i = 0; i < suites.length; i++) { + output += self.getOrWriteNestedOutput(suites[i]); + } + // if we have anything to write here, write out the consolidated file + if (output) { + wrapOutputAndWriteFile(self.filePrefix, output); + } + //log("Specs skipped but not reported (entire suite skipped)", totalSpecsDefined - totalSpecsExecuted); + + self.finished = true; + // this is so phantomjs-testrunner.js can tell if we're done executing + exportObject.endTime = new Date(); + }; + + self.getOrWriteNestedOutput = function(suite) { + var output = suiteAsXml(suite); + + for (var i = 0; i < suite._suites.length; i++) { + output += self.getOrWriteNestedOutput(suite._suites[i]); + } + if (self.consolidateAll || self.consolidate && suite._parent) { + return output; + } else { + // if we aren't supposed to consolidate output, just write it now + wrapOutputAndWriteFile(generateFilename(suite), output); + return ''; + } + }; + + self.writeFile = function(filename, text) { + var errors = []; + var path = self.savePath; + + function phantomWrite(path, filename, text) { + // turn filename into a qualified path + filename = getQualifiedFilename(path, filename, window.fs_path_separator); + // write via a method injected by phantomjs-testrunner.js + __phantom_writeFile(filename, text); + } + + function nodeWrite(path, filename, text) { + var fs = require("fs"); + var nodejs_path = require("path"); + require("mkdirp").sync(path); // make sure the path exists + var filepath = nodejs_path.join(path, filename); + var xmlfile = fs.openSync(filepath, "w"); + fs.writeSync(xmlfile, text, 0); + fs.closeSync(xmlfile); + return; + } + + // Attempt writing with each possible environment. + // Track errors in case no write succeeds + try { + phantomWrite(path, filename, text); + return; + } catch (e) { errors.push(' PhantomJs attempt: ' + e.message); } + try { + nodeWrite(path, filename, text); + return; + } catch (f) { errors.push(' NodeJS attempt: ' + f.message); } + try { + __JUnitSaveResults(text); + return; + } catch (f) { errors.push(' tns-android attempt: ' + f.message); } + + // If made it here, no write succeeded. Let user know. + log("Warning: writing junit report failed for '" + path + "', '" + + filename + "'. Reasons:\n" + + errors.join("\n") + ); + }; + + /******** Helper functions with closure access for simplicity ********/ + function generateFilename(suite) { + return self.filePrefix + getFullyQualifiedSuiteName(suite, true) + '.xml'; + } + + function getFullyQualifiedSuiteName(suite, isFilename) { + var fullName; + if (self.useDotNotation || isFilename) { + fullName = suite.description; + for (var parent = suite._parent; parent; parent = parent._parent) { + fullName = parent.description + '.' + fullName; + } + } else { + fullName = suite.fullName; + } + + // Either remove or escape invalid XML characters + if (isFilename) { + var fileName = "", + rFileChars = /[\w\.]/, + chr; + while (fullName.length) { + chr = fullName[0]; + fullName = fullName.substr(1); + if (rFileChars.test(chr)) { + fileName += chr; + } + } + return fileName; + } else { + var finalName = escapeInvalidXmlChars(fullName); + return finalName; + } + } + + function suiteAsXml(suite) { + + var fullyQualifiedSuiteName = getFullyQualifiedSuiteName(suite); + var xml = '\n '; + xml += '\n '; + } + } + xml += '\n '; + return xml; + } + + // To remove complexity and be more DRY about the silly preamble and element + var prefix = ''; + prefix += '\n'; + var suffix = '\n'; + function wrapOutputAndWriteFile(filename, text) { + if (filename.substr(-4) !== '.xml') { filename += '.xml'; } + self.writeFile(filename, (prefix + text + suffix)); + } + }; +})(this); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js new file mode 100644 index 000000000..4b8472157 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js @@ -0,0 +1,222 @@ +(function(global) { + var UNDEFINED, + exportObject; + + if (typeof module !== "undefined" && module.exports) { + exportObject = exports; + } else { + exportObject = global.jasmineReporters = global.jasmineReporters || {}; + } + + function elapsed(start, end) { return (end - start)/1000; } + function isFailed(obj) { return obj.status === "failed"; } + function isSkipped(obj) { return obj.status === "pending"; } + function extend(dupe, obj) { // performs a shallow copy of all props of `obj` onto `dupe` + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + dupe[prop] = obj[prop]; + } + } + return dupe; + } + function log(str) { + __log(str); +// var con = global.console || console; +// if (con && con.log && str) { +// con.log(str); +// } + } + + + /** + * Basic reporter that outputs spec results to the terminal. + * Use this reporter in your build pipeline. + * + * Usage: + * + * jasmine.getEnv().addReporter(new jasmineReporters.TerminalReporter(options); + * + * @param {object} [options] + * @param {number} [options.verbosity] meaningful values are 0 through 3; anything + * greater than 3 is treated as 3 (default: 2) + * @param {boolean} [options.color] print in color or not (default: true) + */ + var DEFAULT_VERBOSITY = 2, + ATTRIBUTES_TO_ANSI = { + "off": 0, + "bold": 1, + "red": 31, + "green": 32 + }; + + exportObject.TerminalReporter = function(options) { + var self = this; + self.started = false; + self.finished = false; + + // sanitize arguments + options = options || {}; + self.verbosity = typeof options.verbosity === "number" ? options.verbosity : DEFAULT_VERBOSITY; + self.color = options.color; + + var indent_string = ' ', + startTime, + suites = [], + currentSuite = null, + totalSpecsExecuted = 0, + totalSpecsSkipped = 0, + totalSpecsFailed = 0, + totalSpecsDefined; + + var __suites = {}, __specs = {}; + function getSuite(suite) { + __suites[suite.id] = extend(__suites[suite.id] || {}, suite); + return __suites[suite.id]; + } + function getSpec(spec) { + __specs[spec.id] = extend(__specs[spec.id] || {}, spec); + return __specs[spec.id]; + } + + self.jasmineStarted = function(summary) { + totalSpecsDefined = summary && summary.totalSpecsDefined || NaN; + startTime = exportObject.startTime = new Date(); + self.started = true; + }; + self.suiteStarted = function(suite) { + suite = getSuite(suite); + suite._specs = 0; + suite._nestedSpecs = 0; + suite._failures = 0; + suite._nestedFailures = 0; + suite._skipped = 0; + suite._nestedSkipped = 0; + suite._depth = currentSuite ? currentSuite._depth+1 : 1; + suite._parent = currentSuite; + currentSuite = suite; + if (self.verbosity > 2) { + log(indentWithLevel(suite._depth, inColor(suite.description, "bold"))); + } + }; + self.specStarted = function(spec) { + spec = getSpec(spec); + spec._suite = currentSuite; + spec._depth = currentSuite._depth+1; + currentSuite._specs++; + if (self.verbosity > 2) { + log(indentWithLevel(spec._depth, spec.description + ' ...')); + } + }; + self.specDone = function(spec) { + spec = getSpec(spec); + var failed = false, + skipped = false, + color = 'green', + resultText = ''; + if (isSkipped(spec)) { + skipped = true; + color = ''; + spec._suite._skipped++; + totalSpecsSkipped++; + } + if (isFailed(spec)) { + failed = true; + color = 'red'; + spec._suite._failures++; + totalSpecsFailed++; + } + totalSpecsExecuted++; + + if (self.verbosity === 2) { + resultText = failed ? 'F' : skipped ? 'S' : ''; + } else if (self.verbosity > 2) { + resultText = ' ' + (failed ? 'Failed' : skipped ? 'Skipped' : 'Passed'); + } + log(inColor(resultText, color)); + + if (failed) { + if (self.verbosity === 1) { + log(spec.fullName); + } else if (self.verbosity === 2) { + log(' '); + log(indentWithLevel(spec._depth, spec.fullName)); + } + + for (var i = 0, failure; i < spec.failedExpectations.length; i++) { + log(inColor(indentWithLevel(spec._depth, indent_string + spec.failedExpectations[i].message), color)); + } + } + }; + self.suiteDone = function(suite) { + suite = getSuite(suite); + // disabled suite (xdescribe) -- suiteStarted was never called + if (suite._parent === UNDEFINED) { + self.suiteStarted(suite); + suite._disabled = true; + } + if (suite._parent) { + suite._parent._specs += suite._specs + suite._nestedSpecs; + suite._parent._failures += suite._failures + suite._nestedFailures; + suite._parent._skipped += suite._skipped + suite._nestedSkipped; + } + currentSuite = suite._parent; + if (self.verbosity < 3) { + return; + } + + var total = suite._specs + suite._nestedSpecs, + failed = suite._failures + suite._nestedFailures, + skipped = suite._skipped + suite._nestedSkipped, + passed = total - failed - skipped, + color = failed ? 'red+bold' : 'green+bold', + str = passed + ' of ' + total + ' passed (' + skipped + ' skipped)'; + log(indentWithLevel(suite._depth, inColor(str+'.', color))); + }; + self.jasmineDone = function() { + var now = new Date(), + dur = elapsed(startTime, now), + total = totalSpecsDefined || totalSpecsExecuted, + disabled = total - totalSpecsExecuted, + skipped = totalSpecsSkipped, + spec_str = total + (total === 1 ? " spec, " : " specs, "), + fail_str = totalSpecsFailed + (totalSpecsFailed === 1 ? " failure, " : " failures, "), + skip_str = skipped + " skipped, ", + disabled_str = disabled + " disabled in ", + summary_str = spec_str + fail_str + skip_str + disabled_str + dur + "s.", + result_str = (totalSpecsFailed && "FAILURE: " || "SUCCESS: ") + summary_str, + result_color = totalSpecsFailed && "red+bold" || "green+bold"; + + if (self.verbosity === 2) { + log(''); + } + + if (self.verbosity > 0) { + log(inColor(result_str, result_color)); + } + //log("Specs skipped but not reported (entire suite skipped)", totalSpecsDefined - totalSpecsExecuted); + + self.finished = true; + // this is so phantomjs-testrunner.js can tell if we're done executing + exportObject.endTime = now; + }; + function indentWithLevel(level, string) { + return new Array(level).join(indent_string) + string; + } + function inColor(string, color) { + var color_attributes = color && color.split("+"), + ansi_string = "", + i, attr; + + if (!self.color || !color_attributes) { + return string; + } + + for(i = 0; i < color_attributes.length; i++) { + ansi_string += "\033[" + ATTRIBUTES_TO_ANSI[color_attributes[i]] + "m"; + } + ansi_string += string + "\033[" + ATTRIBUTES_TO_ANSI["off"] + "m"; + + return ansi_string; + } + }; +})(this); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts b/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts new file mode 100644 index 000000000..7ccfa9594 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts @@ -0,0 +1,434 @@ +// Type definitions for Jasmine 2.0 +// Project: http://pivotal.github.com/jasmine/ +// Definitions by: Boris Yankov , Theodore Brown +// Definitions: https://github.com/borisyankov/DefinitelyTyped + + +// For ddescribe / iit use : https://github.com/borisyankov/DefinitelyTyped/blob/master/karma-jasmine/karma-jasmine.d.ts + +declare function describe(description: string, specDefinitions: () => void): void; +// declare function ddescribe(description: string, specDefinitions: () => void): void; Not a part of jasmine. Angular team adds these +declare function xdescribe(description: string, specDefinitions: () => void): void; + +declare function it(expectation: string, assertion?: () => void): void; +declare function it(expectation: string, assertion?: (done: () => void) => void): void; +// declare function iit(expectation: string, assertion?: () => void): void; Not a part of jasmine. Angular team adds these +// declare function iit(expectation: string, assertion?: (done: () => void) => void): void; Not a part of jasmine. Angular team adds these +declare function xit(expectation: string, assertion?: () => void): void; +declare function xit(expectation: string, assertion?: (done: () => void) => void): void; + +/** If you call the function pending anywhere in the spec body, no matter the expectations, the spec will be marked pending. */ +declare function pending(): void; + +declare function beforeEach(action: () => void): void; +declare function beforeEach(action: (done: () => void) => void): void; +declare function afterEach(action: () => void): void; +declare function afterEach(action: (done: () => void) => void): void; + +declare function expect(spy: Function): jasmine.Matchers; +declare function expect(actual: any): jasmine.Matchers; + +declare function spyOn(object: any, method: string): jasmine.Spy; + +declare function runs(asyncMethod: Function): void; +declare function waitsFor(latchMethod: () => boolean, failureMessage?: string, timeout?: number): void; +declare function waits(timeout?: number): void; + +declare module jasmine { + + var clock: () => Clock; + + function any(aclass: any): Any; + function objectContaining(sample: any): ObjectContaining; + function createSpy(name: string, originalFn?: Function): Spy; + function createSpyObj(baseName: string, methodNames: any[]): any; + function createSpyObj(baseName: string, methodNames: any[]): T; + function pp(value: any): string; + function getEnv(): Env; + function addMatchers(matchers: any): Any; + + interface Any { + + new (expectedClass: any): any; + + jasmineMatches(other: any): boolean; + jasmineToString(): string; + } + + interface ObjectContaining { + new (sample: any): any; + + jasmineMatches(other: any, mismatchKeys: any[], mismatchValues: any[]): boolean; + jasmineToString(): string; + } + + interface Block { + + new (env: Env, func: SpecFunction, spec: Spec): any; + + execute(onComplete: () => void): void; + } + + interface WaitsBlock extends Block { + new (env: Env, timeout: number, spec: Spec): any; + } + + interface WaitsForBlock extends Block { + new (env: Env, timeout: number, latchFunction: SpecFunction, message: string, spec: Spec): any; + } + + interface Clock { + install(): void; + uninstall(): void; + /** Calls to any registered callback are triggered when the clock is ticked forward via the jasmine.clock().tick function, which takes a number of milliseconds. */ + tick(ms: number): void; + } + + interface Env { + setTimeout: any; + clearTimeout: void; + setInterval: any; + clearInterval: void; + updateInterval: number; + + currentSpec: Spec; + + matchersClass: Matchers; + + version(): any; + versionString(): string; + nextSpecId(): number; + addReporter(reporter: Reporter): void; + execute(): void; + describe(description: string, specDefinitions: () => void): Suite; + // ddescribe(description: string, specDefinitions: () => void): Suite; Not a part of jasmine. Angular team adds these + beforeEach(beforeEachFunction: () => void): void; + currentRunner(): Runner; + afterEach(afterEachFunction: () => void): void; + xdescribe(desc: string, specDefinitions: () => void): XSuite; + it(description: string, func: () => void): Spec; + // iit(description: string, func: () => void): Spec; Not a part of jasmine. Angular team adds these + xit(desc: string, func: () => void): XSpec; + compareRegExps_(a: RegExp, b: RegExp, mismatchKeys: string[], mismatchValues: string[]): boolean; + compareObjects_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; + equals_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; + contains_(haystack: any, needle: any): boolean; + addEqualityTester(equalityTester: (a: any, b: any, env: Env, mismatchKeys: string[], mismatchValues: string[]) => boolean): void; + specFilter(spec: Spec): boolean; + } + + interface FakeTimer { + + new (): any; + + reset(): void; + tick(millis: number): void; + runFunctionsWithinRange(oldMillis: number, nowMillis: number): void; + scheduleFunction(timeoutKey: any, funcToCall: () => void, millis: number, recurring: boolean): void; + } + + interface HtmlReporter { + new (): any; + } + + interface HtmlSpecFilter { + new (): any; + } + + interface Result { + type: string; + } + + interface NestedResults extends Result { + description: string; + + totalCount: number; + passedCount: number; + failedCount: number; + + skipped: boolean; + + rollupCounts(result: NestedResults): void; + log(values: any): void; + getItems(): Result[]; + addResult(result: Result): void; + passed(): boolean; + } + + interface MessageResult extends Result { + values: any; + trace: Trace; + } + + interface ExpectationResult extends Result { + matcherName: string; + passed(): boolean; + expected: any; + actual: any; + message: string; + trace: Trace; + } + + interface Trace { + name: string; + message: string; + stack: any; + } + + interface PrettyPrinter { + + new (): any; + + format(value: any): void; + iterateObject(obj: any, fn: (property: string, isGetter: boolean) => void): void; + emitScalar(value: any): void; + emitString(value: string): void; + emitArray(array: any[]): void; + emitObject(obj: any): void; + append(value: any): void; + } + + interface StringPrettyPrinter extends PrettyPrinter { + } + + interface Queue { + + new (env: any): any; + + env: Env; + ensured: boolean[]; + blocks: Block[]; + running: boolean; + index: number; + offset: number; + abort: boolean; + + addBefore(block: Block, ensure?: boolean): void; + add(block: any, ensure?: boolean): void; + insertNext(block: any, ensure?: boolean): void; + start(onComplete?: () => void): void; + isRunning(): boolean; + next_(): void; + results(): NestedResults; + } + + interface Matchers { + + new (env: Env, actual: any, spec: Env, isNot?: boolean): any; + + env: Env; + actual: any; + spec: Env; + isNot?: boolean; + message(): any; + + toBe(expected: any): boolean; + toNotBe(expected: any): boolean; + toEqual(expected: any): boolean; + toNotEqual(expected: any): boolean; + toMatch(expected: any): boolean; + toNotMatch(expected: any): boolean; + toBeDefined(): boolean; + toBeUndefined(): boolean; + toBeNull(): boolean; + toBeNaN(): boolean; + toBeTruthy(): boolean; + toBeFalsy(): boolean; + toHaveBeenCalled(): boolean; + wasNotCalled(): boolean; + toHaveBeenCalledWith(...params: any[]): boolean; + toContain(expected: any): boolean; + toNotContain(expected: any): boolean; + toBeLessThan(expected: any): boolean; + toBeGreaterThan(expected: any): boolean; + toBeCloseTo(expected: any, precision: any): boolean; + toContainHtml(expected: string): boolean; + toContainText(expected: string): boolean; + toThrow(expected?: any): boolean; + toThrowError(expected?: any): boolean; + not: Matchers; + + Any: Any; + } + + interface Reporter { + reportRunnerStarting(runner: Runner): void; + reportRunnerResults(runner: Runner): void; + reportSuiteResults(suite: Suite): void; + reportSpecStarting(spec: Spec): void; + reportSpecResults(spec: Spec): void; + log(str: string): void; + } + + interface MultiReporter extends Reporter { + addReporter(reporter: Reporter): void; + } + + interface Runner { + + new (env: Env): any; + + execute(): void; + beforeEach(beforeEachFunction: SpecFunction): void; + afterEach(afterEachFunction: SpecFunction): void; + finishCallback(): void; + addSuite(suite: Suite): void; + add(block: Block): void; + specs(): Spec[]; + suites(): Suite[]; + topLevelSuites(): Suite[]; + results(): NestedResults; + } + + interface SpecFunction { + (spec?: Spec): void; + } + + interface SuiteOrSpec { + id: number; + env: Env; + description: string; + queue: Queue; + } + + interface Spec extends SuiteOrSpec { + + new (env: Env, suite: Suite, description: string): any; + + suite: Suite; + + afterCallbacks: SpecFunction[]; + spies_: Spy[]; + + results_: NestedResults; + matchersClass: Matchers; + + getFullName(): string; + results(): NestedResults; + log(arguments: any): any; + runs(func: SpecFunction): Spec; + addToQueue(block: Block): void; + addMatcherResult(result: Result): void; + expect(actual: any): any; + waits(timeout: number): Spec; + waitsFor(latchFunction: SpecFunction, timeoutMessage?: string, timeout?: number): Spec; + fail(e?: any): void; + getMatchersClass_(): Matchers; + addMatchers(matchersPrototype: any): void; + finishCallback(): void; + finish(onComplete?: () => void): void; + after(doAfter: SpecFunction): void; + execute(onComplete?: () => void): any; + addBeforesAndAftersToQueue(): void; + explodes(): void; + spyOn(obj: any, methodName: string, ignoreMethodDoesntExist: boolean): Spy; + removeAllSpies(): void; + } + + interface XSpec { + id: number; + runs(): void; + } + + interface Suite extends SuiteOrSpec { + + new (env: Env, description: string, specDefinitions: () => void, parentSuite: Suite): any; + + parentSuite: Suite; + + getFullName(): string; + finish(onComplete?: () => void): void; + beforeEach(beforeEachFunction: SpecFunction): void; + afterEach(afterEachFunction: SpecFunction): void; + results(): NestedResults; + add(suiteOrSpec: SuiteOrSpec): void; + specs(): Spec[]; + suites(): Suite[]; + children(): any[]; + execute(onComplete?: () => void): void; + } + + interface XSuite { + execute(): void; + } + + interface Spy { + (...params: any[]): any; + + identity: string; + and: SpyAnd; + calls: Calls; + mostRecentCall: { args: any[]; }; + argsForCall: any[]; + wasCalled: boolean; + callCount: number; + } + + interface SpyAnd { + /** By chaining the spy with and.callThrough, the spy will still track all calls to it but in addition it will delegate to the actual implementation. */ + callThrough(): void; + /** By chaining the spy with and.returnValue, all calls to the function will return a specific value. */ + returnValue(val: any): void; + /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied function. */ + callFake(fn: Function): void; + /** By chaining the spy with and.throwError, all calls to the spy will throw the specified value. */ + throwError(msg: string): void; + /** When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub. */ + stub(): void; + } + + interface Calls { + /** By chaining the spy with calls.any(), will return false if the spy has not been called at all, and then true once at least one call happens. **/ + any(): boolean; + /** By chaining the spy with calls.count(), will return the number of times the spy was called **/ + count(): number; + /** By chaining the spy with calls.argsFor(), will return the arguments passed to call number index **/ + argsFor(index: number): any[]; + /** By chaining the spy with calls.allArgs(), will return the arguments to all calls **/ + allArgs(): any[]; + /** By chaining the spy with calls.all(), will return the context (the this) and arguments passed all calls **/ + all(): any; + /** By chaining the spy with calls.mostRecent(), will return the context (the this) and arguments for the most recent call **/ + mostRecent(): any; + /** By chaining the spy with calls.first(), will return the context (the this) and arguments for the first call **/ + first(): any; + /** By chaining the spy with calls.reset(), will clears all tracking for a spy **/ + reset(): void; + } + + interface Util { + inherit(childClass: Function, parentClass: Function): any; + formatException(e: any): any; + htmlEscape(str: string): string; + argsToArray(args: any): any; + extend(destination: any, source: any): any; + } + + interface JsApiReporter extends Reporter { + + started: boolean; + finished: boolean; + result: any; + messages: any; + + new (): any; + + suites(): Suite[]; + summarize_(suiteOrSpec: SuiteOrSpec): any; + results(): any; + resultsForSpec(specId: any): any; + log(str: any): any; + resultsForSpecs(specIds: any): any; + summarizeResult_(result: any): any; + } + + interface Jasmine { + Spec: Spec; + clock: Clock; + util: Util; + } + + export var HtmlReporter: HtmlReporter; + export var HtmlSpecFilter: HtmlSpecFilter; + export var DEFAULT_TIMEOUT_INTERVAL: number; +} diff --git a/test-app/assets/app/Infrastructure/timers.js b/test-app/assets/app/Infrastructure/timers.js new file mode 100644 index 000000000..130d6b3c2 --- /dev/null +++ b/test-app/assets/app/Infrastructure/timers.js @@ -0,0 +1,51 @@ +var timeoutHandler; +var timeoutCallbacks = {}; +function createHadlerAndGetId() { + if (!timeoutHandler) { + timeoutHandler = new android.os.Handler(android.os.Looper.getMainLooper()); + } + return new Date().getUTCMilliseconds(); +} +function setTimeout(callback, milliseconds) { + if (milliseconds === void 0) { milliseconds = 0; } + var id = createHadlerAndGetId(); + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + if (timeoutCallbacks && timeoutCallbacks[id]) { + timeoutCallbacks[id] = null; + } + } + }); + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = runnable; + } + timeoutHandler.postDelayed(runnable, long(milliseconds)); + return id; +} +global.setTimeout = setTimeout; +function clearTimeout(id) { + if (timeoutCallbacks[id]) { + timeoutHandler.removeCallbacks(timeoutCallbacks[id]); + timeoutCallbacks[id] = null; + } +} +global.clearTimeout = clearTimeout; +function setInterval(callback, milliseconds) { + if (milliseconds === void 0) { milliseconds = 0; } + var id = createHadlerAndGetId(); + var handler = timeoutHandler; + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + handler.postDelayed(runnable, long(milliseconds)); + } + }); + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = runnable; + } + timeoutHandler.postDelayed(runnable, long(milliseconds)); + return id; +} +global.setInterval = setInterval; +global.clearInterval = clearTimeout; diff --git a/test-app/assets/app/bootstrap.js b/test-app/assets/app/bootstrap.js index 4d762b59f..6d66c0b49 100644 --- a/test-app/assets/app/bootstrap.js +++ b/test-app/assets/app/bootstrap.js @@ -1,7 +1,7 @@ global.__onUncaughtError = function(error){ if(error.nativeException){ - Log("err.message: " + error.message); - Log("err.stackTrace: " + error.stackTrace); + __log("err.message: " + error.message); + __log("err.stackTrace: " + error.stackTrace); // false == do not continue execution return false; } @@ -10,4 +10,25 @@ global.__onUncaughtError = function(error){ return true; } +require('./Infrastructure/timers'); + +global.__JUnitSaveResults = function (unitTestResults) { + var pathToSdcard = '/sdcard'; + var unitTestFileName = 'android_unit_test_results.xml'; + try { + var javaFile = new java.io.File(pathToSdcard, unitTestFileName); + var stream = new java.io.FileOutputStream(javaFile); + var actualEncoding = 'UTF-8'; + var writer = new java.io.OutputStreamWriter(stream, actualEncoding); + writer.write(unitTestResults); + writer.close(); + } + catch (exception) { + __log('failed writing to files dir: ' + exception); + } +}; + +require('./Infrastructure/Jasmine/jasmine-2.0.1/boot'); //runs jasmine, attaches the junitOutputter + + require("./mainpage"); \ No newline at end of file diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index 92651a056..f3ed8d2ac 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -1,63 +1,34 @@ -disableVerboseLogging(); +__disableVerboseLogging(); -require("./tests/testWeakRef"); -require("./tests/tests"); +require("./tests/testWeakRef"); +require("./tests/tests"); require("./tests/testsForRuntimeBindingGenerator"); -//require("./tests/propertyAccessTests"); -require("./tests/numericConversionTests"); -require("./tests/inheritanceChainResolutionTest"); +require("./tests/testPrimitiveTypeConversion"); +require("./tests/numericConversionTests"); +require("./tests/inheritanceChainResolutionTest"); require("./tests/exceptionHandlingTests"); require("./tests/dispatchCallbacksOnUiThreadTests"); require("./tests/stringConversionTests"); -require("./tests/testsForTypescript"); +require("./tests/testsForTypescript"); require("./tests/testGC"); require("./tests/testsMemoryManagement"); require("./tests/testIfAbleToRunExternalFile"); require("./tests/finalFieldsSetTests"); require("./tests/extendedClassesTests"); require("./tests/extendClassNameTests"); +require("./tests/testJniReferenceLeak"); -//var MainActivity = com.tns.NativeScriptActivity.extend("MainActivity", { -// onCreate: function() { -// this.super.onCreate(null); -// -// require("./tests/testsWithContext").run(this); -// -// var layout = new android.widget.LinearLayout(this); -// layout.setOrientation(1); -// this.setContentView(layout); -// -// var textView = new android.widget.TextView(this); -// textView.setText("Hit that sucker"); -// layout.addView(textView); -// -// var button = new android.widget.Button(this); -// button.setText("Hit me"); -// layout.addView(button); -// var counter = 0; -// button.setOnClickListener(new android.view.View.OnClickListener("AppClickListener", { -// onClick: function() { -// Log("onClick called"); -// button.setText("Hit that sucker one more time " + ++counter); -// }})); -// }}); - - - -var MainActivity = (function (_super) { - __extends(MainActivity, _super); - function MainActivity() { - } - - MainActivity.prototype.onCreate = function () { - Log("onCreate from js"); +var MainActivity = { + onCreate: function (bundle) { + __log("onCreate from js"); var k = this.toString(); - Log("this.toString " + k); - _super.prototype.onCreate.call(this, null); + __log("this.toString " + k); + this.super.onCreate(bundle); //this.super.onCreate(null); - + require("./tests/testsWithContext").run(this); + execute(); //run jasmine var layout = new android.widget.LinearLayout(this); layout.setOrientation(1); @@ -73,27 +44,30 @@ var MainActivity = (function (_super) { var counter = 0; button.setOnClickListener(new android.view.View.OnClickListener("AppClickListener", { onClick: function() { - Log("onClick called"); + __log("onClick called"); button.setText("Hit that sucker one more time " + ++counter); }})); - }; - return MainActivity; -})(com.tns.NativeScriptActivity); + } +}; app.init({ - getActivity: function(intent) { - Log("intent=" + intent) - if (intent.getAction() == android.content.Intent.ACTION_MAIN) { + getActivity: function(activity) { + var intent = activity.getIntent(); + __log("intent=" + intent) + var action = intent.getAction(); + __log("action=" + action) + return MainActivity; + if (action == android.content.Intent.ACTION_MAIN) { return MainActivity; } else { - fail("Unknown action"); + __exit("Unknown action"); } }, onCreate: function() { - Log("Application on create called"); + __log("Application on create called"); } }); \ No newline at end of file diff --git a/test-app/assets/app/modules/module.js b/test-app/assets/app/modules/module.js index c12f32e6a..91b4a4762 100644 --- a/test-app/assets/app/modules/module.js +++ b/test-app/assets/app/modules/module.js @@ -2,7 +2,7 @@ var tnsExtends = this.__extends; (function When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function() { - Log("TEST: When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function"); + __log("TEST: When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function"); if (!tnsExtends) { @@ -13,6 +13,7 @@ var tnsExtends = this.__extends; module.exports = { accessGlobalObject: function(s) { - Log("global is working " + global); + __log("global is working " + global); + return true; } } \ No newline at end of file diff --git a/test-app/assets/app/simplemodule.js b/test-app/assets/app/simplemodule.js index af8a855b6..5b339ad68 100644 --- a/test-app/assets/app/simplemodule.js +++ b/test-app/assets/app/simplemodule.js @@ -4,9 +4,9 @@ exports.myLog = function(s) { if (arguments.length == 1) { - Log("1+1=" + summer.add(1, 1)) + __log("1+1=" + summer.add(1, 1)) - Log("global is working" + global) + __log("global is working" + global) } - Log(s); + __log(s); } \ No newline at end of file diff --git a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js index d91bf070e..fba118c8e 100644 --- a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js +++ b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js @@ -1,30 +1,28 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestProcessDataCallbackShouldBeExecutedOnUiThread = function() { +describe("Tests dispatch callbacks on UI thread ", function () { + + it("TestProcessDataCallbackShouldBeExecutedOnUiThread", function () { - Log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); + __log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); - var D = com.tns.tests.DispatchAsyncOpOnUIThreadTest.extend("DispatchAsyncOpOnUIThreadTest", { - processData: function(index, data) { - if (index === 0) { - Assert(data === 123, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 123, actual value=" + data); - } else if (index === 1) { - Assert(data === 456, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 456, actual value=" + data); - } else if (index === 2) { - Assert(data === 789, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 789, actual value=" + data); - } else { - Assert(false, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected index is 0, 1 or 2. Actual value=" + index); + var D = com.tns.tests.DispatchAsyncOpOnUIThreadTest.extend("DispatchAsyncOpOnUIThreadTest", { + processData: function(index, data) { + it("inner spec", function () { + if (index === 0) { + expect(data).toBe(123); + } else if (index === 1) { + expect(data).toBe(456); + } else if (index === 2) { + expect(data).toBe(789); + } else { + //one of the above has to be called ... else fail + expect(true).toBe(false); + } + }); } - } + }); + + var d = new D(); + + d.processDataAsync([123, 456, 789]); }); - - var d = new D(); - - d.processDataAsync([123, 456, 789]); -} - -TestProcessDataCallbackShouldBeExecutedOnUiThread(); +}); diff --git a/test-app/assets/app/tests/exceptionHandlingTests.js b/test-app/assets/app/tests/exceptionHandlingTests.js index e400bb308..9d0cf230b 100644 --- a/test-app/assets/app/tests/exceptionHandlingTests.js +++ b/test-app/assets/app/tests/exceptionHandlingTests.js @@ -1,276 +1,269 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestThrowJSExceptionThroughJavaAndCatchInJS = function() { - - Log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); +describe("Tests exception handling ", function () { - var exceptionThrown = false; - var exceptionCaught = false; - var sameExObject = false; + var myCustomEquality = function(first, second) { + return first == second; + }; - var ex = { myProp: "SomeValue" }; + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestThrowJSExceptionThroughJavaAndCatchInJS", function () { + + __log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); + + var exceptionThrown = false; + var exceptionCaught = false; + var sameExObject = false; + + var ex = { myProp: "SomeValue" }; + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1("test"); } + catch (e) + { + exceptionCaught = true; + sameExObject = e === ex; + __log("e=" + e); + } + + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(true); + expect(sameExObject).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1("test"); - } - catch (e) - { - exceptionCaught = true; - sameExObject = e === ex; - Log("e=" + e); - } - - Assert(exceptionThrown === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: Exception should be thrown"); - Assert(exceptionCaught === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: Exception should be caught"); - Assert(sameExObject === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: The expected caught object should be strict equal to 'ex'"); -} + it("TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS", function () { -var TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS = function() { + __log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); + + var exceptionThrown = false; + var exceptionCaught = false; + var nativeExceptionFound = false; + var exMsg = ""; + + var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest53", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1("test"); + } + catch (e) + { + exceptionCaught = true; + nativeExceptionFound = e.nativeException !== undefined; + if (nativeExceptionFound) + { + exMsg = e.nativeException.getMessage(); + } + } - Log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); - - var exceptionThrown = false; - var exceptionCaught = false; - var nativeExceptionFound = false; - var exMsg = ""; - - var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(true); + expect(nativeExceptionFound).toBe(true); + expect(exMsg).toBe("This exception is thrown from JavaScript!"); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest53", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestThrowJSExceptionAndCatchInJava", function () { + + __log("TEST: TestThrowJSExceptionAndCatchInJava"); + + var exceptionThrown = false; + var exceptionCaught = true; + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest89", { + onEvent1: function(s) { + exceptionThrown = true; + throw "My Exception String"; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1WithCatchClause("test"); + exceptionCaught = false; } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(false); }); - var eh = new EH(); - - try - { - eh.triggerEvent1("test"); - } - catch (e) - { - exceptionCaught = true; - nativeExceptionFound = e.nativeException !== undefined; - if (nativeExceptionFound) + it("TestThrowJavaExceptionFromJsAndCatchInJava", function () { + + __log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); + + var exceptionThrown = false; + var exceptionCaught = true; + + var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest121", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try { - exMsg = e.nativeException.getMessage(); + eh.triggerEvent1WithCatchClause("test"); + exceptionCaught = false; + } + catch (e) + { + exceptionCaught = true; } - } - - Assert(exceptionThrown === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Exception should be thrown"); - Assert(exceptionCaught === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Exception should be caught"); - Assert(nativeExceptionFound === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: The expected caught object should have 'nativeException' property set"); - Assert(exMsg === "This exception is thrown from JavaScript!", "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Expected value is 'This exception is thrown from JavaScript!', actual value=" + exMsg); -} - -var TestThrowJSExceptionAndCatchInJava = function() { - Log("TEST: TestThrowJSExceptionAndCatchInJava"); - - var exceptionThrown = false; - var exceptionCaught = true; + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(false); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest89", { - onEvent1: function(s) { - exceptionThrown = true; - throw "My Exception String"; + it("TestMethodThatThrowsException", function () { + + __log("TEST: TestMethodThatThrowsException"); + + var exceptionCaught = false; + + var dummy = new com.tns.tests.DummyClass(); + + try + { + dummy.methodThatThrowsException(); + } + catch (e) + { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1WithCatchClause("test"); - exceptionCaught = false; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionThrown === true, "TestThrowJSExceptionAndCatchInJava FAILED: Exception should be thrown"); - Assert(exceptionCaught === false, "TestThrowJSExceptionAndCatchInJava FAILED: Exception should not be caught"); -} - -var TestThrowJavaExceptionFromJsAndCatchInJava = function() { + it("TestErrorObjectContainsJavaNativeException", function () { + + + __log("TEST: TestErrorObjectContainsJavaNativeException"); + + var nativeException = undefined; + + var dummy = new com.tns.tests.DummyClass(); + + try + { + dummy.methodThatThrowsException(); + } + catch (e) + { + var nativeException = e.nativeException; + } - Log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); - - var exceptionThrown = false; - var exceptionCaught = true; - - var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + __log("nativeException=" + nativeException); + + expect(nativeException).not.toEqual(undefined); + + var nativeExceptionFrameCount = nativeException.getStackTrace().length; + + expect(nativeExceptionFrameCount).toBeGreaterThan(0); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest121", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestConstructorThatThrowsException", function () { + + __log("TEST: TestConstructorThatThrowsException"); + + var exceptionCaught = false; + + try + { + var dummy = new com.tns.tests.DummyClass(true /* throwsException */); + } + catch (e) + { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1WithCatchClause("test"); - exceptionCaught = false; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionThrown === true, "TestThrowJavaExceptionFromJsAndCatchInJava FAILED: Exception should be thrown"); - Assert(exceptionCaught === false, "TestThrowJavaExceptionFromJsAndCatchInJava FAILED: Exception should not be caught"); -} - -var TestMethodThatThrowsException = function() { - - Log("TEST: TestMethodThatThrowsException"); - - var exceptionCaught = false; - - var dummy = new com.tns.tests.DummyClass(); - - try - { - dummy.methodThatThrowsException(); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestMethodThatThrowsException FAILED: Java exception was not caught") -} - -var TestErrorObjectContainsJavaNativeException = function() { - - Log("TEST: TestErrorObjectContainsJavaNativeException"); - - var nativeException = undefined; - - var dummy = new com.tns.tests.DummyClass(); - - try - { - dummy.methodThatThrowsException(); - } - catch (e) - { - var nativeException = e.nativeException; - } - - Log("nativeException=" + nativeException); - - Assert(nativeException != undefined, "TestErrorObjectContainsJavaNativeException FAILED: Error object does not contain Java native exception"); - - var nativeExceptionFrameCount = nativeException.getStackTrace().length; - - Assert(nativeExceptionFrameCount > 0, "TestErrorObjectContainsJavaNativeException FAILED: Java native exception does not contains stack frames"); -} - -var TestConstructorThatThrowsException = function() { - - Log("TEST: TestConstructorThatThrowsException"); - - var exceptionCaught = false; - - try - { - var dummy = new com.tns.tests.DummyClass(true /* throwsException */); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestConstructorThatThrowsException FAILED: Java exception was not caught"); -} - -var TestArrayElementGetAccessThatThrowsException = function() { - - Log("TEST: TestArrayElementGetAccessThatThrowsException"); - - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestArrayElementGetAccessThatThrowsException FAILED: Expected array length is 1, actual length=" + arrLength); - - try - { - var dummy = arr[arrLength]; - - var name = dummy.getName(); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestArrayElementGetAccessThatThrowsException FAILED: Java exception was not caught during getting array element"); -} - -var TestArrayElementSetAccessThatThrowsException = function() { - - Log("TEST: TestArrayElementSetAccessThatThrowsException"); - - var exceptionCaught = false; + it("TestArrayElementGetAccessThatThrowsException", function () { + + __log("TEST: TestArrayElementGetAccessThatThrowsException"); + + var exceptionCaught = false; - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestArrayElementSetAccessThatThrowsException FAILED: Expected array length is 1, actual length=" + arrLength); - - var last = arr[arrLength - 1]; - - try - { - arr[arrLength] = last; - } - catch (e) - { - exceptionCaught = true; - } + var d = new com.tns.tests.DummyClass(); + + var arr = d.getDummyClassArrayAsObject(); + + var arrLength = arr.length; + + expect(arrLength).toEqual(1); + + try + { + var dummy = arr[arrLength]; + + var name = dummy.getName(); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(exceptionCaught === true, "TestArrayElementSetAccessThatThrowsException FAILED: Java exception was not caught during setting array element"); -} - -TestThrowJSExceptionThroughJavaAndCatchInJS(); -TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS(); -TestThrowJSExceptionAndCatchInJava(); -TestThrowJavaExceptionFromJsAndCatchInJava(); -TestMethodThatThrowsException(); -TestErrorObjectContainsJavaNativeException(); -TestConstructorThatThrowsException(); -TestArrayElementGetAccessThatThrowsException(); -TestArrayElementSetAccessThatThrowsException(); - - - + it("TestArrayElementSetAccessThatThrowsException", function () { + + __log("TEST: TestArrayElementSetAccessThatThrowsException"); + + var exceptionCaught = false; + var d = new com.tns.tests.DummyClass(); + + var arr = d.getDummyClassArrayAsObject(); + + var arrLength = arr.length; + + expect(arrLength).toEqual(1); + + var last = arr[arrLength - 1]; + + try + { + arr[arrLength] = last; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/extendClassNameTests.js b/test-app/assets/app/tests/extendClassNameTests.js index 056aca637..9419fa0ee 100644 --- a/test-app/assets/app/tests/extendClassNameTests.js +++ b/test-app/assets/app/tests/extendClassNameTests.js @@ -1,41 +1,43 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -//the class name valid symbols are [a-z , A-Z , 0-9, _] -var When_naming_extension_class_user_should_give_valid_name = function() { +describe("Tests extend class name ", function () { - var exceptionCaught = false; - try - { - var O = java.lang.Object.extend("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789", {}); - } - catch(e) - { - exceptionCaught = true; - Log("Validation is wrong"); - } + var myCustomEquality = function(first, second) { + return first == second; + }; - Assert(exceptionCaught === false, "FAILED: When_naming_extension_class_user_should_give_valid_name."); -} - -var When_naming_extension_contains_invalid_symbols_should_throw_exception = function() { + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var exceptionCaught = false; - try - { - var O = java.lang.Object.extend("1235!", {}); //[!] is invalid symbol - } - catch(e) - { - Log('message: ' + e.message); - exceptionCaught = true; - } + //the class name valid symbols are [a-z , A-Z , 0-9, _] + it("When_naming_extension_class_user_should_give_valid_name", function () { + + var exceptionCaught = false; + try + { + var O = java.lang.Object.extend("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789", {}); + } + catch(e) + { + exceptionCaught = true; + __log("Validation is wrong"); + } + + expect(exceptionCaught).toBe(false); + }); - Assert(exceptionCaught === true, "FAILED: When_naming_extension_doesnt_have_valid_name_should_throw_exception."); -} + it("When_naming_extension_contains_invalid_symbols_should_throw_exception", function () { + + var exceptionCaught = false; + try + { + var O = java.lang.Object.extend("1235!", {}); //[!] is invalid symbol + } + catch(e) + { + __log('message: ' + e.message); + exceptionCaught = true; + } -When_naming_extension_class_user_should_give_valid_name(); -When_naming_extension_contains_invalid_symbols_should_throw_exception(); \ No newline at end of file + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/extendedClassesTests.js b/test-app/assets/app/tests/extendedClassesTests.js index f4fae3838..d9b6086a4 100644 --- a/test-app/assets/app/tests/extendedClassesTests.js +++ b/test-app/assets/app/tests/extendedClassesTests.js @@ -1,83 +1,76 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} +describe("Tests extended classes ", function () { -var Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object = function() { - var MyButton = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of chronometer instance"; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } + it("Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object", function () { + var MyButton = com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of chronometer instance"; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelToString = button.toString(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var button1 = new com.tns.tests.Button1(); + var labelToString1 = button1.toString(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); + + expect(labelToString).not.toBe(labelToString1); + expect(labelgetIMAGE_ID_PROP).not.toBe(labelgetIMAGE_ID_PROP1); }); - var button = new MyButton(); - var labelToString = button.toString(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - var button1 = new com.tns.tests.Button1(); - var labelToString1 = button1.toString(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - - Assert((labelToString !== labelToString1) && (labelgetIMAGE_ID_PROP !== labelgetIMAGE_ID_PROP1), "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); -} + it("Instance_with_extension_shouldnt_use_previously_defined_implementation_object", function () { + + var MyButton = com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of button instance"; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelToString = button.toString(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var MyButton1 = com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of button1 instance "; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button1"; + } + }); + var button1 = new MyButton1(); + var labelToString1 = button1.toString(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); -var Instance_with_extension_shouldnt_use_previously_defined_implementation_object = function() { - var MyButton = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of button instance"; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } - }); - var button = new MyButton(); - var labelToString = button.toString(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - - var MyButton1 = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of button1 instance "; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button1"; - } + expect(labelToString).not.toBe(labelToString1); + expect(labelgetIMAGE_ID_PROP).not.toBe(labelgetIMAGE_ID_PROP1); }); - var button1 = new MyButton1(); - var labelToString1 = button1.toString(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - Assert((labelToString !== labelToString1) && (labelgetIMAGE_ID_PROP !== labelgetIMAGE_ID_PROP1), "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); -} + it("Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects", function () { -var Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects = function() { - - var button1 = new com.tns.tests.Button1(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - // - var MyButton = new com.tns.tests.Button1.extend({ - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } + var button1 = new com.tns.tests.Button1(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); + + // + var MyButton = com.tns.tests.Button1.extend({ + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var button2 = new com.tns.tests.Button1(); + var labelgetIMAGE_ID_PROP2 = button2.getIMAGE_ID_PROP(); + + expect(labelgetIMAGE_ID_PROP1).toBe(labelgetIMAGE_ID_PROP2); }); - var button = new MyButton(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - - var button2 = new com.tns.tests.Button1(); - var labelgetIMAGE_ID_PROP2 = button2.getIMAGE_ID_PROP(); - - Assert(labelgetIMAGE_ID_PROP1 === labelgetIMAGE_ID_PROP2, "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); - -} - -Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object(); -Instance_with_extension_shouldnt_use_previously_defined_implementation_object(); -Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects(); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/finalFieldsSetTests.js b/test-app/assets/app/tests/finalFieldsSetTests.js index 80fc5cec5..81bf388ff 100644 --- a/test-app/assets/app/tests/finalFieldsSetTests.js +++ b/test-app/assets/app/tests/finalFieldsSetTests.js @@ -1,23 +1,17 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_a_java_final_field_is_set_exception_is_thrown = function() { - - var exceptionCaught = false; - try - { - com.tns.tests.Button1.STATIC_IMAGE_ID = "NEW STATIC IMAGE ID VALUE"; - } - catch (e) - { - Log("Don't try to SET a final field " + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "When_a_java_final_field_is_set_exception_is_thrown FAILED: Exception(illegal access) should be thrown"); -} - -When_a_java_final_field_is_set_exception_is_thrown(); +describe("Tests final fields set", function () { + + it("When trying to set a final field throw exception", function () { + + var exceptionCaught = false; + try + { + com.tns.tests.Button1.STATIC_IMAGE_ID = "NEW STATIC IMAGE ID VALUE"; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/inheritanceChainResolutionTest.js b/test-app/assets/app/tests/inheritanceChainResolutionTest.js index 179fb60f1..35ac44cfe 100644 --- a/test-app/assets/app/tests/inheritanceChainResolutionTest.js +++ b/test-app/assets/app/tests/inheritanceChainResolutionTest.js @@ -1,30 +1,32 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCallWithStringArgumentWhenThereIsStringOverload = function() { - - Log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); +describe("Tests inheritance chain resolution", function () { - var i = new com.tns.tests.InheritanceChainResolutionTest(); + var myCustomEquality = function(first, second) { + return first == second; + }; - var s = i.echo1("test123"); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - Assert(s === "String=test123", "TestCallWithStringArgumentWhenThereIsStringOverload FAILED: Expected value is 'String=test123', actual value=" + s); -} - -var TestCallWithStringArgumentWhenThereIsNoStringOverload = function() { - - Log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); + it("TestCallWithStringArgumentWhenThereIsStringOverload", function () { + + __log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); + + var i = new com.tns.tests.InheritanceChainResolutionTest(); + + var s = i.echo1("test123"); + + expect(s).toBe("String=test123"); + }); - var i = new com.tns.tests.InheritanceChainResolutionTest(); - - var s = i.echo2("test123"); - - Assert(s === "Object=test123", "TestCallWithStringArgumentWhenThereIsNoStringOverload FAILED: Expected value is 'Object=test123', actual value=" + s); -} - -TestCallWithStringArgumentWhenThereIsStringOverload(); -TestCallWithStringArgumentWhenThereIsNoStringOverload(); \ No newline at end of file + it("TestCallWithStringArgumentWhenThereIsNoStringOverload", function () { + + __log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); + + var i = new com.tns.tests.InheritanceChainResolutionTest(); + + var s = i.echo2("test123"); + + expect(s).toBe("Object=test123"); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/numericConversionTests.js b/test-app/assets/app/tests/numericConversionTests.js index 807b0cbe8..d79eff981 100644 --- a/test-app/assets/app/tests/numericConversionTests.js +++ b/test-app/assets/app/tests/numericConversionTests.js @@ -1,270 +1,247 @@ -/* - Test suite for numeric conversions and constructor/method resolutions. -*/ - -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { - - Log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); - - var n = new com.tns.tests.NumericConversionTest(123); - - var s = n.getInit(); - - Assert(s === "byte", "TestCreateInstanceWithConstructorResolutionWithNumberLiteral FAILED: Expected value is 'byte', actual value=" + s); -} - -var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { - - Log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); - - var n1 = new com.tns.tests.NumericConversionTest(byte(123)); - var s1 = n1.getInit(); - Assert(s1 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s1); - - var n2 = new com.tns.tests.NumericConversionTest(short(123)); - var s2 = n2.getInit(); - Assert(s2 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s2); - - var n3 = new com.tns.tests.NumericConversionTest(long(123)); - var s3 = n3.getInit(); - Assert(s3 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s3); -} - -var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = function() { - - Log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); - - var b = java.lang.Byte.parseByte("123"); - var n1 = new com.tns.tests.NumericConversionTest(b); - var s1 = n1.getInit(); - Assert(s1 === "byte", "TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls FAILED: Expected value is 'byte', actual value=" + s1); - - var i = java.lang.Integer.parseInt("12345"); - var n2 = new com.tns.tests.NumericConversionTest(i); - var s2 = n2.getInit(); - Assert(s2 === "byte", "TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls FAILED: Expected value is 'byte', actual value=" + s2); -} - -var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() { - - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); - - var n = new com.tns.tests.NumericConversionTest(null, short(1)); - var s = n.getInit(); - Assert(s === "Object,int", "TestCreateInstanceWithConstructorResolutionWithPromotingValueUp FAILED: Expected value is 'Object,int', actual value=" + s); -} - -var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function() { - - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); - - var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); - var s = n.getInit(); - Assert(s === "Object,Object,short", "TestCreateInstanceWithConstructorResolutionWithPromotingValueDown FAILED: Expected value is 'Object,Object,short', actual value=" + s); -} - -var TestCallMethodWithResolutionWithPromotingValueUp = function() { - - Log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method1(byte(1)); - Assert(s === "short=1", "TestCallMethodWithResolutionWithPromotingValueUp FAILED: Expected value is 'short=1', actual value=" + s); -} - -var TestCallMethodWithResolutionWithPromotingValueDown = function() { - - Log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method1(1); - Assert(s === "short=1", "TestCallMethodWithResolutionWithPromotingValueDown FAILED: Expected value is 'short=1', actual value=" + s); - - var n1 = new com.tns.tests.NumericConversionTest(); - var s1 = n1.method1(long((1 << 16) + 2)); - Assert(s1 === "short=2", "TestCallMethodWithResolutionWithPromotingValueDown FAILED: Expected value is 'short=2', actual value=" + s1); -} - -var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { - - Log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(long(65536 + 2)); - Assert(s === "float=65538.0", "TestLongCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=65538.0', actual value=" + s); -} - -var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { - - Log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(byte(65536 + 2)); - Assert(s === "float=2.0", "TestByteCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=2.0', actual value=" + s); -} - -var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { - - Log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(short(65536 + 2)); - Assert(s === "float=2.0", "TestShortCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=2.0', actual value=" + s); -} - -var TestDoubleCastWhenThereIsDoubleOverload = function() { - - Log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(double(65536 + 2)); - Assert(s === "double=65538.0", "TestDoubleCastWhenThereIsDoubleOverload FAILED: Expected value is 'double=65538.0', actual value=" + s); -} - -var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() { - - Log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(65536 + 2); - Assert(s === "float=65538.0", "TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=65538.0', actual value=" + s); -} - -var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { - - Log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method3(double(65536 + 2)); - Assert(s === "long=65538", "TestDoubleCastToLongConversionWhenThereIsShortOverload FAILED: Expected value is 'long=65538', actual value=" + s); -} - -var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { - - Log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method3(float(65536 + 2)); - Assert(s === "long=65538", "TestFloatCastToLongConversionWhenThereIsShortOverload FAILED: Expected value is 'long=65538', actual value=" + s); -} - -var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { - - Log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method4(float(65536 + 2)); - Assert(s === "short=2", "TestFloatCastToShortConversionWhenThereIsObjectOverload FAILED: Expected value is 'short=2', actual value=" + s); -} - -var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { - - Log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method4(byte(65536 + 2)); - Assert(s === "short=2", "TestByteCastToShortConversionWhenThereIsObjectOverload FAILED: Expected value is 'short=2', actual value=" + s); -} - -var TestResolveMethodWithByteCast = function() { - - Log("TEST: TestResolveMethodWithByteCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(byte(65536 + 123)); - Assert(s === "byte=123", "TestResolveMethodWithByteCast FAILED: Expected value is 'byte=123', actual value=" + s); -} - -var TestResolveMethodWithShortCast = function() { - - Log("TEST: TestResolveMethodWithShortCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(short(65536 + 1234)); - Assert(s === "short=1234", "TestResolveMethodWithShortCast FAILED: Expected value is 'short=1234', actual value=" + s); -} - -var TestResolveMethodWithoutCastFunction = function() { - - Log("TEST: TestResolveMethodWithoutCastFunction"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(123456); - Assert(s === "int=123456", "TestResolveMethodWithoutCastFunction FAILED: Expected value is 'int=123456', actual value=" + s); -} - -var TestResolveMethodWithLongCast = function() { - - Log("TEST: TestResolveMethodWithLongCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(long("123456789012")); - Assert(s === "long=123456789012", "TestResolveMethodWithLongCast FAILED: Expected value is 'long=123456789012', actual value=" + s); -} - -var TestResolveMethodWithFloatCast = function() { - - Log("TEST: TestResolveMethodWithFloatCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(float(1.23)); - Assert(s === "float=1.23", "TestResolveMethodWithFloatCast FAILED: Expected value is 'float=1.23', actual value=" + s); -} - -var TestResolveMethodWithDoubleCast = function() { - - Log("TEST: TestResolveMethodWithDoubleCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(double(1)); - Assert(s === "double=1.0", "TestResolveMethodWithDoubleCast FAILED: Expected value is 'double=1.0', actual value=" + s); -} - -var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { - - Log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(new Number(1)); - Assert(s === "int=1", "TestResolveIntMethodWithNumberObjectWithIntArgument FAILED: Expected value is 'int=1', actual value=" + s); -} - -var TestResolveIntMethodWithNumberObjectWithDoubleArgument = function() { - - Log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(new Number(1.23)); - Assert(s === "double=1.23", "TestResolveIntMethodWithNumberObjectWithDoubleArgument 123FAILED: Expected value is 'double=1.23', actual value=" + s); -} - -TestCreateInstanceWithConstructorResolutionWithNumberLiteral(); -TestCreateInstanceWithConstructorResolutionWithCastFunctions(); -TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls(); -TestCreateInstanceWithConstructorResolutionWithPromotingValueUp(); -TestCreateInstanceWithConstructorResolutionWithPromotingValueDown(); -TestCallMethodWithResolutionWithPromotingValueUp(); -TestCallMethodWithResolutionWithPromotingValueDown(); -TestLongCastToFloatConversionWhenThereIsDoubleOverload(); -TestByteCastToFloatConversionWhenThereIsDoubleOverload(); -TestShortCastToFloatConversionWhenThereIsDoubleOverload(); -TestDoubleCastWhenThereIsDoubleOverload(); -TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload(); -TestDoubleCastToLongConversionWhenThereIsShortOverload(); -TestFloatCastToLongConversionWhenThereIsShortOverload(); -TestFloatCastToShortConversionWhenThereIsObjectOverload(); -TestByteCastToShortConversionWhenThereIsObjectOverload(); -TestResolveMethodWithByteCast(); -TestResolveMethodWithShortCast(); -TestResolveMethodWithoutCastFunction(); -TestResolveMethodWithLongCast(); -TestResolveMethodWithFloatCast(); -TestResolveMethodWithDoubleCast(); -TestResolveIntMethodWithNumberObjectWithIntArgument(); -TestResolveIntMethodWithNumberObjectWithDoubleArgument(); \ No newline at end of file +describe("Tests numeric conversions and constructor/method resolutions", function () { + + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestCreateInstanceWithConstructorResolutionWithNumberLiteral", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); + + var n = new com.tns.tests.NumericConversionTest(123); + + var s = n.getInit(); + + expect(s).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithCastFunctions", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); + + var n1 = new com.tns.tests.NumericConversionTest(byte(123)); + var s1 = n1.getInit(); + expect(s1).toBe("byte"); + + var n2 = new com.tns.tests.NumericConversionTest(short(123)); + var s2 = n2.getInit(); + expect(s2).toBe("byte"); + + var n3 = new com.tns.tests.NumericConversionTest(long(123)); + var s3 = n3.getInit(); + expect(s3).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); + + var b = java.lang.Byte.parseByte("123"); + var n1 = new com.tns.tests.NumericConversionTest(b); + var s1 = n1.getInit(); + expect(s1).toBe("byte"); + + var i = java.lang.Integer.parseInt("12345"); + var n2 = new com.tns.tests.NumericConversionTest(i); + var s2 = n2.getInit(); + expect(s2).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithPromotingValueUp", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); + + var n = new com.tns.tests.NumericConversionTest(null, short(1)); + var s = n.getInit(); + expect(s).toBe("Object,int"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithPromotingValueDown", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); + + var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); + var s = n.getInit(); + expect(s).toBe("Object,Object,short"); + }); + + it("TestCallMethodWithResolutionWithPromotingValueUp", function () { + + __log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method1(byte(1)); + expect(s).toBe("short=1"); + }); + + it("TestCallMethodWithResolutionWithPromotingValueDown", function () { + + __log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method1(1); + expect(s).toBe("short=1"); + + var n1 = new com.tns.tests.NumericConversionTest(); + var s1 = n1.method1(long((1 << 16) + 2)); + expect(s1).toBe("short=2"); + }); + + it("TestLongCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(long(65536 + 2)); + expect(s).toBe("float=65538.0"); + }); + + it("TestByteCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(byte(65536 + 2)); + expect(s).toBe("float=2.0"); + }); + + it("TestShortCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(short(65536 + 2)); + expect(s).toBe("float=2.0"); + }); + + it("TestDoubleCastWhenThereIsDoubleOverload", function () { + + __log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(double(65536 + 2)); + expect(s).toBe("double=65538.0"); + }); + + it("TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(65536 + 2); + expect(s).toBe("float=65538.0"); + expect(true).toEqual(true); + }); + + it("TestDoubleCastToLongConversionWhenThereIsShortOverload", function () { + + __log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method3(double(65536 + 2)); + expect(s).toBe("long=65538"); + }); + + it("TestFloatCastToLongConversionWhenThereIsShortOverload", function () { + + __log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method3(float(65536 + 2)); + expect(s).toBe("long=65538"); + }); + + it("TestFloatCastToShortConversionWhenThereIsObjectOverload", function () { + + __log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method4(float(65536 + 2)); + expect(s).toBe("short=2"); + }); + + it("TestByteCastToShortConversionWhenThereIsObjectOverload", function () { + + __log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method4(byte(65536 + 2)); + expect(s).toBe("short=2"); + }); + + it("TestResolveMethodWithByteCast", function () { + + __log("TEST: TestResolveMethodWithByteCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(byte(65536 + 123)); + expect(s).toBe("byte=123"); + }); + + it("TestResolveMethodWithShortCast", function () { + + __log("TEST: TestResolveMethodWithShortCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(short(65536 + 1234)); + expect(s).toBe("short=1234"); + }); + + it("TestResolveMethodWithoutCastFunction", function () { + + __log("TEST: TestResolveMethodWithoutCastFunction"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(123456); + expect(s).toBe("int=123456"); + }); + + it("TestResolveMethodWithLongCast", function () { + + __log("TEST: TestResolveMethodWithLongCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(long("123456789012")); + expect(s).toBe("long=123456789012"); + }); + + it("TestResolveMethodWithFloatCast", function () { + + __log("TEST: TestResolveMethodWithFloatCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(float(1.23)); + expect(s).toBe("float=1.23"); + }); + + it("TestResolveMethodWithDoubleCast", function () { + + __log("TEST: TestResolveMethodWithDoubleCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(double(1)); + expect(s).toBe("double=1.0"); + }); + + it("TestResolveIntMethodWithNumberObjectWithIntArgument", function () { + + __log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(new Number(1)); + expect(s).toBe("int=1"); + }); + + it("TestResolveIntMethodWithNumberObjectWithDoubleArgument", function () { + + __log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(new Number(1.23)); + expect(s).toBe("double=1.23"); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/propertyAccessTests.js b/test-app/assets/app/tests/propertyAccessTests.js deleted file mode 100644 index 8bac2aa79..000000000 --- a/test-app/assets/app/tests/propertyAccessTests.js +++ /dev/null @@ -1,73 +0,0 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestAccessPropertyGetterStartingWithLowerLetter = function() { - - Log("TEST: TestAccessPropertyStartingWithLowerLetter"); - - var dummyClass = com.tns.tests.DummyClass.class; - - var name1 = dummyClass.getName(); - Assert(name1 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name1); - - var name2 = dummyClass.Name; - Assert(name2 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name2); - - var name3 = dummyClass.name; - Assert(name3 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name3); -} - -var TestAccessPropertySetterStartingWithLowerLetter = function() { - - Log("TEST: TestAccessPropertySetterStartingWithLowerLetter"); - - var dummy = new com.tns.tests.DummyClass(); - - var name = dummy.getName(); - - var newName = name + "!"; - - dummy.name = newName; - - var name1 = dummy.getName(); - - Assert(name1 === newName, "TestAccessPropertySetterStartingWithLowerLetter FAILED: Expected value should be equal to='" + newName + "' but actual value=" + name1); -} - -var TestAccessNonCamelCasePropertyWithoutGetter = function() { - - Log("TEST: TestAccessNonCamelCasePropertyWithoutGetter"); - - var d = new com.tns.tests.DummyClass("test"); - - var name1 = d.getname2(); - Assert(name1 === "test", "TestAccessNonCamelCasePropertyWithoutGetter FAILED: Expected value is 'test', actual value=" + name1); - - var name2 = d.name2; - Assert(name2 === "test", "TestAccessNonCamelCasePropertyWithoutGetter FAILED: Expected value is 'test', actual value=" + name2); -} - -var TestAccessNonCamelCasePropertyWithoutSetter = function() { - - Log("TEST: TestAccessNonCamelCasePropertyWithoutSetter"); - - var dummy = new com.tns.tests.DummyClass(); - - var name = dummy.getname2(); - - var newName = name + "!"; - - dummy.name2 = newName; - - var name1 = dummy.getname2(); - - Assert(name1 === newName, "TestAccessNonCamelCasePropertyWithoutSetter FAILED: Expected value should be equal to='" + newName + "' but actual value=" + name1); -} - -TestAccessPropertyGetterStartingWithLowerLetter(); -TestAccessPropertySetterStartingWithLowerLetter(); -TestAccessNonCamelCasePropertyWithoutGetter(); -TestAccessNonCamelCasePropertyWithoutSetter(); diff --git a/test-app/assets/app/tests/stringConversionTests.js b/test-app/assets/app/tests/stringConversionTests.js index 67458f863..32ff7a7df 100644 --- a/test-app/assets/app/tests/stringConversionTests.js +++ b/test-app/assets/app/tests/stringConversionTests.js @@ -1,98 +1,100 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCanConvertNonTrivalJavaString1 = function() { - - Log("TEST: TestCanConvertNonTrivalJavaString1"); - - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.getString(); - - var len = strConvTest.getLength(); - - var isEqualsLength = strConvTest.equalsLength(s); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString1 FAILED: Expected value is " + len + ", actual value=" + s.length); - - var isEqualsString = strConvTest.equalsString(s); - - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString1 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString2 = function() { - - Log("TEST: TestCanConvertNonTrivalJavaString2"); - - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.getString(1); - - var arr = strConvTest.getStringArr(); - - arr[0] = s; - - var newS = arr[0]; +describe("Tests string conversion ", function () { - var isEqualsLength = strConvTest.equalsLength(newS); + var myCustomEquality = function(first, second) { + return first == second; + }; - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString2 FAILED: Expected value is " + s.length + ", actual value=" + newS.length); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var isEqualsString = strConvTest.equalsString(newS); + it("TestCanConvertNonTrivalJavaString1", function () { + + __log("TEST: TestCanConvertNonTrivalJavaString1"); + + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.getString(); + + var len = strConvTest.getLength(); + + var isEqualsLength = strConvTest.equalsLength(s); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(s); + + expect(isEqualsString).toBe(true); + + }); - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString2 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString3 = function() { + it("TestCanConvertNonTrivalJavaString2", function () { + - Log("TEST: TestCanConvertNonTrivalJavaString3"); + __log("TEST: TestCanConvertNonTrivalJavaString2"); - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.s; - - var len = strConvTest.getLength(); - - var isEqualsLength = strConvTest.equalsLength(s); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString3 FAILED: Expected value is " + len + ", actual value=" + s.length); - - var isEqualsString = strConvTest.equalsString(s); + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.getString(1); + + var arr = strConvTest.getStringArr(); + + arr[0] = s; + + var newS = arr[0]; + + var isEqualsLength = strConvTest.equalsLength(newS); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(newS); + + expect(isEqualsString).toBe(true); + }); - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString3 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString4 = function() { + it("TestCanConvertNonTrivalJavaString3", function () { + + __log("TEST: TestCanConvertNonTrivalJavaString3"); - Log("TEST: TestCanConvertNonTrivalJavaString4"); - - var s = ""; - var len = 0; - var isEqualsLength = false; - var isEqualsString = false; - - var MyStringConversionTest = com.tns.tests.StringConversionTest.extend("StringConversionTest77", { - callback: function(str) { - s = str; - len = this.getLength(); - isEqualsLength = this.equalsLength(s); - isEqualsString = this.equalsString(s); - } + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.s; + + var len = strConvTest.getLength(); + + var isEqualsLength = strConvTest.equalsLength(s); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(s); + + expect(isEqualsString).toBe(true); }); - var strConvTest = new MyStringConversionTest(); - - strConvTest.triggerCallback(); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString4 FAILED: Expected value is " + len + ", actual value=" + s.length); + it("TestCanConvertNonTrivalJavaString4", function () { - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString4 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -TestCanConvertNonTrivalJavaString1(); -TestCanConvertNonTrivalJavaString2(); -TestCanConvertNonTrivalJavaString3(); -TestCanConvertNonTrivalJavaString4(); \ No newline at end of file + __log("TEST: TestCanConvertNonTrivalJavaString4"); + + var s = ""; + var len = 0; + var isEqualsLength = false; + var isEqualsString = false; + + var MyStringConversionTest = com.tns.tests.StringConversionTest.extend("StringConversionTest77", { + callback: function(str) { + s = str; + len = this.getLength(); + isEqualsLength = this.equalsLength(s); + isEqualsString = this.equalsString(s); + } + }); + + var strConvTest = new MyStringConversionTest(); + + strConvTest.triggerCallback(); + + expect(isEqualsLength).toBe(true); + + expect(isEqualsString).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testGC.js b/test-app/assets/app/tests/testGC.js index 85387738f..8ef3859c2 100644 --- a/test-app/assets/app/tests/testGC.js +++ b/test-app/assets/app/tests/testGC.js @@ -1,204 +1,197 @@ -///START: Extends tests -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test1() { - - function createObjects(name) { - var c1 = new com.tns.tests.Class1(); +describe("Tests garbage collection", function () { + + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test1", function () { + + function createObjects(name) { + var c1 = new com.tns.tests.Class1(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + expect(createObjects("Callback5")).toBe(true); + expect(createObjects("Callback26")).toBe(true); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback5") === true, "test1 FAILED: to enqueue first message"); - Assert(createObjects("Callback26") === true, "test1 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test2() { - - function indref1() { - this.class1 = new com.tns.tests.Class1(); - } - indref1.prototype.getMessage = function() { - return "~~~" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref1(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test2", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref1() { + this.class1 = new com.tns.tests.Class1(); + } + indref1.prototype.getMessage = function() { + return "~~~" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref1(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + expect(createObjects("Callback55")).toBe(true); + expect(createObjects("Callback56")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback55") === true, "test2 FAILED: to enqueue first message"); - Assert(createObjects("Callback56") === true, "test2 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test3() { - - function indref2() { - this.helper = new indref2helper(); - } - indref2.prototype.getMessage = function() { - return "---" + this.helper.getMessage(); - } - function indref2helper() { - this.class1 = new com.tns.tests.Class1(); - } - indref2helper.prototype.getMessage = function() { - return "***" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref2(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test3", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref2() { + this.helper = new indref2helper(); + } + indref2.prototype.getMessage = function() { + return "---" + this.helper.getMessage(); + } + function indref2helper() { + this.class1 = new com.tns.tests.Class1(); + } + indref2helper.prototype.getMessage = function() { + return "***" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref2(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + expect(createObjects("Callback91")).toBe(true); + expect(createObjects("Callback92")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback91") === true, "test3 FAILED: to enqueue first message"); - Assert(createObjects("Callback92") === true, "test3 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test4() { - - function indref3() { - this.helper = new indref3helper(); - } - indref3.prototype.getMessage = function() { - return "+++" + this.helper.getMessage(); - } - function indref3helper() { - this._class1 = new com.tns.tests.Class1(); - - Object.defineProperty(this, "class1", { - get: function() { - return this._class1 - } - }); - } - indref3helper.prototype.getMessage = function() { - return "^^^" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref3(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test4", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref3() { + this.helper = new indref3helper(); + } + indref3.prototype.getMessage = function() { + return "+++" + this.helper.getMessage(); + } + function indref3helper() { + this._class1 = new com.tns.tests.Class1(); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } - - Assert(createObjects("Callback1133") === true, "test4 FAILED: to enqueue first message"); - Assert(createObjects("Callback1134") === true, "test4 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test5() { - - function indref4() { - this.helper = new indref4helper(); - } - indref4.prototype.getMessage = function() { - return "&&&" + this.helper.getMessageZZZ(); - } - function indref4helper() { - var _class1 = new com.tns.tests.Class1(); + Object.defineProperty(this, "class1", { + get: function() { + return this._class1 + } + }); + } + indref3helper.prototype.getMessage = function() { + return "^^^" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref3(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - Log("indref4helper _class1=" + _class1); + expect(createObjects("Callback1133")).toBe(true); + expect(createObjects("Callback1134")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Object.defineProperty(this, "class1", { - get: function() { - return _class1 - } - ,enumerable: false - }); - } - indref4helper.prototype.getMessageZZZ = function() { - return "```" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref4(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + //originally test was commented out + xit("test5", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref4() { + this.helper = new indref4helper(); + } + indref4.prototype.getMessage = function() { + return "&&&" + this.helper.getMessageZZZ(); + } + function indref4helper() { + var _class1 = new com.tns.tests.Class1(); + + __log("indref4helper _class1=" + _class1); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } - - Assert(createObjects("Callback1178") === true, "test5 FAILED: to enqueue first message"); - Assert(createObjects("Callback1179") === true, "test5 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - -function testAccessingStringFieldWontLeak() { - - Log("TEST: testAccessingStringFieldWontLeak"); - - var dummy = new com.tns.tests.DummyClass(); + Object.defineProperty(this, "class1", { + get: function() { + return _class1 + } + ,enumerable: false + }); + } + indref4helper.prototype.getMessageZZZ = function() { + return "```" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref4(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } + + expect(createObjects("Callback1178")).toBe(true); + expect(createObjects("Callback1179")).toBe(true); + gc(); + java.lang.System.gc(); + }); - for (var i=0; i<10000; i++) - { - var name = dummy.nameField; + it("testAccessingStringFieldWontLeak", function () { - Assert(name === "dummy", "FAILED testAccessingStringFieldWontLeak: Expected vaule='dummy', actual value=" + name); - } -} - + __log("TEST: testAccessingStringFieldWontLeak"); -test1() -test2() -test3() -test4() -//test5() -testAccessingStringFieldWontLeak(); \ No newline at end of file + var dummy = new com.tns.tests.DummyClass(); + + for (var i=0; i<10000; i++) + { + var name = dummy.nameField; + + expect(name).toBe("dummy"); + } + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js index abf542c53..d72218c36 100644 --- a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js +++ b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js @@ -1,34 +1,29 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_file_outside_the_project_folder_is_required_it_should_fail = function() { - - Log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); - - var illegalAccesExceptionCaught = false; - var fileSeparator = "/"; - var nonExistingFileName = "nonExistingFile"; - var nonExistingFileExtension = ".js"; +describe("Tests running external files", function () { - //create a file in external storage - var pathToExternalStorage = android.os.Environment.getExternalStorageDirectory().toString(); - var appDirectory = new java.io.File(pathToExternalStorage + fileSeparator + nonExistingFileName + nonExistingFileExtension); - appDirectory.mkdirs(); - - try - { - //try to require it with absolute path (requireing files with absolute path should not be possible) - require(pathToExternalStorage + fileSeparator + nonExistingFileName); - } - catch(e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "When_file_outside_the_project_folder_is_required_it_should_fail FAILED: Exception(illegal access) should be thrown"); -} + it("When_file_outside_the_project_folder_is_required_it_should_fail", function () { + + __log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); -When_file_outside_the_project_folder_is_required_it_should_fail(); + var illegalAccesExceptionCaught = false; + var fileSeparator = "/"; + var nonExistingFileName = "nonExistingFile"; + var nonExistingFileExtension = ".js"; + + //create a file in external storage + var pathToExternalStorage = android.os.Environment.getExternalStorageDirectory().toString(); + var appDirectory = new java.io.File(pathToExternalStorage + fileSeparator + nonExistingFileName + nonExistingFileExtension); + appDirectory.mkdirs(); + + try + { + //try to require it with absolute path (requireing files with absolute path should not be possible) + require(pathToExternalStorage + fileSeparator + nonExistingFileName); + } + catch(e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testJniReferenceLeak.js b/test-app/assets/app/tests/testJniReferenceLeak.js new file mode 100644 index 000000000..f0278f528 --- /dev/null +++ b/test-app/assets/app/tests/testJniReferenceLeak.js @@ -0,0 +1,99 @@ +describe("Tests JNI reference leak", function () { + +// var myCustomEquality = function(first, second) { +// return first == second; +// }; +// +// beforeEach(function() { +// jasmine.addCustomEqualityTester(myCustomEquality); +// }); + + it("test_if_method_param_marshalling_leaks", function () { + + var test = new com.tns.tests.JniReferenceLeakTest(null); + + var N = 10000; + + for (var n=0; n isCollected: ' + isCollected); + expect(isCollected).toBe(true); + done(); + } + })).start(); + }; + normalTest(); + }); - Assert(name == "dummy", "FAILED: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestWorkingWithJavaArrayDoesNotMakeMemoryLeak", function () { + -var When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - Log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - - var Button = new com.tns.tests.Button1.extend("MyButton450", { - toString : function() { - return "button1"; + __log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); + + var size = 10 * 1024 * 1024; + + for (var i = 0; i < 100; i++) { + + var arr = java.lang.reflect.Array.newInstance(java.lang.Byte.class.getField("TYPE").get(null), size); + + var length = arr.length; + + expect(length).toEqual(size); + + arr[0] = 123; + + var el = arr[0]; + + expect(el).toEqual(123); + + gc(); + java.lang.System.gc(); } }); - var button = new Button(); - var arrayOfObjects = button.getDummyClassAsObjectArray(); - var name = arrayOfObjects[0].getName(); - - Assert(name == "dummy", "FAILED: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestConstructorOverride", function () { + -var When_accessing_a_static_field_on_a_javascript_instance_it_should_work = function() { - - Log("TEST: When_accessing_a_static_field_on_a_javascript_instance_it_should_work"); - - var MyButton = com.tns.tests.Button1.extend("MyButton455", { - hashCode : function() { - return 5454; - }, + __log("TEST: TestConstructorOverride"); - toString : function() { - return "button1"; - }, + var ctorCalled = false; + var isConstructor = false; + + var MyButton = com.tns.tests.Button1.extend("MyButton574", { + init : function() { + ctorCalled = true; + isConstructor = arguments[arguments.length - 1]; + }, + + toString : function() { + return "button1"; + } + }); - equals : function() { - return true; - } + var btn = new MyButton(); + + expect(ctorCalled).toEqual(true); + expect(isConstructor).toEqual(true); }); - var valueUsingChild = MyButton.STATIC_IMAGE_ID; - Assert(valueUsingChild == "static image id", "FAILED: When_accessing_a_static_field_on_a_javascript_instance_it_should_work."); - - var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; - Assert(valueUsingParent == "static image id", "FAILED: When_accessing_a_static_field_on_a_javascript_instance_it_should_work."); -}; - + it("TestConstructorOverrideOnTypeWithInitMethod", function () { -var TestRequireDirName = function() { + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); + + var isCalled = false; + var isConstructor = false; + + var MyDummyClassWithInit = com.tns.tests.DummyClassWithInit.extend("MyButton591", { + init: function() { + isCalled = true; + isConstructor = arguments[arguments.length - 1]; + } + }); + + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); + var dummy = new MyDummyClassWithInit(); + + expect(isCalled).toEqual(true); + expect(isConstructor).toEqual(true); + + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); + isCalled = undefined; + isConstructor = undefined; + dummy.callInit(); - Log("TEST: TestRequireDirName"); + expect(isCalled).toEqual(true); + expect(isConstructor).toEqual(false); + + }); - var dir = __dirname; + it("TestRequire", function () { + + __log("TEST: TestRequire"); + + var exceptionCaught = false; + try{ + var myModule = require("../simplemodule"); + } + catch(e) { + exceptionCaught = true; + } + + myModule.myLog("Hello world from NativeScript!"); + + expect(exceptionCaught).toBe(false); + }); - var expectedDirname = "/data/data/com.tns.android_runtime_testapp/files/app/tests"; + it("TestArrays", function () { - Assert(dir === expectedDirname, "TestRequireDirName FAILED: Expected value '" + expectedDirname + "', actual value=" + dir); -} - -var TestRequireFileName = function() { + __log("TEST: TestArrays"); + + var MyButton = com.tns.tests.Button1.extend("MyButton639", { + toString : function() { + return "button1"; + } + }); + var tester = new MyButton(); + var instances = tester.getDummyInstances(); + + var instanceFound = false; - Log("TEST: TestRequireFileName"); - - var file = __filename; - - var expectedFilename = "/data/data/com.tns.android_runtime_testapp/files/app/tests/tests.js"; + for (var i = 0; i < instances.length; i++) + { + if (instances[i].getName() == "second"); + { + instanceFound = true; + } + } - Assert(file === expectedFilename, "TestRequireFileName FAILED: Expected value '" + expectedFilename + "', actual value=" + file); + expect(instanceFound).toEqual(true); + + instances[0] = instances[1]; + + var instances0name = instances[0].getName(); + var instances1name = instances[1].getName(); + + expect(instances0name).toEqual(instances1name); + }); - var file2 = module.filename; - - Assert(file === file2, "TestRequireFileName FAILED: Values 'file' and 'file2' should be strict equal"); -} - - -var TestGarbageCollection = function() { + it("TestArrayLengthPropertyIsNumber", function () { + + __log("TEST: TestArrayLengthPropertyIsNumber"); + + var expectedLength = 10; - Log("TEST: TestGarbageCollection"); - - var obj = new com.tns.tests.ClassX(); - - obj.dummy(); - - Assert(obj != null, "TestGarbageCollection FAILED: Instance should not be null"); - - obj = null; - - gc(); - gc(); - gc(); - java.lang.System.gc(); - java.lang.System.gc(); - java.lang.System.gc(); - - new java.lang.Thread(new java.lang.Runnable("ThreadFunc", { - run: function() { - var isCollected = com.tns.tests.ClassX.IsCollected; - Assert(isCollected === true, "TestGarbageCollection FAILED: Expected value is 'true', actual value=" + isCollected); + function getLength(x) + { + var arr = x.getIntArray1(expectedLength); + + return arr ? arr.length : 123456; } - })).start(); -} - -var TestWorkingWithJavaArrayDoesNotMakeMemoryLeak = function() { - - Log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); - - var size = 10 * 1024 * 1024; - - for (var i = 0; i < 100; i++) { + + var MyButton = com.tns.tests.Button1.extend("MyButton680", { + toString : function() { + return "button1"; + } + }); + + var count = getLength(new MyButton()); + + expect(count).toBe(expectedLength); + + }); - var arr = java.lang.reflect.Array.newInstance(java.lang.Byte.class.getField("TYPE").get(null), size); + it("TestCreationOfLocationListener", function () { + + __log("TEST: TestCreationOfLocationListener"); + + var onLocationChangedCalled = false; + var onProviderDisabledCalled = false; + var onProviderEnabledCalled = false; + + var listener = new android.location.LocationListener("LocationListener",{ + onLocationChanged: function(location) { + onLocationChangedCalled = true; + }, + onProviderDisabled: function(provider) { + onProviderDisabledCalled = true; + }, + onProviderEnabled: function(provider) { + onProviderEnabledCalled = true; + } + }); - var length = arr.length; + listener.onLocationChanged(null); - Assert(length == size, "TestWorkingWithJavaArrayDoesNotMakeMemoryLeak FAILED: Expected value is " + size + ", actual value=" + length); + expect(onLocationChangedCalled).toEqual(true); - arr[0] = 123; + listener.onProviderDisabled(""); - var el = arr[0]; + expect(onProviderDisabledCalled).toEqual(true); - Assert(el == 123, "TestWorkingWithJavaArrayDoesNotMakeMemoryLeak FAILED: Expected value is 123, actual value=" + el); + listener.onProviderEnabled(""); + + expect(onProviderEnabledCalled).toEqual(true); + }); - gc(); - java.lang.System.gc(); - } -} - -var TestConstructorOverride = function() { - - Log("TEST: TestConstructorOverride"); + it("TestInnerClassCreation", function () { + + __log("TEST: TestInnerClassCreation"); + + var MyButton = com.tns.tests.Button1.extend("MyButton726", { + toString : function() { + return "button1" + }}); + + var button1 = new MyButton(); + + var innerButton = new button1.InnerButton(); + + var s = innerButton.getSomeString(); + + expect(s.length).toBeGreaterThan(0); + + var innerButton2 = new new button1.InnerButton().InnerClass2(123) + + var s1 = innerButton2.getSomeString2(); + + expect(s1.length).toBeGreaterThan(0); + }); - var ctorCalled = false; - var isConstructor = false; - - var MyButton = new com.tns.tests.Button1.extend("MyButton574", { - init : function() { - ctorCalled = true; - isConstructor = arguments[arguments.length - 1]; - }, + it("TestNestedClassCreation", function () { + + __log("TEST: TestNestedClassCreation"); - toString : function() { - return "button1"; - } + var i = 123; + + var nested = new com.tns.tests.Button1.InnerStaticClass(i); + + var actual_i = nested.getInt(); + + expect(actual_i).toEqual(i); }); - var btn = new MyButton(); + it("TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata", function () { + + __log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); + + var dummy = new com.tns.tests.DummyClass(); + + var dummy2 = dummy.getDummyClassAsObject(); + + var name = dummy2.getName(); + + expect(name).toEqual("dummy"); + }); - Assert(ctorCalled == true, "TestConstructorOverride FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverride FAILED: isConstructor should be 'true'"); -} - -var TestConstructorOverrideOnTypeWithInitMethod = function() { - - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); + it("TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata", function () { + + __log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); + + var dummy = new com.tns.tests.DummyClass(); + + dummy.setDummyField(); + + var dummy2 = dummy.dummyField; + + var name = dummy2.getName(); + + expect(name).toEqual("dummy"); + }); - var isCalled = false; - var isConstructor = false; + it("TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata", function () { + + __log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); + + var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D",{ + dummyMethod: function(dummy) { + return this.getName(); + } + }) + + var d = new D(); - var MyDummyClassWithInit = com.tns.tests.DummyClassWithInit.extend("MyButton591", { - init: function() { - isCalled = true; - isConstructor = arguments[arguments.length - 1]; - } + var name = d.executeCallback(); + + expect(name).toEqual("dummy"); }); - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); - var dummy = new MyDummyClassWithInit(); - - Assert(isCalled == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: isConstructor should be 'true'"); + it("TestAccessArrayElementAsObjectWithoutMetadata", function () { + + __log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); + + var d = new com.tns.tests.DummyClass(); + + var arr = d.getDummyClassArrayAsObject(); + + var arrLength = arr.length; + + expect(arrLength).toEqual(1); + + var dummy = arr[0]; + + var name = dummy.getName(); + + expect(name).toBe("dummy"); + }); - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); - isCalled = undefined; - isConstructor = undefined; - dummy.callInit(); - - Assert(isCalled == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: constructor not called"); - Assert(isConstructor == false, "FAILED: isConstructor should be 'false' actual: " + isConstructor); -} + it("TestCallMethodThatReturnsNull", function () { + + __log("TEST: TestCallMethodThatReturnsNull"); -var TestRequire = function() { - Log("TEST: TestRequire"); + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.getNull(); + + expect(x).toEqual(null); + }); - var myModule = require("../simplemodule"); - myModule.myLog("Hello world from NativeScript!"); -} + it("TestCallMethodThatReturnsNullString", function () { -var TestArrays = function() { - Log("TEST: TestArrays"); - - var MyButton = com.tns.tests.Button1.extend("MyButton639", { - toString : function() { - return "button1"; - } + __log("TEST: TestCallMethodThatReturnsNullString"); + + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.getNullString(); + + expect(x).toEqual(null); }); - var tester = new MyButton(); - var instances = tester.getDummyInstances(); - var instanceFound = false; + it("TestAccessNullField", function () { - for (var i = 0; i < instances.length; i++) - { - if (instances[i].getName() == "second"); - { - instanceFound = true; - } - } - - Assert(instanceFound, "TestArrays FAILED: TestArrays indexer not working"); - - instances[0] = instances[1]; - - var instances0name = instances[0].getName(); - var instances1name = instances[1].getName(); + __log("TEST: TestAccessNullField"); + + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.nullField + + expect(x).toEqual(null); + }); - Assert(instances0name == instances1name, "TestArrays FAILED: Cannot set element into the array"); -} + it("TestAccessNullArrayElement", function () { -var TestArrayLengthPropertyIsNumber = function() { + __log("TEST: TestAccessNullArrayElement"); - Log("TEST: TestArrayLengthPropertyIsNumber"); + var dummy = new com.tns.tests.DummyClass(); + + var arr = dummy.getArrayWithNullElement(); + + __log("arr=" + arr.length) + + var x = arr[0]; + + expect(x).toEqual(null); + }); - var expectedLength = 10; + it("TEMPLATE", function () { - function getLength(x) - { - var arr = x.getIntArray1(expectedLength); + __log("TEST: TestCallMethodWithIntVarArg"); - return arr ? arr.length : 123456; - } - - var MyButton = com.tns.tests.Button1.extend("MyButton680", { - toString : function() { - return "button1"; - } + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatIntArrayAsString([1, 2, 3, 4]); + + expect(s).toBe("1234"); }); - var count = getLength(new MyButton()); + it("TestCallMethodWithCharVarArg", function () { + + __log("TEST: TestCallMethodWithCharVarArg"); + + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatCharArrayAsString(['t', 'e', 's', 't']); + + expect(s).toBe("test"); + }); - Assert(count === expectedLength, "TestArrayLengthPropertyIsNumber FAILED: Array length property should be number"); -} + it("TestCallMethodWithObjectVarArg", function () { + + __log("TEST: TestCallMethodWithObjectVarArg"); + + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatObjectArrayAsString([1, "test", false]); -var TestCreationOfLocationListener = function() { - Log("TEST: TestCreationOfLocationListener"); - - var onLocationChangedCalled = false; - var onProviderDisabledCalled = false; - var onProviderEnabledCalled = false; - - var listener = new android.location.LocationListener("LocationListener",{ - onLocationChanged: function(location) { - onLocationChangedCalled = true; - }, - onProviderDisabled: function(provider) { - onProviderDisabledCalled = true; - }, - onProviderEnabled: function(provider) { - onProviderEnabledCalled = true; - } + expect(s).toBe("1, test, false"); }); - listener.onLocationChanged(null); - - Assert(onLocationChangedCalled, "TestCreationOfLocationListener FAILED: onLocationChanged is not called"); - - listener.onProviderDisabled(""); + it("TestCanInheritFromClassInAndroidSupportLibrary", function () { + + __log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); + + var MyParcelableCompat = android.support.v4.os.ParcelableCompat.extend("MyParcelableCompat", { + toString: function() { + return "MyParcelableCompat"; + } + }); + + var compat = new MyParcelableCompat(); + + var s = compat.toString(); + + expect(s).toBe("MyParcelableCompat"); + }); - Assert(onProviderDisabledCalled, "TestCreationOfLocationListener FAILED: onProviderDisabled is not called"); + it("TestCallMethodWithByteParameter", function () { + + __log("TEST: TestCallMethodWithByteParameter"); + + var b = java.lang.Byte.valueOf(byte(123)); + + var s = "" + b; + + expect(s).toBe("123"); + }); - listener.onProviderEnabled(""); + it("TestCallMethodWithFloatParameter", function () { + + __log("TEST: TestCallMethodWithFloatParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s = d.methodWithoutOverloads(1.23); + + expect(s).toBe("float=1.23"); + }); - Assert(onProviderEnabledCalled, "TestCreationOfLocationListener FAILED: onProviderEnabled is not called"); -} + it("TestCanCallStaticMethodThroughBaseClass", function () { + + __log("TEST: TestCanCallStaticMethodThroughBaseClass"); + + var name = com.tns.tests.MyClassDerived.getName(); -var TestInnerClassCreation = function() { - Log("TEST: TestInnerClassCreation"); - - var MyButton = com.tns.tests.Button1.extend("MyButton726", { - toString : function() { - return "button1" - }}); - - var button1 = new MyButton(); - - var innerButton = new button1.InnerButton(); - - var s = innerButton.getSomeString(); - - Assert(s.length > 0, "TestInnerClassCreation FAILED: innerButton.getSomeString returned empty string"); + expect(name).toBe("com.tns.tests.MyClassBase"); + }); - var innerButton2 = new new button1.InnerButton().InnerClass2(123) + it("TestUseFieldThatIsArray", function () { + + __log("TEST: TestUseFieldThatIsArray"); + + var d = new com.tns.tests.DummyClass(); + + var arrInt = d.arrIntField; + + var arrIntLength = arrInt.length; + + expect(arrIntLength).toBe(5); + + var intElement = arrInt[2]; + + expect(intElement).toBe(33); + + var arrString = d.arrStringField; + + var arrStringLength = arrString.length; + + expect(arrIntLength).toBe(5); + + var stringElement = arrString[2]; + + expect(stringElement).toBe("cc"); + }); - var s1 = innerButton2.getSomeString2(); + it("TestCanAssignArrayToField", function () { + + __log("TEST: TestCanAssignArrayToField"); + + var d = new com.tns.tests.DummyClass(); + + var arr = d.arrIntField2; + + expect(arr).toBe(null); + + d.arrIntField2 = d.arrIntField; + + var arrLength = d.arrIntField2.length; + + expect(arrLength).toBe(5); + }); - Assert(s1.length > 0, "TestInnerClassCreation FAILED: innerButton2.getSomeString2 returned empty string"); -} + it("TestCallMethodThatReturnsLong", function () { + + __log("TEST: TestCallMethodThatReturnsLong"); + + var n = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 -var TestNestedClassCreation = function() { - Log("TEST: TestNestedClassCreation"); + expect(n.__proto__.valueOf()).toBe(0); + expect(n.value).toBe(undefined); + expect(typeof n).toBe("number"); + expect(n instanceof Number).toBe(false); - var i = 123; - - var nested = new com.tns.tests.Button1.InnerStaticClass(i); - - var actual_i = nested.getInt(); + var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + + var ctorFuncName = n.__proto__.constructor.name; + expect(ctorFuncName).toBe("NativeScriptLongNumber"); + expect(isNaN(n.valueOf())).toBe(true); + + var javaValue = n.value; + expect(javaValue).toBe("9007199254740992"); + + var typeName = typeof n; + expect(typeName).toBe("object"); + }); - Assert(actual_i == i, "TestNestedClassCreation FAILED: InnerStaticClass.getInt returned wrong value " + actual_i + ", expected " + i); -} + it("TestCallMethodWithLongParameter", function () { -var TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata = function() { - Log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); - - var dummy = new com.tns.tests.DummyClass(); - - var dummy2 = dummy.getDummyClassAsObject(); - - var name = dummy2.getName(); + __log("TEST: TestCallMethodWithLongParameter"); + + var d = new com.tns.tests.DummyClass(); + + var n1 = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 + var s1 = d.getLongAsString(n1); + expect(s1).toBe("9007199254740991"); + + var n2 = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + var s2 = d.getLongAsString(n2); + expect(s2).toBe("9007199254740992"); + + var n3 = java.lang.Long.parseLong("9007199254740993"); // 9007199254740992 = 2^53+1 + var s3 = d.getLongAsString(n3); + expect(s3).toBe("9007199254740993"); + }); - Assert(name == "dummy", "TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - + it("TestCallMethodWithLongCastArgument", function () { -var TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata = function() { - Log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); + __log("TEST: TestCallMethodWithLongCastArgument"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.getLongAsString(long("9007199254740991")); // 9007199254740991 = 2^53-1 + expect(s1).toBe("9007199254740991"); + + var s2 = d.getLongAsString(long(9007199254740991)); // 9007199254740991 = 2^53-1 + expect(s2).toBe("9007199254740991"); + + var s3 = d.getLongAsString(long("9007199254740992")); // 9007199254740992 = 2^53 + expect(s3).toBe("9007199254740992"); + + var s4 = d.getLongAsString(long("9007199254740993")); // 9007199254740992 = 2^53+1 + expect(s4).toBe("9007199254740993"); + }); + + it("TestCallToStringOfNativeScriptLongObject", function () { + + __log("TEST: TestCallToStringOfNativeScriptLongObject"); + + var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + + var s = n.toString(); + + expect(s).toBe(n.value); + }); - var dummy = new com.tns.tests.DummyClass(); + it("TestCallMethodWithLongParameterWithNumberObject", function () { + + __log("TEST: TestCallMethodWithLongParameterWithNumberObject"); + + var d = new com.tns.tests.DummyClass(); + + var s = d.getLongAsString(new Number("9007199254740991")); // 9007199254740991 = 2^53-1 + expect(s).toBe("9007199254740991"); + }); - dummy.setDummyField(); + it("TestCallMethodWithMinAndMaxLongValues", function () { + + __log("TEST: TestCallMethodWithMinAndMaxLongValues"); + + var d = new com.tns.tests.DummyClass(); + + var maxLong = d.getMaxLong(); + var sMax = d.getLongAsString(maxLong); + expect(sMax).toBe("9223372036854775807"); + + var minLong = d.getMinLong(); + var sMin = d.getLongAsString(minLong); + expect(sMin).toBe("-9223372036854775808"); + }); - var dummy2 = dummy.dummyField; + it("TestCallMethodWithByteParameter", function () { + + __log("TEST: TestCallMethodWithByteParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(byte(123)); + expect(s1).toBe("byte=123"); + + var s2 = d.method1(byte(new Number(123))); + expect(s2).toBe("byte=123"); + + var s3 = d.method1(byte("123")); + expect(s3).toBe("byte=123"); + + var s4 = d.method1(byte(new String("123"))); + expect(s4).toBe("byte=123"); + }); - var name = dummy2.getName(); + it("TestCallMethodWithShortParameter", function () { + + __log("TEST: TestCallMethodWithShortParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(short(12345)); + expect(s1).toBe("short=12345"); + + var s2 = d.method1(short(new Number(12345))); + expect(s2).toBe("short=12345"); + + var s3 = d.method1(short("12345")); + expect(s3).toBe("short=12345"); + + var s4 = d.method1(short(new String("12345"))); + expect(s4).toBe("short=12345"); + }); - Assert(name == "dummy", "TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - - -var TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata = function() { - Log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); + it("TestCallMethodWithBooleanParameter", function () { + + __log("TEST: TestCallMethodWithBooleanParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(true); + expect(s1).toBe("boolean=true"); + + var s2 = d.method1(false); + expect(s2).toBe("boolean=false"); + + var s3 = d.method1(new Boolean(true)); + expect(s3).toBe("boolean=true"); + + var s4 = d.method1(new Boolean(false)); + expect(s4).toBe("boolean=false"); + }); - var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D",{ - dummyMethod: function(dummy) { - return this.getName(); + it("TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); + + try + { + var s = d.method1(new java.lang.Object()); } - }) - - var d = new D(); - - var name = d.executeCallback(); + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(name == "dummy", "TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - -var TestAccessArrayElementAsObjectWithoutMetadata = function() { - - Log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); - - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestAccessArrayElementAsObjectWithoutMetadata FAILED: Expected array length is 1, actual length=" + arrLength); - - var dummy = arr[0]; - - var name = dummy.getName(); - - Assert(name === "dummy", "TestAccessArrayElementAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - -var TestCallMethodThatReturnsNull = function() { - - Log("TEST: TestCallMethodThatReturnsNull"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.getNull(); - - Assert(x == null, "TestCallMethodThatReturnsNull FAILED: Expected value is null, but actual value is not null"); -} - -var TestCallMethodThatReturnsNullString = function() { - - Log("TEST: TestCallMethodThatReturnsNullString"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.getNullString(); - - Assert(x == null, "TestCallMethodThatReturnsNullString FAILED: Expected value is null, but actual value is not null"); -} - -var TestAccessNullField = function() { - - Log("TEST: TestAccessNullField"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.nullField - - Assert(x == null, "TestAccessNullField FAILED: Expected value is null, but actual value is not null"); -} - -var TestAccessNullArrayElement = function() { - - Log("TEST: TestAccessNullArrayElement"); - - var dummy = new com.tns.tests.DummyClass(); - - var arr = dummy.getArrayWithNullElement(); - - Log("arr=" + arr.length) - - var x = arr[0]; - - Assert(x == null, "TestAccessNullArrayElement FAILED: Expected value is null, but actual value is not null"); -} - -var TestCallMethodWithIntVarArg = function() { - - Log("TEST: TestCallMethodWithIntVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatIntArrayAsString([1, 2, 3, 4]); - - Assert(s === "1234", "TestCallMethodWithIntVarArg FAILED: Expected value is '1234', but actual value is=" + s); -} - -var TestCallMethodWithCharVarArg = function() { - - Log("TEST: TestCallMethodWithCharVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatCharArrayAsString(['t', 'e', 's', 't']); - - Assert(s === "test", "TestCallMethodWithCharVarArg FAILED: Expected value is 'test', but actual value is=" + s); -} - -var TestCallMethodWithObjectVarArg = function() { - - Log("TEST: TestCallMethodWithObjectVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatObjectArrayAsString([1, "test", false]); - - Assert(s === "1, test, false", "TestCallMethodWithObjectVarArg FAILED: Expected value is '1, test, false', but actual value is=" + s); -} - -var TestCanInheritFromClassInAndroidSupportLibrary = function() { - - Log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); - - var MyParcelableCompat = android.support.v4.os.ParcelableCompat.extend("MyParcelableCompat", { - toString: function() { - return "MyParcelableCompat"; + it("TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); + + var exceptionCaught = false; + + try + { + var d = new com.tns.tests.DummyClass(new java.lang.Object()); + } + catch (e) + { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var compat = new MyParcelableCompat(); - - var s = compat.toString(); - - Assert(s === "MyParcelableCompat", "TestCanInheritFromClassInAndroidSupportLibrary FAILED: Expected value is 'MyParcelableCompat', but actual value is=" + s); -} - -var TestCallMethodWithByteParameter = function() { - - Log("TEST: TestCallMethodWithByteParameter"); - - var b = java.lang.Byte.valueOf(byte(123)); - - var s = "" + b; - - Assert(s === "123", "TestCallMethodWithByteParameter FAILED: Expected value is '123', but actual value is=" + s); -} - -var TestCallMethodWithFloatParameter = function() { - - Log("TEST: TestCallMethodWithFloatParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.methodWithoutOverloads(1.23); - - Assert(s === "float=1.23", "TestCallMethodWithFloatParameter FAILED: Expected value is 'float=1.23', but actual value is=" + s); -} - -var TestCanCallStaticMethodThroughBaseClass = function() { - - Log("TEST: TestCanCallStaticMethodThroughBaseClass"); - - var name = com.tns.tests.MyClassDerived.getName(); - - Assert(name === "com.tns.tests.MyClassBase", "TestCanCallStaticMethodThroughBaseClass FAILED: TestCanCallStaticMethodThroughBaseClass: Expected value is 'com.tns.tests.MyClassBase', but actual value is=" + name); -} - -var TestUseFieldThatIsArray = function() { - - Log("TEST: TestUseFieldThatIsArray"); - - var d = new com.tns.tests.DummyClass(); - - var arrInt = d.arrIntField; - - var arrIntLength = arrInt.length; - - Assert(arrIntLength === 5, "TestUseFieldThatIsArray FAILED: Expected array length is 5, but actual length is=" + arrIntLength); - - var intElement = arrInt[2]; - - Assert(intElement === 33, "TestUseFieldThatIsArray FAILED: Expected array element value is 33, but actual element value is=" + intElement); - - var arrString = d.arrStringField; - - var arrStringLength = arrString.length; - - Assert(arrIntLength === 5, "TestUseFieldThatIsArray FAILED: Expected array length is 5, but actual length is=" + arrStringLength); - - var stringElement = arrString[2]; - - Assert(stringElement === "cc", "TestUseFieldThatIsArray FAILED: Expected array element value is 'cc', but actual element value is=" + stringElement); -} - -var TestCanAssignArrayToField = function() { - - Log("TEST: TestCanAssignArrayToField"); - - var d = new com.tns.tests.DummyClass(); - - var arr = d.arrIntField2; - - Assert(arr === null, "TestCanAssignArrayToField FAILED: Expected value is null, but actual value is=" + arr); - - d.arrIntField2 = d.arrIntField; - - var arrLength = d.arrIntField2.length; - - Assert(arrLength === 5, "TestCanAssignArrayToField FAILED: Expected array length is 5, but actual length is=" + arrLength); -} - -var TestCallMethodThatReturnsLong = function() { - - Log("TEST: TestCallMethodThatReturnsLong"); - - var n = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 - - Assert(n.__proto__.valueOf() === 0, "TestCallMethodThatReturnsLong FAILED: n.__proto__.valueOf() === 0"); - Assert(n.value === undefined, "TestCallMethodThatReturnsLong FAILED: n.value === undefined"); - Assert(typeof n === "number", "TestCallMethodThatReturnsLong FAILED: typeof n === 'number'"); - Assert(n instanceof Number === false, "TestCallMethodThatReturnsLong FAILED: n instanceof Number === false"); - - var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - - var ctorFuncName = n.__proto__.constructor.name; - Assert(ctorFuncName === "NativeScriptLongNumber", "TestCallMethodThatReturnsLong FAILED: Expected constructor function name is 'NativeScriptLongNumber', actual name=" + ctorFuncName); - Assert(isNaN(n.valueOf()) === true, "TestCallMethodThatReturnsLong FAILED: Expected JavaScript value is NaN"); - var javaValue = n.value; - Assert(javaValue === "9007199254740992", "TestCallMethodThatReturnsLong FAILED: Expected Java value is '9007199254740992', actual value=" + javaValue); - var typeName = typeof n; - Assert(typeName === "object", "TestCallMethodThatReturnsLong FAILED: Expected type is 'object', actual type=" + typeName); -} - -var TestCallMethodWithLongParameter = function() { - - Log("TEST: TestCallMethodWithLongParameter"); - - var d = new com.tns.tests.DummyClass(); - - var n1 = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 - var s1 = d.getLongAsString(n1); - Assert(s1 === "9007199254740991", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740991', actual value=" + s1); - - var n2 = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - var s2 = d.getLongAsString(n2); - Assert(s2 === "9007199254740992", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740992', actual value=" + s2); - - var n3 = java.lang.Long.parseLong("9007199254740993"); // 9007199254740992 = 2^53+1 - var s3 = d.getLongAsString(n3); - Assert(s3 === "9007199254740993", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740993', actual value=" + s3); -} - -var TestCallMethodWithLongCastArgument = function() { - - Log("TEST: TestCallMethodWithLongCastArgument"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.getLongAsString(long("9007199254740991")); // 9007199254740991 = 2^53-1 - Assert(s1 === "9007199254740991", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740991', actual value=" + s1); - - var s2 = d.getLongAsString(long(9007199254740991)); // 9007199254740991 = 2^53-1 - Assert(s2 === "9007199254740991", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740991', actual value=" + s2); - - var s3 = d.getLongAsString(long("9007199254740992")); // 9007199254740992 = 2^53 - Assert(s3 === "9007199254740992", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740992', actual value=" + s3); - - var s4 = d.getLongAsString(long("9007199254740993")); // 9007199254740992 = 2^53+1 - Assert(s4 === "9007199254740993", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740993', actual value=" + s4); -} - -var TestCallToStringOfNativeScriptLongObject = function() { - - Log("TEST: TestCallToStringOfNativeScriptLongObject"); - - var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - - var s = n.toString(); - - Assert(s === n.value, "TestCallToStringOfNativeScriptLongObject FAILED: Expected value is '9007199254740992', actual value=" + s); -} - -var TestCallMethodWithLongParameterWithNumberObject = function() { - - Log("TEST: TestCallMethodWithLongParameterWithNumberObject"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.getLongAsString(new Number("9007199254740991")); // 9007199254740991 = 2^53-1 - Assert(s === "9007199254740991", "TestCallMethodWithLongParameterWithNumberObject FAILED: Expected value is '9007199254740991', actual value=" + s); -} - -var TestCallMethodWithMinAndMaxLongValues = function() { - - Log("TEST: TestCallMethodWithMinAndMaxLongValues"); - - var d = new com.tns.tests.DummyClass(); - - var maxLong = d.getMaxLong(); - var sMax = d.getLongAsString(maxLong); - Assert(sMax === "9223372036854775807", "TestCallMethodWithMinAndMaxLongValues FAILED: Expected value is '9223372036854775807', actual value=" + sMax); - - var minLong = d.getMinLong(); - var sMin = d.getLongAsString(minLong); - Assert(sMin === "-9223372036854775808", "TestCallMethodWithMinAndMaxLongValues FAILED: Expected value is '-9223372036854775808', actual value=" + sMin); -} - -var TestCallMethodWithByteParameter = function() { - - Log("TEST: TestCallMethodWithByteParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(byte(123)); - Assert(s1 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s1); - - var s2 = d.method1(byte(new Number(123))); - Assert(s2 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s2); - - var s3 = d.method1(byte("123")); - Assert(s3 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s3); - - var s4 = d.method1(byte(new String("123"))); - Assert(s4 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s4); -} - -var TestCallMethodWithShortParameter = function() { - - Log("TEST: TestCallMethodWithShortParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(short(12345)); - Assert(s1 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s1); - - var s2 = d.method1(short(new Number(12345))); - Assert(s2 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s2); - - var s3 = d.method1(short("12345")); - Assert(s3 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s3); - - var s4 = d.method1(short(new String("12345"))); - Assert(s4 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s4); -} - -var TestCallMethodWithBooleanParameter = function() { - - Log("TEST: TestCallMethodWithBooleanParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(true); - Assert(s1 === "boolean=true", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=true', actual value=" + s1); - - var s2 = d.method1(false); - Assert(s2 === "boolean=false", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=false', actual value=" + s1); - - var s3 = d.method1(new Boolean(true)); - Assert(s3 === "boolean=true", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=true', actual value=" + s3); - - var s4 = d.method1(new Boolean(false)); - Assert(s4 === "boolean=false", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=false', actual value=" + s4); -} - -var TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); - - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method1(new java.lang.Object()); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); - - var exceptionCaught = false; - - try - { - var d = new com.tns.tests.DummyClass(new java.lang.Object()); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); - - var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); - - var o = new java.lang.Object(); - arr[0] = o; - - var exceptionCaught = false; - - try - { - arr[0] = {}; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject FAILED: No exception is thrown"); - - var isOldElement = o.equals(arr[0]); - - Assert(isOldElement === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject FAILED: Old and new element should be the same"); -} - -var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); - - var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); - - var o = new java.lang.Object(); - arr[0] = o; - - var exceptionCaught = false; - - try - { - arr[0] = 123; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive FAILED: No exception is thrown"); - - var isOldElement = o.equals(arr[0]); - - Assert(isOldElement === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive FAILED: Old and new element should be the same"); -} - -var TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); - - var exceptionCaught = false; - - try - { - var d = new com.tns.tests.DummyClass({}); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); + it("TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); + + var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); + + var o = new java.lang.Object(); + arr[0] = o; + + var exceptionCaught = false; + + try + { + arr[0] = {}; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + var isOldElement = o.equals(arr[0]); + + expect(isOldElement).toBe(true); + }); - var exceptionCaught = false; + it("TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); + + var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); + + var o = new java.lang.Object(); + arr[0] = o; + + var exceptionCaught = false; + + try + { + arr[0] = 123; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + var isOldElement = o.equals(arr[0]); + + expect(isOldElement).toBe(true); + }); - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method2({}); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject FAILED: No exception is thrown"); -} + it("TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); + + var exceptionCaught = false; -var TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected = function() { + try + { + var d = new com.tns.tests.DummyClass({}); + } + catch (e) + { + exceptionCaught = true; + } - Log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); - - var exceptionCaught = false; + expect(exceptionCaught).toBe(true); + }); - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method2(123); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = function() { + it("TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); - Log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); - - var exceptionCaught = false; - - var impl = { - echo : function(s) { - return "!!!" + s; + try + { + var s = d.method2({}); + } + catch (e) + { + exceptionCaught = true; } - }; - - var MyButton = com.tns.tests.Button1.extend("btn1303", impl); - var btn = new MyButton(); - - var echo = com.tns.tests.Button1.prototype.echo; - delete com.tns.tests.Button1.prototype.echo; - delete impl.echo; - try - { - Log("btn=" + btn.triggerEcho("12345")); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted FAILED (1): No exception is thrown"); + expect(exceptionCaught).toBe(true); + }); - exceptionCaught = false; + it("TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); - try - { - Log("btn=" + btn.triggerEchoAsObject("123")); - } - catch (e) - { - exceptionCaught = true; - } + try + { + var s = d.method2(123); + } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted FAILED (2): No exception is thrown"); + expect(exceptionCaught).toBe(true); + }); - com.tns.tests.Button1.prototype.echo = echo; -} - + it("TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); + + var exceptionCaught = false; + + var impl = { + echo : function(s) { + return "!!!" + s; + } + }; + + var MyButton = com.tns.tests.Button1.extend("btn1303", impl); + var btn = new MyButton(); + + var echo = com.tns.tests.Button1.prototype.echo; + delete com.tns.tests.Button1.prototype.echo; + delete impl.echo; + + try + { + __log("btn=" + btn.triggerEcho("12345")); + } + catch (e) + { + exceptionCaught = true; + } -var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = function() { + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; - Log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); - - var exceptionCaught = false; - - var impl = { - echo : function(s) { - return "!!!" + s; + try + { + __log("btn=" + btn.triggerEchoAsObject("123")); } - }; - - var MyButton = com.tns.tests.Button1.extend("btn1344", impl); - var btn = new MyButton(); - - impl.echo = "" - - try - { - Log("btn=" + btn.triggerEcho("123")); - } - catch (e) - { - exceptionCaught = true; - } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten FAILED (1): No exception is thrown"); + expect(exceptionCaught).toBe(true); + + com.tns.tests.Button1.prototype.echo = echo; + }); - exceptionCaught = false; - - try - { - Log("btn=" + btn.triggerEchoAsObject("123")); - } - catch (e) - { - exceptionCaught = true; - } + it("TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); + + var exceptionCaught = false; + + var impl = { + echo : function(s) { + return "!!!" + s; + } + }; + + var MyButton = com.tns.tests.Button1.extend("btn1344", impl); + var btn = new MyButton(); + + impl.echo = "" + + try + { + __log("btn=" + btn.triggerEcho("123")); + } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten FAILED (2): No exception is thrown"); -} + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; -var TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed = function() { + try + { + __log("btn=" + btn.triggerEchoAsObject("123")); + } + catch (e) + { + exceptionCaught = true; + } - Log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); - - var methodCalled = false; - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - var impl1 = new com.tns.tests.DummyClass.MyInterface("impl1_1393", { - echoInt: function(i) { methodCalled = true; return i; } + expect(exceptionCaught).toBe(true); }); - var i = d.triggerEchoInt(impl1, 123); - - Assert(methodCalled === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Method override is not called"); - - Assert(i === 123, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Expected value is 123, actual value=" + i); - - try - { - d.triggerDoSomething(impl1); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: No exception is thrown"); - - methodCalled = false; - exceptionCaught = false; - - var impl2 = new com.tns.tests.DummyClass.MyInterface("impl2_1417",{ - doSomething: function() { methodCalled = true; } + it("TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); + + var methodCalled = false; + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); + + var impl1 = new com.tns.tests.DummyClass.MyInterface("impl1_1393", { + echoInt: function(i) { methodCalled = true; return i; } + }); + + var i = d.triggerEchoInt(impl1, 123); + + expect(methodCalled).toBe(true); + + expect(i).toBe(123); + + try + { + d.triggerDoSomething(impl1); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + methodCalled = false; + exceptionCaught = false; + + var impl2 = new com.tns.tests.DummyClass.MyInterface("impl2_1417",{ + doSomething: function() { methodCalled = true; } + }); + + d.triggerDoSomething(impl2); + + expect(methodCalled).toBe(true); + + try + { + d.triggerEchoInt(impl2, 123); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); }); - d.triggerDoSomething(impl2); - - Assert(methodCalled === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Method override is not called"); - - try - { - d.triggerEchoInt(impl2, 123); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); - - var implObj = {} - - var exceptionCaught = false; - - var Button1 = new com.tns.tests.Button1.extend("Button1", implObj); - - try - { - var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D1440", implObj); - } - catch (e) - { - Log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); - - var d = new com.tns.tests.DummyClass(); - - var exceptionCaught = false; - - try - { - d.setName(false); - } - catch (e) - { - Log("e=" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected FAILED: No exception is thrown"); - - exceptionCaught = false; - - try - { - d.setName(true); - } - catch (e) - { - Log("e=" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected = function() { - - Log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); - - var d = new com.tns.tests.DummyClass(); - - var exceptionCaught = false; - - try - { - d.setName(1); - } - catch (e) - { - Log("e=" + e); - exceptionCaught = true; - } + it("TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); + + var implObj = {} + + var exceptionCaught = false; + + var Button1 = com.tns.tests.Button1.extend("Button1", implObj); + + try + { + var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D1440", implObj); + } + catch (e) + { + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected FAILED: No exception is thrown"); -} - -var TestCallProctedMethodDefinedAsAbstractAndThenOverwritten = function() { - - Log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); + it("TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); + + var d = new com.tns.tests.DummyClass(); + + var exceptionCaught = false; + + try + { + d.setName(false); + } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; - var C = com.tns.tests.AbsClassImpl.extend("C1520", { - echoString: function(s) { - var echo = this.super.echoString(s); - return echo + "!"; + try + { + d.setName(true); } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); }); - var c = new C(); - var s = c.echo("test"); - - Assert(s === "test!", "TestCallProctedMethodDefinedAsAbstractAndThenOverwritten FAILED: Expected value 'test!', actual value=" + s); -} - -var TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString = function() { + it("TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected", function () { - Log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.getNameAsCharSequence(); + __log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); + + var d = new com.tns.tests.DummyClass(); + + var exceptionCaught = false; + + try + { + d.setName(1); + } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(s === "dummy", "TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString FAILED: Expected value 'dummy', actual value=" + s); -} - - -var TestObjectReturnValueIsTreatedAsStringWhenItIsString = function() { + it("TestCallProctedMethodDefinedAsAbstractAndThenOverwritten", function () { + + __log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); + + var C = com.tns.tests.AbsClassImpl.extend("C1520", { + echoString: function(s) { + var echo = this.super.echoString(s); + return echo + "!"; + } + }); + var c = new C(); + + var s = c.echo("test"); + + expect(s).toBe("test!"); + }); - Log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); + it("TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString", function () { + + __log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); - var d = new com.tns.tests.DummyClass(); - - var s = d.getNameAsCharSequence(); + var d = new com.tns.tests.DummyClass(); + + var s = d.getNameAsCharSequence(); + + expect(s).toBe("dummy"); + }); - Assert(s === "dummy", "TestObjectReturnValueIsTreatedAsStringWhenItIsString FAILED: Expected value 'dummy', actual value=" + s); -} - -var TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava = function() { - - Log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); + it("TestObjectReturnValueIsTreatedAsStringWhenItIsString", function () { + + __log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); - var O = java.lang.Object.extend("O1560", {}); - - var ctor = (new O()).getClass().getConstructors()[0]; + var d = new com.tns.tests.DummyClass(); + + var s = d.getNameAsCharSequence(); + + expect(s).toBe("dummy"); + expect(true).toEqual(true); + }); - var o = ctor.newInstance(null); - - Assert(o !== null, "TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava FAILED: Cannot find implementation object for given extended class"); -} + it("TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava", function () { -var TestCanCallMethodThatReturnsArrayOfInterfaces = function() { + __log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); - Log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); + var O = java.lang.Object.extend("O1560", {}); + + var ctor = (new O()).getClass().getConstructors()[0]; + + var o = ctor.newInstance(null); - var arr = java.lang.reflect.Array.newInstance(android.view.View.OnClickListener.class, 1); - - Assert(arr !== null, "TestCanCallMethodThatReturnsArrayOfInterfaces FAILED: Cannot create an array of interfaces"); - - var listener = new android.view.View.OnClickListener("listener1580", {}); + expect(o).not.toBe(null); + }); - arr[0] = listener; - - Assert(arr[0] !== null, "TestCanCallMethodThatReturnsArrayOfInterfaces FAILED: Cannot set an interface implementation to an array of interfaces"); -} - -var TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes = function() { + it("TestCanCallMethodThatReturnsArrayOfInterfaces", function () { - Log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); + __log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); - var formats = java.lang.reflect.Array.newInstance(java.text.NumberFormat.class, 2); - formats[0] = java.text.NumberFormat.getInstance(); - formats[1] = java.text.NumberFormat.getIntegerInstance(); - var mf = new java.text.MessageFormat("{0}, {1}") - mf.setFormats(formats); - var arr = mf.parse("123, 4567"); - var len = arr.length; - - Assert(len === 2, "TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes FAILED: Expected length is 2, actual=" + len); -} - -var TestCanCallToStringOnClassProxy = function() { - Log("TEST: TestCanCallToStringOnClassProxy"); + var arr = java.lang.reflect.Array.newInstance(android.view.View.OnClickListener.class, 1); + + expect(arr).not.toBe(null); + + var listener = new android.view.View.OnClickListener("listener1580", {}); + + arr[0] = listener; - var view = android.view.View; - var s = view.toString(); + expect(arr[0]).not.toBe(null); + }); - Assert(s.length > 0, "TestCanCallToStringOnClassProxy FAILED: Cannot call toString on class proxy"); -} + it("TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes", function () { + + __log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); -var When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class = function() { - Log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); + var formats = java.lang.reflect.Array.newInstance(java.text.NumberFormat.class, 2); + formats[0] = java.text.NumberFormat.getInstance(); + formats[1] = java.text.NumberFormat.getIntegerInstance(); + var mf = new java.text.MessageFormat("{0}, {1}") + mf.setFormats(formats); + var arr = mf.parse("123, 4567"); + var len = arr.length; - var MyButton = com.tns.tests.Button1.extend("MyButton1615", { - toString : function() { - return "button1" - }}); - - - var button = new MyButton(); - var clazz1 = button.getClass(); - var name1 = clazz1.getName(); - Assert(name1.indexOf("MyButton1615") != -1, "FAILED: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); + expect(len).toBe(2); + }); - var clazz2 = MyButton.class; - var name2 = clazz2.getName(); - Assert(name2.indexOf("MyButton1615") != -1, "FAILED: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); -} + it("TestCanCallToStringOnClassProxy", function () { + + __log("TEST: TestCanCallToStringOnClassProxy"); -var When_using_global_in_a_module_global_should_be_defined = function() { - Log("TEST: When_using_global_in_a_module_global_should_be_defined"); + var view = android.view.View; + var s = view.toString(); + + expect(s.length).toBeGreaterThan(0); + }); - var module = require("../modules/module"); - module.accessGlobalObject(); -} + it("When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class", function () { + + __log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); + + var MyButton = com.tns.tests.Button1.extend("MyButton1615", { + toString : function() { + return "button1" + }}); + + + var button = new MyButton(); + var clazz1 = button.getClass(); + var name1 = clazz1.getName(); + expect(name1.indexOf("MyButton1615")).not.toEqual(-1); -var When_using_package_json_should_load_module = function() { - Log("TEST: When_using_package_json_should_load_module"); + var clazz2 = MyButton.class; + var name2 = clazz2.getName(); + expect(name2.indexOf("MyButton1615")).not.toEqual(-1); + }); - var module2 = require("../module2"); - var value456 = module2.value456; + it("When_using_global_in_a_module_global_should_be_defined", function () { + + __log("TEST: When_using_global_in_a_module_global_should_be_defined"); + + var module = require("../modules/module"); + var canAccessGlobalObject = module.accessGlobalObject(); + expect(canAccessGlobalObject).toBe(true); + }); - Assert(value456 === 456, "FAILED: When_using_package_json_should_load_module"); -} - -var When_require_bcl_module_it_should_be_loaded = function() { - Log("TEST: When_require_bcl_module_it_should_be_loaded"); + it("When_using_package_json_should_load_module", function () { + + __log("TEST: When_using_package_json_should_load_module"); + + var module2 = require("../module2"); + var value456 = module2.value456; + + expect(value456).toBe(456); + }); - var module = require("bclmodule"); - module.getModuleName(); -} - -var When_require_a_module_it_should_be_loaded = function() { - Log("TEST: When_require_a_module_it_should_be_loaded"); + it("When_require_bcl_module_it_should_be_loaded", function () { + + __log("TEST: When_require_bcl_module_it_should_be_loaded"); + + var module = require("bclmodule"); + var moduleName = module.getModuleName(); + var expectedModuleName = "bclModule"; + expect(moduleName).toBe(expectedModuleName); + }); - var module = require("./testModules/testmodule"); - var moduleName = module.getModuleName(); + it("When_require_a_module_it_should_be_loaded", function () { + + __log("TEST: When_require_a_module_it_should_be_loaded"); + + var module = require("./testModules/testmodule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("testModule"); + }); - Assert(moduleName == "testModule", "FAILED: When_require_a_module_it_should_be_loaded"); -} - - -var When_require_a_bcl_module_in_a_dir_it_should_be_loaded = function() { - Log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); + it("When_require_a_bcl_module_in_a_dir_it_should_be_loaded", function () { + + __log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); + + var module = require("tests/testModules/testBclModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("testBclModule"); + }); - var module = require("tests/testModules/testBclModule"); - var moduleName = module.getModuleName(); + it("When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it", function () { + + __log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + + var module = require("./testModules/someDirModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("index.js"); + }); - Assert(moduleName == "testBclModule", "FAILED: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); -} - -var When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - Log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + it("When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it", function () { + + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + + var module = require("tests/testModules/someBclDirModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("bclindex.js"); + }); - var module = require("./testModules/someDirModule"); - var moduleName = module.getModuleName(); - - Assert(moduleName == "index.js", "FAILED: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); -} - -var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - Log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); - - var module = require("tests/testModules/someBclDirModule"); - var moduleName = module.getModuleName(); - - Assert(moduleName == "bclindex.js", "FAILED: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); -} - -var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it = function() { - Log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); - - var module = require("tests/testModules/someModule"); - var value123 = module.value123; - - Assert(value123 === 123, "FAILED: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); -} - -When_extending_a_class_two_times(); -When_extending_a_class_two_times_with_no_extend_names(); -When_implementing_an_interface_with_new_the_overrides_should_work(); - -//LOG("ALL PASSED"); -//fail(); - -When_extending_a_class_two_times_without_second_implementation_object(); -When_extending_a_class_and_calling_super_toString(); -When_accessing_a_static_field_on_a_javascript_instance_it_should_work(); -When_accessing_static_members_on_an_extended_class(); - -When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method(); -When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method(); -When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2() - - - -When_extending_a_class_and_calling_super_method_it_should_work(); - -//@@@ -//When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly(); -//When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly(); - -//When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed(); //TODO: Enable when supporting isStatic in MethodResolver -When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method(); -When_calling_toString_on_an_java_object_it_should_call_the_java_method(); -When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_calling_instanceof_it_should_work(); -When_calling_instanceof_on_method_argument_it_should_work(); -When_calling_instanceof_on_method_result_it_should_work(); -When_calling_instanceof_on_field_result_it_should_work(); -When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class(); -When_using_global_in_a_module_global_should_be_defined(); -When_using_package_json_should_load_module(); -When_require_bcl_module_it_should_be_loaded(); -When_require_a_module_it_should_be_loaded(); -When_require_a_bcl_module_in_a_dir_it_should_be_loaded(); -When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it(); -When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it(); -When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it(); -When_calling_instanceof_on_interface_it_should_work(); - -TestRequireDirName(); -TestRequireFileName(); -TestGarbageCollection(); -TestWorkingWithJavaArrayDoesNotMakeMemoryLeak(); -TestConstructorOverride(); -TestConstructorOverrideOnTypeWithInitMethod(); -TestRequire(); -TestArrays(); -TestArrayLengthPropertyIsNumber(); -TestCreationOfLocationListener(); -TestInnerClassCreation(); -TestNestedClassCreation(); -TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata(); -TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata(); -TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata(); -TestAccessArrayElementAsObjectWithoutMetadata(); -TestCallMethodThatReturnsNull(); -TestCallMethodThatReturnsNullString(); -TestAccessNullField(); -TestAccessNullArrayElement(); -TestCallMethodWithIntVarArg(); -TestCallMethodWithCharVarArg(); -TestCallMethodWithObjectVarArg(); -TestCanInheritFromClassInAndroidSupportLibrary(); -TestCallMethodWithByteParameter(); -TestCanCallStaticMethodThroughBaseClass(); -TestUseFieldThatIsArray(); -TestCanAssignArrayToField(); -TestCallMethodThatReturnsLong(); -TestCallMethodWithLongParameter(); -TestCallMethodWithLongCastArgument(); -TestCallToStringOfNativeScriptLongObject(); -TestCallMethodWithMinAndMaxLongValues(); -TestCallMethodWithLongParameterWithNumberObject(); -TestCallMethodWithByteParameter(); -TestCallMethodWithFloatParameter(); -TestCallMethodWithShortParameter(); -TestCallMethodWithBooleanParameter(); -TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod(); -TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor(); -TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive(); -TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected(); -TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted(); -TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten(); -// ART does not allow partiallly implemented interfaces (as expected) -//TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed(); -TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass(); -TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected(); -TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected(); -TestCallProctedMethodDefinedAsAbstractAndThenOverwritten(); -TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString(); -TestObjectReturnValueIsTreatedAsStringWhenItIsString(); -TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava(); -TestCanCallMethodThatReturnsArrayOfInterfaces(); -TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes(); -TestCanCallToStringOnClassProxy(); \ No newline at end of file + it("When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it", function () { + + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); + + var module = require("tests/testModules/someModule"); + var value123 = module.value123; + + expect(value123).toBe(123); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js index 96da9d8f1..d0c1a3308 100644 --- a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js +++ b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js @@ -1,50 +1,51 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_generating_a_proxy_of_nested_interface_at_runtime = function() { - Log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton10", { - toString : function() { - return "button1"; - }, - }); +describe("Tests for runtime binding generator", function () { - var button = new MyButton(); + var myCustomEquality = function(first, second) { + return first == second; + }; - var called = false; - button.setOnClickListener(new android.view.View.OnClickListener("ClickListener19", { - onClick: function() { - called = true; - } - })); - - - - button.click(null); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - Assert(called === true, "FAILED: When_generating_a_proxy_of_nested_interface_at_runtime."); -} + it("When_generating_a_proxy_of_nested_interface_at_runtime", function () { - -var When_generating_a_proxy_of_android_class_at_runtime = function() { - Log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton36", { - toString : function() { - return "button1"; - }, + __log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); + + var MyButton = com.tns.tests.Button1.extend("MyButton10", { + toString : function() { + return "button1"; + }, + }); + + var button = new MyButton(); + + var called = false; + button.setOnClickListener(new android.view.View.OnClickListener("ClickListener19", { + onClick: function() { + called = true; + } + })); + + button.click(null); + + expect(called).toBe(true); }); - var button1 = new MyButton(); - var dummyObject = button1.DummyClassAsObjectField; - - var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; - Assert(isInstanceOf == true, "FAILED: When_generating_a_proxy_of_android_class_at_runtime."); -} - -When_generating_a_proxy_of_nested_interface_at_runtime(); -When_generating_a_proxy_of_android_class_at_runtime(); \ No newline at end of file + it("When_generating_a_proxy_of_android_class_at_runtime", function () { + + __log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); + + var MyButton = com.tns.tests.Button1.extend("MyButton36", { + toString : function() { + return "button1"; + }, + }); + + var button1 = new MyButton(); + var dummyObject = button1.DummyClassAsObjectField; + + var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; + expect(isInstanceOf).toEqual(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsForTypescript.js b/test-app/assets/app/tests/testsForTypescript.js index 650a8210f..93298f03c 100644 --- a/test-app/assets/app/tests/testsForTypescript.js +++ b/test-app/assets/app/tests/testsForTypescript.js @@ -1,543 +1,539 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -}; - - -(function When_creating_a_typescript_instance_with_constructor_property_it_should_support_this() { - - Log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); - var NativeViewGroup = (function (_super) { - __extends(NativeViewGroup, _super); - function NativeViewGroup(view) { - this._view = view; - return __native(this); - } - - NativeViewGroup.prototype.Then = function () { - this._view.Do(); - }; - - return NativeViewGroup; - })(android.view.ViewGroup); +describe("Tests typescript", function () { - var doCalled = false; - - var myView = new NativeViewGroup({ Do: function() { doCalled = true; }}); - myView.Then(); - Assert(doCalled == true, "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. Method 'Do' not called"); - - var MyButton = (function (_super) { - __extends(MyButton, _super); - function MyButton() { - _super.call(this); - this.myName = "MyName"; - return __native(this); - } - - MyButton.prototype.echo = function (s) { - return "echo: " + this.myName; - }; - - MyButton.prototype.toString = function (s) { - return "toString: " + this.myName; - }; - - return MyButton; - })(com.tns.tests.Button1); - - var b = new MyButton(); - var exo = b.triggerEcho("exo"); - Assert(exo === "echo: MyName", "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. Exo not wroking"); - - var toStringResult = b.toString(); - Assert(toStringResult === "toString: MyName", "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. toString not wroking"); -})(); - - -(function When_creating_a_typescript_instance_it_should_support_overriden_members() { + var myCustomEquality = function(first, second) { + return first == second; + }; - Log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var initCalled = false; - var MyButton1 = (function (_super) { - __extends(MyButton1, _super); - function MyButton1() { - _super.call(this); - return __native(this); - } - - MyButton1.prototype.init = function () { - initCalled = true; - }; - - MyButton1.prototype.toString = function (s) { - return "toString called" - }; - - return MyButton1; - })(com.tns.tests.Button1); + it("When_creating_a_typescript_instance_with_constructor_property_it_should_support_this", function () { - var button = new MyButton1(); - Assert(initCalled == true, "FAILED: When_creating_a_typescript_instance_it_should_support_overriden_members. Init not called"); - - var value = button.toString(); - Assert(value == "toString called", "FAILED: When_creating_a_typescript_instance_it_should_support_overriden_members. toString not called. Actual: " + value); -})(); - + __log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); + var NativeViewGroup = (function (_super) { + __extends(NativeViewGroup, _super); + function NativeViewGroup(view) { + this._view = view; + return __native(this); + } + + NativeViewGroup.prototype.Then = function () { + this._view.Do(); + }; + + return NativeViewGroup; + })(android.view.ViewGroup); + + var doCalled = false; -(function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members() { - - Log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); - - - var MyButton2 = (function (_super) { - __extends(MyButton2, _super); - function MyButton2() { + var myView = new NativeViewGroup({ Do: function() { doCalled = true; }}); + myView.Then(); + expect(doCalled).toEqual(true); + + var MyButton = (function (_super) { + __extends(MyButton, _super); + function MyButton() { _super.call(this); + this.myName = "MyName"; return __native(this); } - MyButton2.prototype.superToString = function () { - return _super.prototype.toString.call(this); + MyButton.prototype.echo = function (s) { + return "echo: " + this.myName; }; - MyButton2.prototype.toString = function (s) { - return this.super.toString(); + MyButton.prototype.toString = function (s) { + return "toString: " + this.myName; }; - return MyButton2; + return MyButton; })(com.tns.tests.Button1); - - var button = new MyButton2(); - var button1Label = button.superToString(); - Assert(button1Label.indexOf("com.tns.tests.Button1-") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members. Actual: " + button1Label); - Assert(button1Label.indexOf("-MyButton2") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members. Expected to contain MyButton2. Actual: " + button1Label); -})(); - - -(function When_creating_a_pure_typescript_inheritance_chain_it_should_work() { - - Log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); - - var Animal = (function () { - function Animal(name) { - this.name = name; - } - Animal.prototype.move = function (meters) { - Log(this.name + " moved " + meters + "m."); - }; - return Animal; - })(); - - var Snake = (function (_super) { - __extends(Snake, _super); - function Snake(name) { - _super.call(this, name); - } - Snake.prototype.move = function () { - Log("Slithering..."); - _super.prototype.move.call(this, 5); - }; - return Snake; - })(Animal); - - var Horse = (function (_super) { - __extends(Horse, _super); - function Horse(name) { - _super.call(this, name); - } - Horse.prototype.move = function () { - Log("Galloping..."); - _super.prototype.move.call(this, 45); - }; - return Horse; - })(Animal); - - var horse = new Horse(); - var isInstanceOf = horse instanceof Horse; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - isInstanceOf = horse instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - var snake = new Snake(); - isInstanceOf = snake instanceof Snake; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - isInstanceOf = snake instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - var animal = new Animal(); - isInstanceOf = animal instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); -})(); - -(function When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance() { - - Log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); - - var MyButton3 = (function (_super) { - __extends(MyButton3, _super); - function MyButton3() { - _super.call(this); - return __native(this); - } - - MyButton3.prototype.toString = function (s) { - return this.super.toString(); - }; - - return MyButton3; - })(com.tns.tests.Button1); - - var button = new MyButton3(); - - var isInstanceOf = button instanceof MyButton3; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance. Should be instance of MyButton3"); - - isInstanceOf = button instanceof com.tns.tests.Button1; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance.Should be instance of com.tns.tests.Button1"); -})(); - -(function When_creating_a_typescript_instance_with_arguments_it_should_be_a_valid_nativescript_instance() { - - Log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); - - var MyButtonWithArgs = (function (_super) { - __extends(MyButtonWithArgs, _super); - function MyButtonWithArgs(value) { - _super.call(this, value); - return __native(this); - } + var b = new MyButton(); + var exo = b.triggerEcho("exo"); + expect(exo).toBe("echo: MyName"); - MyButtonWithArgs.prototype.init = function () { - }; - - MyButtonWithArgs.prototype.onClick = function () { - Log("MyButton onClick called"); - }; - - MyButtonWithArgs.prototype.superToString = function () { - return _super.prototype.toString.call(this); - }; - - return MyButtonWithArgs; - })(com.tns.tests.Button1); - - var button = new MyButtonWithArgs(5); - - var isInstanceOf = button instanceof MyButtonWithArgs; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance. Should be instance of MyButtonWithArgs"); - - isInstanceOf = button instanceof com.tns.tests.Button1; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance.Should be instance of com.tns.tests.Button1"); -})(); - - -(function When_creating_a_typescript_instance_it_should_support_member_access() { + var toStringResult = b.toString(); + expect(toStringResult).toBe("toString: MyName"); + }); - Log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); - - var MyButton4 = (function (_super) { - __extends(MyButton4, _super); - function MyButton4() { + it("When_creating_a_typescript_instance_it_should_support_overriden_members", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); + + var initCalled = false; + var MyButton1 = (function (_super) { + __extends(MyButton1, _super); + function MyButton1() { _super.call(this); - this.my1 = "MyName"; return __native(this); } - MyButton4.prototype.init = function () { + MyButton1.prototype.init = function () { + initCalled = true; }; - MyButton4.prototype.echo = function (s) { - return "echo: " + this.my1; + MyButton1.prototype.toString = function (s) { + return "toString called" }; - return MyButton4; + return MyButton1; })(com.tns.tests.Button1); + + var button = new MyButton1(); + expect(initCalled).toEqual(true); + + var value = button.toString(); + expect(value).toEqual("toString called"); + }); - var button = new MyButton4(); - var prop = button.getIMAGE_ID_PROP(); - Assert(prop == "image id prop", "FAILED: When_creating_a_typescript_instance_it_should_support_member_access."); + it("When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); + + var MyButton2 = (function (_super) { + __extends(MyButton2, _super); + function MyButton2() { + _super.call(this); + return __native(this); + } + + MyButton2.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + MyButton2.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton2; + })(com.tns.tests.Button1); + + var button = new MyButton2(); + var button1Label = button.superToString(); + + expect(button1Label.indexOf("com.tns.tests.Button1_")).not.toEqual(-1); + expect(button1Label.indexOf("_MyButton2")).not.toEqual(-1); + }); - var button1 = new MyButton4(); - var prop1 = button1.getIMAGE_ID_PROP(); - Assert(prop1 == "image id prop", "FAILED: When_creating_a_typescript_instance_it_should_support_member_access."); -})(); - - - -(function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype() { + it("When_creating_a_pure_typescript_inheritance_chain_it_should_work", function () { + + __log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); + + var Animal = (function () { + function Animal(name) { + this.name = name; + } + Animal.prototype.move = function (meters) { + __log(this.name + " moved " + meters + "m."); + }; + return Animal; + })(); + + var Snake = (function (_super) { + __extends(Snake, _super); + function Snake(name) { + _super.call(this, name); + } + Snake.prototype.move = function () { + __log("Slithering..."); + _super.prototype.move.call(this, 5); + }; + return Snake; + })(Animal); + + var Horse = (function (_super) { + __extends(Horse, _super); + function Horse(name) { + _super.call(this, name); + } + Horse.prototype.move = function () { + __log("Galloping..."); + _super.prototype.move.call(this, 45); + }; + return Horse; + })(Animal); + + var horse = new Horse(); + var isInstanceOf = horse instanceof Horse; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = horse instanceof Animal; + expect(isInstanceOf).toEqual(true); + + var snake = new Snake(); + isInstanceOf = snake instanceof Snake; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = snake instanceof Animal; + expect(isInstanceOf).toEqual(true); + + var animal = new Animal(); + isInstanceOf = animal instanceof Animal; + expect(isInstanceOf).toEqual(true); + }); - Log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); + it("When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + + var MyButton3 = (function (_super) { + __extends(MyButton3, _super); + function MyButton3() { + _super.call(this); + return __native(this); + } + + MyButton3.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton3; + })(com.tns.tests.Button1); + + var button = new MyButton3(); + + var isInstanceOf = button instanceof MyButton3; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = button instanceof com.tns.tests.Button1; + expect(isInstanceOf).toEqual(true); + }); - var MyButton5 = (function (_super) { - __extends(MyButton5, _super); - function MyButton5() { - _super.call(this); - this.my1 = "MyName"; - return __native(this); - } - - MyButton5.prototype.init = function () { - }; - - MyButton5.prototype.toString = function (s) { - return this.super.toString(); - }; - - return MyButton5; - })(com.tns.tests.Button1); - - var button = new MyButton5(); - var button1Label = button.toString(); - Assert(button1Label.indexOf("com.tns.tests.Button1-") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); - Assert(button1Label.indexOf("-MyButton5") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype. Expected to conatin MyButton5"); -})(); + it("When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + + var MyButtonWithArgs = (function (_super) { + __extends(MyButtonWithArgs, _super); + function MyButtonWithArgs(value) { + _super.call(this, value); + return __native(this); + } + + MyButtonWithArgs.prototype.init = function () { + }; -(function When_extending_an_already_extended_object_it_should_throw_an_error() { - - Log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); + MyButtonWithArgs.prototype.onClick = function () { + __log("MyButton onClick called"); + }; + + MyButtonWithArgs.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + return MyButtonWithArgs; + })(com.tns.tests.Button1); + + var button = new MyButtonWithArgs(5); + + var isInstanceOf = button instanceof MyButtonWithArgs; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = button instanceof com.tns.tests.Button1; + expect(isInstanceOf).toEqual(true); + }); - var errorThrown = false; - try { + it("When_creating_a_typescript_instance_it_should_support_member_access", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); - var MyButton6 = (function (_super) { - __extends(MyButton6, _super); - function MyButton6() { + var MyButton4 = (function (_super) { + __extends(MyButton4, _super); + function MyButton4() { _super.call(this); this.my1 = "MyName"; return __native(this); } - MyButton6.prototype.init = function () { + MyButton4.prototype.init = function () { }; - MyButton6.prototype.toString = function (s) { - return this.super.toString(); + MyButton4.prototype.echo = function (s) { + return "echo: " + this.my1; }; - return MyButton6; + return MyButton4; })(com.tns.tests.Button1); - - var SecondButton = (function (_super) { - __extends(SecondButton, _super); - - function SecondButton() { - _super.apply(this, arguments); - } - - return SecondButton; - })(MyButton6); - } catch (err) { - errorThrown = true; - } + + var button = new MyButton4(); + var prop = button.getIMAGE_ID_PROP(); + expect(prop).toEqual("image id prop"); + + var button1 = new MyButton4(); + var prop1 = button1.getIMAGE_ID_PROP(); + expect(prop1).toEqual("image id prop"); + }); - Assert(errorThrown == true, "FAILED: When_extending_an_already_extended_object_it_should_throw_an_error."); -})(); - + it("When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); + + var MyButton5 = (function (_super) { + __extends(MyButton5, _super); + function MyButton5() { + _super.call(this); + this.my1 = "MyName"; + return __native(this); + } + + MyButton5.prototype.init = function () { + }; -(function When_accessing_a_static_field_on_a_typescript_instance_it_should_work() { + MyButton5.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton5; + })(com.tns.tests.Button1); + + var button = new MyButton5(); + var button1Label = button.toString(); + expect(button1Label.indexOf("com.tns.tests.Button1_")).not.toEqual(-1); + expect(button1Label.indexOf("_MyButton5")).not.toEqual(-1); + }); - Log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); + it("When_extending_an_already_extended_object_it_should_throw_an_error", function () { + + __log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); + + var errorThrown = false; + try { + + var MyButton6 = (function (_super) { + __extends(MyButton6, _super); + function MyButton6() { + _super.call(this); + this.my1 = "MyName"; + return __native(this); + } + + MyButton6.prototype.init = function () { + }; + + MyButton6.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton6; + })(com.tns.tests.Button1); + + var SecondButton = (function (_super) { + __extends(SecondButton, _super); + + function SecondButton() { + _super.apply(this, arguments); + } + + return SecondButton; + })(MyButton6); + } catch (err) { + errorThrown = true; + } + + expect(errorThrown).toEqual(true); + }); - var MyButton7 = (function (_super) { - __extends(MyButton7, _super); - function MyButton7() { - _super.call(this); - this.my1 = "MyName"; - } - - MyButton7.prototype.init = function () { - }; + it("When_accessing_a_static_field_on_a_typescript_instance_it_should_work", function () { + + __log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); + + var MyButton7 = (function (_super) { + __extends(MyButton7, _super); + function MyButton7() { + _super.call(this); + this.my1 = "MyName"; + } + + MyButton7.prototype.init = function () { + }; - MyButton7.prototype.toString = function (s) { - return "my"; - }; - - return MyButton7; - })(com.tns.tests.Button1); - - var valueUsingChild = MyButton7.STATIC_IMAGE_ID; - Assert(valueUsingChild == "static image id", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. MyButton7.STATIC_IMAGE_ID should be 5"); - - MyButton7.STATIC_IMAGE_ID = "test"; - valueUsingChild = MyButton7.STATIC_IMAGE_ID; - Assert(valueUsingChild == "test", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. MyButton7.STATIC_IMAGE_ID should be 5"); + MyButton7.prototype.toString = function (s) { + return "my"; + }; + + return MyButton7; + })(com.tns.tests.Button1); + + var valueUsingChild = MyButton7.STATIC_IMAGE_ID; + expect(valueUsingChild).toEqual("static image id"); + + MyButton7.STATIC_IMAGE_ID = "test"; + valueUsingChild = MyButton7.STATIC_IMAGE_ID; + expect(valueUsingChild).toEqual("test"); + + var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; + expect(valueUsingParent).toEqual("static image id"); + }); - var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; - Assert(valueUsingParent == "static image id", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. com.tns.tests.Button1.STATIC_IMAGE_ID should be 5"); -})(); + it("When_calling_a_static_method_on_a_typescript_instance_it_should_work", function () { + + __log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); -(function When_calling_a_static_method_on_a_typescript_instance_it_should_work() { - - Log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); + + var MyButton8 = (function (_super) { + __extends(MyButton8, _super); + function MyButton8() { + _super.call(this); + this.my1 = "MyName"; + } + + MyButton8.prototype.init = function () { + }; + MyButton8.prototype.onClick = function () { + __log("MyButton onClick called"); + }; + + MyButton8.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + MyButton8.prototype.echo = function (s) { + return "echo: " + this.my1; + }; + + return MyButton8; + })(com.tns.tests.Button1); + + MyButton8.setMyStaticIntField(5); + var valueUsingChild = MyButton8.getMyStaticIntField(); + expect(valueUsingChild).toEqual(5); + + var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); + expect(valueUsingParent).toEqual(5); + + com.tns.tests.Button1.setMyStaticIntField(6); + var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); + expect(valueUsingParent).toEqual(6); + + valueUsingChild = MyButton8.getMyStaticIntField(); + expect(valueUsingChild).toEqual(6); + }); + + it("When_inherit_from_android_base_class_it_should_create_an_instance", function () { + + /* + // From issue #137 https://github.com/telerik/Kimera/issues/137 + class ListViewAdapter extends android.widget.BaseAdapter { + private _items: Array; + + constructor(items: Array) { + super(); + + this._items = items; + } + + get items(): Array { + return this._items; + } + set items(value: Array) { + this._items = value; + } + + public getCount() { + return this._items ? this._items.length : 0; + } + + public getItem(i) { + return this._items && i < this._items.length ? this._items[i] : null; + } + + public getItemId(i) { + return long(0); + } + + public getView(i, view, viewGroup) { + return null; + } + + public refresh() { + this.notifyDataSetChanged(); + } + } + */ + var ListViewAdapter = (function (_super) { + __extends(ListViewAdapter, _super); + function ListViewAdapter(items) { + _super.call(this); + + this._items = items; + return __native(this); + } + Object.defineProperty(ListViewAdapter.prototype, "items", { + get: function () { + return this._items; + }, + set: function (value) { + this._items = value; + }, + enumerable: true, + configurable: true + }); + + ListViewAdapter.prototype.getCount = function () { + return this._items ? this._items.length : 0; + }; + + ListViewAdapter.prototype.getItem = function (i) { + return this._items && i < this._items.length ? this._items[i] : null; + }; + + ListViewAdapter.prototype.getItemId = function (i) { + return long(0); + }; + + ListViewAdapter.prototype.getView = function (i, view, viewGroup) { + return null; + }; + + ListViewAdapter.prototype.refresh = function () { + this.notifyDataSetChanged(); + }; + return ListViewAdapter; + })(android.widget.BaseAdapter); + + var adapter = new ListViewAdapter(); + + expect(adapter).not.toEqual(null); + }); - var MyButton8 = (function (_super) { - __extends(MyButton8, _super); - function MyButton8() { + it("When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work", function () { + + __log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); + + var MyButton9 = (function (_super) { + __extends(MyButton9, _super); + + function MyButton9() { _super.call(this); - this.my1 = "MyName"; + + var that = __native(this); + + that.setOnClickListener(new android.view.View.OnClickListener({ + onClick : function() { + that.buttonClicked = true; + } + })); + + return that; } - - MyButton8.prototype.init = function () { - }; - MyButton8.prototype.onClick = function () { - Log("MyButton onClick called"); - }; - - MyButton8.prototype.superToString = function () { - return _super.prototype.toString.call(this); - }; - - MyButton8.prototype.echo = function (s) { - return "echo: " + this.my1; - }; - - return MyButton8; + return MyButton9; })(com.tns.tests.Button1); - - MyButton8.setMyStaticIntField(5); - var valueUsingChild = MyButton8.getMyStaticIntField(); - Assert(valueUsingChild == 5, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - - var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); - Assert(valueUsingParent == 5, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - - com.tns.tests.Button1.setMyStaticIntField(6); - var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); - Assert(valueUsingParent == 6, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - valueUsingChild = MyButton8.getMyStaticIntField(); - Assert(valueUsingChild == 6, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); -})(); - -(function When_inherit_from_android_base_class_it_should_create_an_instance() { - /* - // From issue #137 https://github.com/telerik/Kimera/issues/137 - class ListViewAdapter extends android.widget.BaseAdapter { - private _items: Array; - - constructor(items: Array) { - super(); - - this._items = items; - } - - get items(): Array { - return this._items; - } - set items(value: Array) { - this._items = value; - } - - public getCount() { - return this._items ? this._items.length : 0; - } - - public getItem(i) { - return this._items && i < this._items.length ? this._items[i] : null; - } - - public getItemId(i) { - return long(0); - } - - public getView(i, view, viewGroup) { - return null; - } - - public refresh() { - this.notifyDataSetChanged(); - } - } - */ - var ListViewAdapter = (function (_super) { - __extends(ListViewAdapter, _super); - function ListViewAdapter(items) { - _super.call(this); - - this._items = items; - return __native(this); - } - Object.defineProperty(ListViewAdapter.prototype, "items", { - get: function () { - return this._items; - }, - set: function (value) { - this._items = value; - }, - enumerable: true, - configurable: true - }); - - ListViewAdapter.prototype.getCount = function () { - return this._items ? this._items.length : 0; - }; - - ListViewAdapter.prototype.getItem = function (i) { - return this._items && i < this._items.length ? this._items[i] : null; - }; - - ListViewAdapter.prototype.getItemId = function (i) { - return long(0); - }; - - ListViewAdapter.prototype.getView = function (i, view, viewGroup) { - return null; - }; - - ListViewAdapter.prototype.refresh = function () { - this.notifyDataSetChanged(); - }; - return ListViewAdapter; - })(android.widget.BaseAdapter); - - var adapter = new ListViewAdapter(); - - Assert(adapter != null, "FAILED: When_inherit_from_android_base_class_it_should_create_an_instance."); - -})(); - -(function When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work() { - - Log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); - - var MyButton9 = (function (_super) { - __extends(MyButton9, _super); - - function MyButton9() { - _super.call(this); - - var that = __native(this); - - that.setOnClickListener(new android.view.View.OnClickListener({ - onClick : function() { - that.buttonClicked = true; - } - })); - - return that; - } - - return MyButton9; - })(com.tns.tests.Button1); - - var button = new MyButton9(); - var button1 = new MyButton9(); - button.click(null); - - Assert(button.buttonClicked === true, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - Assert(button1.buttonClicked === undefined, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - - button.buttonClicked = false; - button1.click(null); - - Assert(button.buttonClicked === false, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - Assert(button1.buttonClicked === true, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); -})(); \ No newline at end of file + var button = new MyButton9(); + var button1 = new MyButton9(); + button.click(null); + + expect(button.buttonClicked).toBe(true); + expect(button1.buttonClicked).toBe(undefined); + + button.buttonClicked = false; + button1.click(null); + + expect(button.buttonClicked).toBe(false); + expect(button1.buttonClicked).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsMemoryManagement.js b/test-app/assets/app/tests/testsMemoryManagement.js index 14959c45e..e4fcbdcb4 100644 --- a/test-app/assets/app/tests/testsMemoryManagement.js +++ b/test-app/assets/app/tests/testsMemoryManagement.js @@ -1,23 +1,41 @@ -function TestSecondaryCallbackInvokationWithObjectParamsShouldWork() -{ - var u = new com.tns.tests.UseCallbackTest(123); +describe("Tests for memmory managment", function () { - u.setDataCallback(new com.tns.tests.UseCallbackTest.DataCallback("DataCallback_5", { - onData: function(data, delay) { - android.util.Log.i("TNS.TESTS", "data=" + data.getData()); - } - })); + var myCustomEquality = function(first, second) { + return first == second; + }; - u.setCleanCallback(new com.tns.tests.UseCallbackTest.CleanCallback("CleanCallback11", { - onClean: function(delay) { - gc(); - java.lang.System.gc(); - } - })); - - u.enqueDataCallback(0); - u.enqueDataCallback(10 * 1000); - u.enqueCleanCallback(0); -} + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestSecondaryCallbackInvokationWithObjectParamsShouldWork", function () { + + var u = new com.tns.tests.UseCallbackTest(123); + + u.setDataCallback(new com.tns.tests.UseCallbackTest.DataCallback("DataCallback_5", { + onData: function(data, delay) { + if("inner spec: ", function () { + android.util.Log.i("TNS.TESTS", "data=" + data.getData()); + expect(data).not.toEqual(undefined); + expect(delay).not.toEqual(undefined); + }); + } + })); + + u.setCleanCallback(new com.tns.tests.UseCallbackTest.CleanCallback("CleanCallback11", { + onClean: function(delay) { + if("inner spec: ", function () { + expect(delay).not.toEqual(undefined); + gc(); + java.lang.System.gc(); + }); + } + })); -TestSecondaryCallbackInvokationWithObjectParamsShouldWork(); + u.enqueDataCallback(0); + u.enqueDataCallback(10 * 1000); + u.enqueCleanCallback(0); + expect(true).toBe(true); + expect(true).toEqual(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsWithContext.js b/test-app/assets/app/tests/testsWithContext.js index 13a1529cd..f99055ad4 100644 --- a/test-app/assets/app/tests/testsWithContext.js +++ b/test-app/assets/app/tests/testsWithContext.js @@ -1,113 +1,111 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestConstructorOverrideForBuiltinType = function(context) { - - Log("TEST: TestConstructorOverrideForBuiltinType"); - - var ctorCalled = false; - var isConstructor = false; - - var MyButton = new android.widget.Button.extend({ - init : function() { - ctorCalled = true; - isConstructor = arguments[arguments.length - 1]; - } - }); - - var btn = new MyButton(context); - - Assert(ctorCalled == true, "TestConstructorOverrideForBuiltinType FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverrideForBuiltinType FAILED: isConstructor should be 'true'"); -} +exports.run = function(cntxt) +{ + describe("Tests with context ", function () { + + var context = cntxt; + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestConstructorOverrideForBuiltinType", function () { + + __log("TEST: TestConstructorOverrideForBuiltinType"); + + var ctorCalled = false; + var isConstructor = false; -var TestConstructorOverrideForBuiltinTypeWithInitMethod = function(context) { + var MyButton = android.widget.Button.extend({ + init : function() { + ctorCalled = true; + isConstructor = arguments[arguments.length - 1]; + } + }); + + var btn = new MyButton(context); + + expect(ctorCalled).toEqual(true); + expect(isConstructor).toEqual(true); + }); + + it("TestConstructorOverrideForBuiltinTypeWithInitMethod", function () { + + __log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); + + var initInvocationCount = 0; - Log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); - - var initInvocationCount = 0; + var MyDatePicker = android.widget.DatePicker.extend({ + init: function() { + ++initInvocationCount; + } + }); + + var datePicker = new MyDatePicker(context); + + __log("datePicker=" + datePicker); + + var count1 = initInvocationCount; + + expect(count1).toBeGreaterThan(0); + + datePicker.init(2014, 3, 25, null); + + var count2 = initInvocationCount; + + expect(count2).toBeGreaterThan(count1); + }); + + it("TestBuiltinNestedClassCreation", function () { + + __log("TEST: TestBuiltinNestedClassCreation"); + + var loader = new android.content.Loader(context); + + var observer = new loader.ForceLoadContentObserver(); + + expect(observer).not.toEqual(null); + }); + + it("TestPublicWindowManagerImplWithoutMetadata", function () { + + __log("TEST: TestPublicWindowManagerImplWithoutMetadata"); + + var windowManagerImpl = context.getSystemService(android.content.Context.WINDOW_SERVICE); + + var display = windowManagerImpl.getDefaultDisplay(); + + //__log("display.isValid=" + display.isValid()); + + var displayInfo = display.toString(); + + expect(displayInfo.length).toBeGreaterThan(0); + }); + + it("TestUsingClassFromAndroidSupportLibrary", function () { + + __log("TEST: TestUsingClassFromAndroidSupportLibrary"); - var MyDatePicker = android.widget.DatePicker.extend({ - init: function() { - ++initInvocationCount; - } + var layout = new android.support.v4.widget.DrawerLayout(context); + + expect(layout).not.toEqual(null); + }); + + it("TestCanPassCharSequenceArray", function () { + + __log("TEST: TestCanPassCharSequenceArray"); + + var alert = new android.app.AlertDialog.Builder(context); + + var builder = alert.setItems(["One", "Two" ], new android.content.DialogInterface.OnClickListener({ + onClick: function (dialog, which) { + // + } + })); + + expect(builder).not.toEqual(null); + }); }); - - var datePicker = new MyDatePicker(context); - - Log("datePicker=" + datePicker); - - var count1 = initInvocationCount; - - Assert(count1 > 0, "TestConstructorOverrideForBuiltinTypeWithInitMethod FAILED: initInvocationCount should be > 0"); - - datePicker.init(2014, 3, 25, null); - - var count2 = initInvocationCount; - - Assert(count2 > count1, "TestConstructorOverrideForBuiltinTypeWithInitMethod FAILED: initInvocationCount should be increased"); -} - -var TestBuiltinNestedClassCreation = function(context) { - - Log("TEST: TestBuiltinNestedClassCreation"); - - var loader = new android.content.Loader(context); - - var observer = new loader.ForceLoadContentObserver(); - - Assert(observer != null, "TestBuiltinNestedClassCreation FAILED: Cannot instantiate android.content.Loader.ForceLoadContentObserver class"); -} - - -var TestPublicWindowManagerImplWithoutMetadata = function(context) { - - Log("TEST: TestPublicWindowManagerImplWithoutMetadata"); - - var windowManagerImpl = context.getSystemService(android.content.Context.WINDOW_SERVICE); - - var display = windowManagerImpl.getDefaultDisplay(); - - //Log("display.isValid=" + display.isValid()); - - var displayInfo = display.toString(); - - Assert(displayInfo.length > 0, "TestPublicWindowManagerImplWithoutMetadata FAILED: Cannot obtain display info string from WindowManagerImpl instance"); -} - -var TestUsingClassFromAndroidSupportLibrary = function(context) { - - Log("TEST: TestUsingClassFromAndroidSupportLibrary"); - - var layout = new android.support.v4.widget.DrawerLayout(context); - - Assert(layout != null, "TestUsingClassFromAndroidSupportLibrary FAILED: Cannot create an instance of class from Android Support Library"); -} - -var TestCanPassCharSequenceArray = function(context) { - - Log("TEST: TestCanPassCharSequenceArray"); - - var alert = new android.app.AlertDialog.Builder(context); - - var builder = alert.setItems(["One", "Two" ], new android.content.DialogInterface.OnClickListener({ - onClick: function (dialog, which) { - // - } - })); - - Assert(builder != null, "TestCanPassCharSequenceArray: builder should be != null"); -} - -exports.run = function(context) -{ - TestConstructorOverrideForBuiltinType(context); - TestConstructorOverrideForBuiltinTypeWithInitMethod(context); - TestBuiltinNestedClassCreation(context); - TestPublicWindowManagerImplWithoutMetadata(context); - TestUsingClassFromAndroidSupportLibrary(context); - TestCanPassCharSequenceArray(context); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/test-app/assets/internal/prepareExtend.js b/test-app/assets/internal/prepareExtend.js index 94ccff617..376bf9448 100644 --- a/test-app/assets/internal/prepareExtend.js +++ b/test-app/assets/internal/prepareExtend.js @@ -57,7 +57,7 @@ var __extends = function(Child, Parent) { } function extend(child, parent) { - Log("TS extend called"); + __log("TS extend called"); if (!child.__extended) { child.__extended = parent.extend(child.name, child.prototype); } @@ -66,7 +66,7 @@ var __extends = function(Child, Parent) { }; Parent.__activityExtend = function(parent, name, implementationObject) { - Log("__activityExtend called"); + __log("__activityExtend called"); return parent.extend(name, implementationObject); }; diff --git a/test-app/assets/metadata/treeNodeStream.dat b/test-app/assets/metadata/treeNodeStream.dat index 059d84270..c130531bc 100644 Binary files a/test-app/assets/metadata/treeNodeStream.dat and b/test-app/assets/metadata/treeNodeStream.dat differ diff --git a/test-app/assets/metadata/treeStringsStream.dat b/test-app/assets/metadata/treeStringsStream.dat index 9a9945a86..aa5bb0659 100644 Binary files a/test-app/assets/metadata/treeStringsStream.dat and b/test-app/assets/metadata/treeStringsStream.dat differ diff --git a/test-app/assets/metadata/treeValueStream.dat b/test-app/assets/metadata/treeValueStream.dat index d957083e8..0d4128e1c 100644 Binary files a/test-app/assets/metadata/treeValueStream.dat and b/test-app/assets/metadata/treeValueStream.dat differ diff --git a/test-app/custom_rules.xml b/test-app/custom_rules.xml new file mode 100644 index 000000000..47477411c --- /dev/null +++ b/test-app/custom_rules.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test-app/custom_sign.keystore b/test-app/custom_sign.keystore new file mode 100644 index 000000000..30c13d526 Binary files /dev/null and b/test-app/custom_sign.keystore differ diff --git a/test-app/gruntfile.js b/test-app/gruntfile.js new file mode 100644 index 000000000..09807eb45 --- /dev/null +++ b/test-app/gruntfile.js @@ -0,0 +1,93 @@ +//runs test app on device + +module.exports = function(grunt) { + + var pathModule = require("path"); + + var localCfg = { + rootDir: ".", + outDir: "./dist", + }; + + grunt.initConfig({ + wait: { + timeToRunTests: { + options: { + delay: 180000 + } + } + }, + clean: { + build: { + src: [localCfg.outDir] + }, + metadata: { + src: "./assets/metadata/*" + } + }, + mkdir: { + build: { + options: { + create: [localCfg.outDir] + } + } + }, + exec: { + createBuildXml: { + cmd: "android update project --path ." + }, + runAntRelease: { + cmd: "ant release" + }, + installApkOnDevice: { + cmd: "node ./tasks/deploy-apk.js ./bin/NativeScriptActivity-release.apk", + cwd: "." + }, + startInstalledApk: { + cmd: "adb shell am start -n com.tns.android_runtime_testapp/com.tns.NativeScriptActivity -a android.intent.action.MAIN -c android.intent.category.LAUNCHER", + cwd: "./bin" + }, + copyResultToDist: { + cmd: "adb pull /sdcard/android_unit_test_results.xml", + cwd: localCfg.outDir + } + }, + copy: { + //these .so files need to be in the src/libs folder because the test-app refers them + //later if we want to separate the tests from the build, these files can be taken from k:distributions ... stable/android-runtime/ ... + generatedLibraries: { + expand: true, + cwd: "../src/dist/libs/", + src: [ + "**/armeabi-v7a/*", + "**/x86/*" + ], + dest: "../src/libs/" + } + } + }); + + grunt.loadNpmTasks("grunt-contrib-clean"); + grunt.loadNpmTasks("grunt-contrib-copy"); + grunt.loadNpmTasks("grunt-mkdir"); + grunt.loadNpmTasks("grunt-exec"); + grunt.loadNpmTasks("grunt-replace"); + grunt.loadNpmTasks('grunt-wait'); + + grunt.registerTask("default", [ + "clean:build", + "mkdir:build", + "copy:generatedLibraries", + "exec:createBuildXml", + + //currently runAntRelease step includes an ant custom build step which generates latest greatest metadata + //currently we generate metadata using the target sdk declared in the AndroidManifest file and if the sdk is missing the build will fail + "exec:runAntRelease", + + "exec:installApkOnDevice", + "exec:startInstalledApk", + "wait:timeToRunTests", + "exec:copyResultToDist" + ]); + +} diff --git a/test-app/package.json b/test-app/package.json new file mode 100644 index 000000000..384fe6636 --- /dev/null +++ b/test-app/package.json @@ -0,0 +1,16 @@ +{ + "name": "tns-test-app", + "description": "NativeScript test app", + "files": [ + "**/*.*" + ], + "devDependencies": { + "grunt": "0.4.5", + "grunt-contrib-clean": "0.5.0", + "grunt-contrib-copy": "0.5.0", + "grunt-exec": "0.4.6", + "grunt-mkdir": "0.1.2", + "grunt-replace": "0.7.9", + "grunt-wait": "^0.1.0" + } +} diff --git a/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java b/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java deleted file mode 100644 index 9dba6dd6a..000000000 --- a/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.tns.com.tns.tests; - -public class AbsClassImpl extends com.tns.tests.AbsClassImpl implements com.tns.NativeScriptHashCodeProvider -{ - public AbsClassImpl() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - protected String echoString(String s) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__echoString) - { - Object[] params = new Object[1]; - params[0] = s; - return (String)com.tns.Platform.callJSMethod(this, "echoString", params); - } - else - { - return super.echoString(s); - } - } - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - - public void setNativeScriptOverrides(String[] overrides) - { - for (String name: overrides) - { - setNativeScriptOverride(name); - } - } - - private boolean __initialized; - private boolean __echoString; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("echoString")) - { - __echoString = true; - } - } -} \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/Button1.java b/test-app/src/com/tns/com/tns/tests/Button1.java deleted file mode 100644 index e42f6a588..000000000 --- a/test-app/src/com/tns/com/tns/tests/Button1.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.tns.com.tns.tests; - -import com.tns.Platform; - -import android.util.Log; - - -/* -public class Button1 extends com.tns.tests.Button1 implements com.tns.NativeScriptHashCodeProvider -{ - public Button1() - { - super(); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public Button1(int value) - { - super(value); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = new java.lang.Object[1]; - params[0] = value; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public String echo(String s) throws Throwable - { - if (__isEchoOverriden) - { - try - { - Object[] params = { s }; - return (java.lang.String) com.tns.Platform.callJSMethod(this, "echo", params); - } - catch (Throwable throwable) - { - Log.d(Platform.DEFAULT_LOG_TAG, "Button1.echo ex=" + throwable.getMessage()); - throw throwable; - } - } - else - { - return super.echo(s); - } - } - - public void methodDummyClassAsObjectInArgs(Object arg) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - com.tns.Platform.callJSMethod(this, "methodDummyClassAsObjectInArgs", arg); - } - - public String getIMAGE_ID_PROP() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__getIMAGE_ID_PROP) - { - Object[] params = null; - return (String)com.tns.Platform.callJSMethod(this, "getIMAGE_ID_PROP", params); - } - else - { - return super.getIMAGE_ID_PROP(); - } - } - - public java.lang.String toString() - { - if (__toString) - { - Log.w(Platform.DEFAULT_LOG_TAG, "Make sure Button1 you create in js has toString always overriden"); - return (java.lang.String) com.tns.Platform.callJSMethod(this, "toString", null); - } - else - { - return super.toString(); - } - } - - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - -public void setNativeScriptOverrides(String[] overrides) - { - for (String name: overrides) - { - setNativeScriptOverride(name); - } - } - - private boolean __initialized; - private boolean __ctorOverriden; - private boolean __getIMAGE_ID_PROP; - private boolean __toString; - private boolean __isEchoOverriden; - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - else if (name.equals("echoString")) - { - __getIMAGE_ID_PROP = true; - } - else if (name.equals("toString")) - { - __toString = true; - } - else if (name.equals("echo")) - { - __isEchoOverriden = true; - } - - } - -} -*/ \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/Class1.java b/test-app/src/com/tns/com/tns/tests/Class1.java deleted file mode 100644 index 3641b0e19..000000000 --- a/test-app/src/com/tns/com/tns/tests/Class1.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.tns.com.tns.tests; - -public class Class1 -{ - public static class Callback1 implements com.tns.tests.Class1.Callback1 - { - public Callback1() - { - } - - public String getMessage() - { - java.lang.Object[] params = null; - return (String)com.tns.Platform.callJSMethod(this, "getMessage", params); - } - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java b/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java deleted file mode 100644 index 800a7e63d..000000000 --- a/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.tns.com.tns.tests; - -public class DispatchAsyncOpOnUIThreadTest extends com.tns.tests.DispatchAsyncOpOnUIThreadTest implements com.tns.NativeScriptHashCodeProvider -{ - public DispatchAsyncOpOnUIThreadTest() - { - super(); - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - public void processData(int index, int data) - { - if (isDoAsyncOverriden) - { - java.lang.Object[] params = { index, data }; - com.tns.Platform.callJSMethod(this, "processData", params); - } - else - { - super.processData(index, data); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean isDoAsyncOverriden; - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("processData")) - { - isDoAsyncOverriden = true; - } - - } -} diff --git a/test-app/src/com/tns/com/tns/tests/DummyClass.java b/test-app/src/com/tns/com/tns/tests/DummyClass.java deleted file mode 100644 index 7c6902ce0..000000000 --- a/test-app/src/com/tns/com/tns/tests/DummyClass.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.tns.com.tns.tests; - -import android.util.Log; - -import com.tns.NativeScriptHashCodeProvider; -import com.tns.Platform; - -public class DummyClass -{ - public static class MyInterface implements com.tns.tests.DummyClass.MyInterface, NativeScriptHashCodeProvider - { - public MyInterface() - { - Log.d(Platform.DEFAULT_LOG_TAG, "MyInterfaceImpl ctor"); - } - - public int echoInt(int i) - { - java.lang.Object[] params = { i }; - return (Integer) com.tns.Platform.callJSMethod(this, "echoInt", params); - } - - public void doSomething() - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "doSomething", params); - } - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - - public void setNativeScriptOverrides(String[] overrides) - { - } - @Override - public void setNativeScriptOverride(String override) - { - } - } - - public static class DummyDerivedClass extends com.tns.tests.DummyClass.DummyDerivedClass implements NativeScriptHashCodeProvider - { - private boolean __initialized; - private boolean __ctorOverridden; - private boolean __ho0; - - public DummyDerivedClass() - { - super(); - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverridden) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "AccessibilityService", params); - } - } - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - - @Override - public String dummyMethod(com.tns.tests.DummyClass dummy) - { - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ho0) { - java.lang.Object[] params = new Object[1]; - params[0] = dummy; - return (String)com.tns.Platform.callJSMethod(this, "dummyMethod", params); - } else { - return super.dummyMethod(dummy); - } - } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("dummyMethod")) - { - __ho0 = true; - } - - } - } -} diff --git a/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java b/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java deleted file mode 100644 index e9209fba2..000000000 --- a/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.tns.com.tns.tests; - -public class DummyClassWithInit extends com.tns.tests.DummyClassWithInit implements com.tns.NativeScriptHashCodeProvider -{ - public DummyClassWithInit() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public void init() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ho1) - { - Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", false, params); - } - else - { - super.init(); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean __ctorOverriden; - private boolean __ho1; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - - if (name.equals("init")) - { - __ho1 = true; - } - - } - -} \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java b/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java deleted file mode 100644 index f1c0d72f1..000000000 --- a/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.tns.com.tns.tests; - - -public class ExceptionHandlingTest extends com.tns.tests.ExceptionHandlingTest implements com.tns.NativeScriptHashCodeProvider -{ - private boolean __initialized; - private boolean __ctorOverriden; - private boolean isOnEvent1Overriden; - - public ExceptionHandlingTest() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public void onEvent1(String s) - { - if (isOnEvent1Overriden) - { - Object[] params = { s }; - com.tns.Platform.callJSMethod(this, "onEvent1", params); - } - else - { - super.onEvent1(s); - } - } - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - else if (name.equals("onEvent1")) - { - isOnEvent1Overriden = true; - } - - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/StringConversionTest.java b/test-app/src/com/tns/com/tns/tests/StringConversionTest.java deleted file mode 100644 index d85a01dbb..000000000 --- a/test-app/src/com/tns/com/tns/tests/StringConversionTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.tns.com.tns.tests; - -public class StringConversionTest extends com.tns.tests.StringConversionTest implements com.tns.NativeScriptHashCodeProvider -{ - public StringConversionTest() throws Exception - { - super(); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - public void callback(String str) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (isCallabackOverriden) - { - Object[] params = { str }; - com.tns.Platform.callJSMethod(this, "callback", params); - } - else - { - super.callback(str); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean isCallabackOverriden; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("callback")) - { - isCallabackOverriden = true; - } - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java b/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java deleted file mode 100644 index 6f74f4ff6..000000000 --- a/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.tns.com.tns.tests; - -public class UseCallbackTest extends com.tns.tests.UseCallbackTest -{ - public UseCallbackTest(int data) - { - super(data); - } - - public static class DataCallback implements com.tns.tests.UseCallbackTest.DataCallback - { - public void onData(com.tns.tests.UseCallbackTest.Data data, long delay) - { - java.lang.Object[] params = { data, delay }; - com.tns.Platform.callJSMethodWithDelay(this, "onData", delay, params); - } - } - - public static class CleanCallback implements com.tns.tests.UseCallbackTest.CleanCallback - { - public void onClean(long delay) - { - java.lang.Object[] params = { delay }; - com.tns.Platform.callJSMethodWithDelay(this, "onClean", delay, params); - } - } -} diff --git a/test-app/src/com/tns/tests/Button1.java b/test-app/src/com/tns/tests/Button1.java index 052e89d25..33193b9b5 100644 --- a/test-app/src/com/tns/tests/Button1.java +++ b/test-app/src/com/tns/tests/Button1.java @@ -196,6 +196,26 @@ public void method1(byte value) { Log.d(logTag, "method1(byte): " + value); } + + public String method2(int value) + { + return "int=" + value; + } + + public String callMethod2WithInt() + { + return method2((int)1); + } + + public String callMethod2WithByte() + { + return method2((byte)5); + } + + public String method2(byte value) + { + return "byte=" + value; + } public String getIMAGE_ID_PROP() { diff --git a/test-app/src/com/tns/tests/CharConversionTest.java b/test-app/src/com/tns/tests/CharConversionTest.java new file mode 100644 index 000000000..28d9fbe89 --- /dev/null +++ b/test-app/src/com/tns/tests/CharConversionTest.java @@ -0,0 +1,12 @@ +package com.tns.tests; + +public class CharConversionTest { + public static interface Logger { + public void print(Object value); + } + + public static void printWithChar(Logger logger, char value) { + assert logger != null; + logger.print(value); + } +} diff --git a/test-app/src/com/tns/tests/JniReferenceLeakTest.java b/test-app/src/com/tns/tests/JniReferenceLeakTest.java new file mode 100644 index 000000000..030d337f4 --- /dev/null +++ b/test-app/src/com/tns/tests/JniReferenceLeakTest.java @@ -0,0 +1,126 @@ +package com.tns.tests; + +public class JniReferenceLeakTest { + + public static interface Processor + { + char echoChar(char c); + int echoInt(int i); + String echoString(String s); + Object echoObject(Object o); + char[] echoCharArray(char[] arr); + int[] echoIntArray(int[] arr); + String[] echoStringArray(String[] arr); + Object[] echoObjectArray(Object[] arr); + } + + private final Processor processor; + + public JniReferenceLeakTest(Processor processor) + { + this.processor = processor; + } + + public byte byteField; + public short shortField; + public int intField; + public long longField; + public float floatField; + public double doubleField; + public char charField; + public boolean booleanField; + public String stringField; + public Object objectField; + + public char[] charArray; + public int[] intArray; + public String[] stringArray; + public Object[] objectArray; + + public char[][] charArray2; + public int[][] intArray2; + public String[][] stringArray2; + public Object[][] objectArray2; + + public char echoChar(char c) + { + return c; + } + + public int echoInt(int i) + { + return i; + } + + public String echoString(String s) + { + return s; + } + + public Object echoObject(Object o) + { + return o; + } + + public char[] echoCharArray(char[] arr) + { + return arr; + } + + public int[] echoIntArray(int[] arr) + { + return arr; + } + + public String[] echoStringArray(String[] arr) + { + return arr; + } + + public Object[] echoObjectArray(Object[] arr) + { + return arr; + } + + // + + public char triggerEchoChar(char c) + { + return processor.echoChar(c); + } + + public int triggerEchoInt(int i) + { + return processor.echoInt(i); + } + + public String triggerEchoString(String s) + { + return processor.echoString(s); + } + + public Object triggerEchoObject(Object o) + { + return processor.echoObject(o); + } + + public char[] triggerEchoCharArray(char[] arr) + { + return processor.echoCharArray(arr); + } + + public int[] triggerEchoIntArray(int[] arr) + { + return processor.echoIntArray(arr); + } + + public String[] triggerEchoStringArray(String[] arr) + { + return processor.echoStringArray(arr); + } + + public Object[] triggerEchoObjectArray(Object[] arr) + { + return processor.echoObjectArray(arr); + } +} diff --git a/test-app/tasks/deploy-apk.js b/test-app/tasks/deploy-apk.js new file mode 100644 index 000000000..776cd8646 --- /dev/null +++ b/test-app/tasks/deploy-apk.js @@ -0,0 +1,31 @@ +// This node app deploys apk file on device +// Parameters: +// - Path to APK to deploy + +if (process.argv.length < 2) { + console.error('Expect path to apk file to install'); + process.exit(1); +} + +var apk = process.argv[2]; + +var proc = require('child_process'); + +var deployTimeout = 180000; // 3 minutes to deploy and launch. + +var cmd = 'adb install -r ' + apk; + +function timeoutFunction(msg) { + console.error(msg); + testrun.kill(); + process.exit(1); +}; + +var timeout = setTimeout(function() { timeoutFunction("ERROR: Deploy timeout!"); }, deployTimeout); + +console.log("Executing adb install: " + cmd); +var testrun = proc.exec(cmd, function(error, stdout, stderr) { + // If the process exits prematurely kill the timer anyway... + clearTimeout(timeout); +}); +testrun.stderr.pipe(process.stderr, { end: false }); \ No newline at end of file