private static Type[] join(Type[] env1, Type[] env2) { if (env1 == null) { return env2; } else if (env2 == null) { return env1; } Type[] result = new Type[env1.length]; for (int i = 0; i != env1.length; ++i) { Type t1 = env1[i]; Type t2 = env2[i]; if (t1 == null && t2 == null) { result[i] = null; } else if (t1 == null) { result[i] = t2; } else if (t2 == null) { result[i] = t1; } else { result[i] = Type.Union(t1, t2); } } return result; }