8613 lines
340 KiB
Diff
8613 lines
340 KiB
Diff
From 301204fcec55c76dcf6a1dc162262791bbae62bd Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Fridrich=20=C5=A0trba?= <fridrich.strba@bluewin.ch>
|
|
Date: Fri, 20 May 2022 18:15:52 +0200
|
|
Subject: [PATCH] illegal reflective access
|
|
|
|
---
|
|
build.gradle | 16 +
|
|
src/main/groovy/lang/MetaClassImpl.java | 12 +-
|
|
src/main/groovy/transform/Internal.java | 32 +
|
|
src/main/org/apache/groovy/util/Maps.java | 5820 +++++++++++++++++
|
|
.../org/codehaus/groovy/ast/PackageNode.java | 90 +-
|
|
.../groovy/ast/tools/GeneralUtils.java | 20 +
|
|
.../groovy/classgen/asm/util/TypeUtil.java | 216 +
|
|
.../reflection/AccessPermissionChecker.java | 100 +
|
|
.../CacheAccessControlException.java | 29 +
|
|
.../groovy/reflection/CachedClass.java | 76 +-
|
|
.../groovy/reflection/CachedConstructor.java | 43 +-
|
|
.../groovy/reflection/CachedField.java | 36 +-
|
|
.../groovy/reflection/CachedMethod.java | 62 +-
|
|
.../ClassLoaderForClassArtifacts.java | 8 +-
|
|
.../groovy/reflection/MixinInMetaClass.java | 7 +-
|
|
.../groovy/reflection/ReflectionUtils.java | 94 +-
|
|
.../groovy/runtime/DefaultGroovyMethods.java | 5 +-
|
|
.../runtime/callsite/CallSiteArray.java | 4 +-
|
|
.../runtime/callsite/CallSiteGenerator.java | 12 +-
|
|
.../runtime/callsite/CallSiteHelper.java | 33 +
|
|
.../callsite/GetEffectivePogoFieldSite.java | 2 +-
|
|
.../callsite/GetEffectivePojoFieldSite.java | 2 +-
|
|
.../runtime/callsite/MetaMethodSite.java | 2 +-
|
|
.../runtime/callsite/PogoMetaMethodSite.java | 3 +
|
|
.../runtime/callsite/PojoMetaMethodSite.java | 4 +-
|
|
.../metaclass/MetaClassRegistryImpl.java | 2 +-
|
|
.../metaclass/MethodSelectionException.java | 13 +-
|
|
.../codehaus/groovy/tools/DgmConverter.java | 2 +-
|
|
.../codehaus/groovy/vmplugin/VMPlugin.java | 40 +-
|
|
.../codehaus/groovy/vmplugin/v5/Java5.java | 167 +-
|
|
.../codehaus/groovy/vmplugin/v7/Java7.java | 72 +-
|
|
.../codehaus/groovy/vmplugin/v7/Selector.java | 4 +-
|
|
.../codehaus/groovy/vmplugin/v9/Java9.java | 253 +
|
|
src/test/groovy/bugs/Groovy8339Bug.groovy | 27 +
|
|
.../groovy/reflection/SecurityTest.java | 278 +
|
|
.../src/main/java/groovy/util/AntBuilder.java | 5 +-
|
|
.../java/org/codehaus/groovy/ant/Groovy.java | 3 +-
|
|
.../tools/shell/util/PackageHelperImpl.groovy | 4 +-
|
|
.../groovy/binding/ClosureTriggerBinding.java | 5 +-
|
|
.../groovy/beans/BindableSwingTest.groovy | 11 +
|
|
40 files changed, 7354 insertions(+), 260 deletions(-)
|
|
create mode 100644 src/main/groovy/transform/Internal.java
|
|
create mode 100644 src/main/org/apache/groovy/util/Maps.java
|
|
create mode 100644 src/main/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
|
|
create mode 100644 src/main/org/codehaus/groovy/reflection/AccessPermissionChecker.java
|
|
create mode 100644 src/main/org/codehaus/groovy/reflection/CacheAccessControlException.java
|
|
create mode 100644 src/main/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
|
|
create mode 100644 src/main/org/codehaus/groovy/vmplugin/v9/Java9.java
|
|
create mode 100644 src/test/groovy/bugs/Groovy8339Bug.groovy
|
|
create mode 100644 src/test/org/codehaus/groovy/reflection/SecurityTest.java
|
|
|
|
diff --git a/build.gradle b/build.gradle
|
|
index a9c2f70cd8..ea33c6d5b7 100644
|
|
--- a/build.gradle
|
|
+++ b/build.gradle
|
|
@@ -264,6 +264,10 @@ sourceSets {
|
|
exclude '**/v8/*'
|
|
exclude '**/vm7/*'
|
|
}
|
|
+ if (!JavaVersion.current().isJava9Compatible()) {
|
|
+ exclude '**/v9/*'
|
|
+ exclude '**/vm9/*'
|
|
+ }
|
|
}
|
|
groovy {
|
|
srcDirs = [
|
|
@@ -276,6 +280,10 @@ sourceSets {
|
|
exclude '**/v8/*'
|
|
exclude '**/vm7/*'
|
|
}
|
|
+ if (!JavaVersion.current().isJava9Compatible()) {
|
|
+ exclude '**/v9/*'
|
|
+ exclude '**/vm9/*'
|
|
+ }
|
|
}
|
|
resources {
|
|
srcDirs = ['src/main', 'src/resources']
|
|
@@ -287,6 +295,14 @@ sourceSets {
|
|
test {
|
|
groovy {
|
|
srcDirs = ['src/test']
|
|
+ if (!JavaVersion.current().isJava8Compatible()) {
|
|
+ exclude '**/v8/*'
|
|
+ exclude '**/vm8/*'
|
|
+ }
|
|
+ if (!JavaVersion.current().isJava9Compatible()) {
|
|
+ exclude '**/v9/*'
|
|
+ exclude '**/vm9/*'
|
|
+ }
|
|
}
|
|
resources {
|
|
srcDirs = ['src/test-resources']
|
|
diff --git a/src/main/groovy/lang/MetaClassImpl.java b/src/main/groovy/lang/MetaClassImpl.java
|
|
index 972c060fb2..7a90a417df 100644
|
|
--- a/src/main/groovy/lang/MetaClassImpl.java
|
|
+++ b/src/main/groovy/lang/MetaClassImpl.java
|
|
@@ -104,6 +104,9 @@ import java.util.Set;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
|
+import static org.codehaus.groovy.ast.tools.GeneralUtils.inSamePackage;
|
|
+import static org.codehaus.groovy.ast.tools.GeneralUtils.isDefaultVisibility;
|
|
+
|
|
/**
|
|
* Allows methods to be dynamically added to existing classes at runtime
|
|
*
|
|
@@ -1399,11 +1402,11 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
|
|
public Constructor retrieveConstructor(Class[] arguments) {
|
|
CachedConstructor constructor = (CachedConstructor) chooseMethod("<init>", constructors, arguments);
|
|
if (constructor != null) {
|
|
- return constructor.cachedConstructor;
|
|
+ return constructor.getCachedConstructor();
|
|
}
|
|
constructor = (CachedConstructor) chooseMethod("<init>", constructors, arguments);
|
|
if (constructor != null) {
|
|
- return constructor.cachedConstructor;
|
|
+ return constructor.getCachedConstructor();
|
|
}
|
|
return null;
|
|
}
|
|
@@ -2404,10 +2407,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
|
|
private static boolean packageLocal(CachedField mfp, CachedClass klass) {
|
|
if ((mfp.getModifiers() & (Modifier.PRIVATE | Modifier.PUBLIC | Modifier.PROTECTED)) != 0 || klass == null)
|
|
return false;
|
|
- Package fieldPackage = mfp.field.getDeclaringClass().getPackage();
|
|
- Package classPackage = klass.getTheClass().getPackage();
|
|
- return (fieldPackage == null && classPackage == null) ||
|
|
- fieldPackage != null && classPackage != null && fieldPackage.getName().equals(classPackage.getName());
|
|
+ return isDefaultVisibility(mfp.getModifiers()) && inSamePackage(mfp.getDeclaringClass(), klass.getTheClass());
|
|
}
|
|
|
|
private void applyStrayPropertyMethods(LinkedList<CachedClass> superClasses, Index classPropertyIndex, boolean isThis) {
|
|
diff --git a/src/main/groovy/transform/Internal.java b/src/main/groovy/transform/Internal.java
|
|
new file mode 100644
|
|
index 0000000000..a645f81c8c
|
|
--- /dev/null
|
|
+++ b/src/main/groovy/transform/Internal.java
|
|
@@ -0,0 +1,32 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package groovy.transform;
|
|
+
|
|
+import java.lang.annotation.ElementType;
|
|
+import java.lang.annotation.Retention;
|
|
+import java.lang.annotation.RetentionPolicy;
|
|
+import java.lang.annotation.Target;
|
|
+
|
|
+/**
|
|
+ * The Internal annotation is used to mark members that are internal.
|
|
+ */
|
|
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE, ElementType.FIELD})
|
|
+@Retention(RetentionPolicy.RUNTIME)
|
|
+public @interface Internal {
|
|
+}
|
|
diff --git a/src/main/org/apache/groovy/util/Maps.java b/src/main/org/apache/groovy/util/Maps.java
|
|
new file mode 100644
|
|
index 0000000000..b560a4f7d9
|
|
--- /dev/null
|
|
+++ b/src/main/org/apache/groovy/util/Maps.java
|
|
@@ -0,0 +1,5820 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.apache.groovy.util;
|
|
+
|
|
+import java.util.Collections;
|
|
+import java.util.LinkedHashMap;
|
|
+import java.util.Map;
|
|
+
|
|
+/**
|
|
+ * Map utilities.
|
|
+ * @since 2.5.0
|
|
+ */
|
|
+public abstract class Maps {
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95, K k96, V v96) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+ map.put(k96, v96);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95, K k96, V v96, K k97, V v97) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+ map.put(k96, v96);
|
|
+ map.put(k97, v97);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95, K k96, V v96, K k97, V v97, K k98, V v98) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+ map.put(k96, v96);
|
|
+ map.put(k97, v97);
|
|
+ map.put(k98, v98);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95, K k96, V v96, K k97, V v97, K k98, V v98, K k99, V v99) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+ map.put(k96, v96);
|
|
+ map.put(k97, v97);
|
|
+ map.put(k98, v98);
|
|
+ map.put(k99, v99);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10, K k11, V v11, K k12, V v12, K k13, V v13, K k14, V v14, K k15, V v15, K k16, V v16, K k17, V v17, K k18, V v18, K k19, V v19, K k20, V v20, K k21, V v21, K k22, V v22, K k23, V v23, K k24, V v24, K k25, V v25, K k26, V v26, K k27, V v27, K k28, V v28, K k29, V v29, K k30, V v30, K k31, V v31, K k32, V v32, K k33, V v33, K k34, V v34, K k35, V v35, K k36, V v36, K k37, V v37, K k38, V v38, K k39, V v39, K k40, V v40, K k41, V v41, K k42, V v42, K k43, V v43, K k44, V v44, K k45, V v45, K k46, V v46, K k47, V v47, K k48, V v48, K k49, V v49, K k50, V v50, K k51, V v51, K k52, V v52, K k53, V v53, K k54, V v54, K k55, V v55, K k56, V v56, K k57, V v57, K k58, V v58, K k59, V v59, K k60, V v60, K k61, V v61, K k62, V v62, K k63, V v63, K k64, V v64, K k65, V v65, K k66, V v66, K k67, V v67, K k68, V v68, K k69, V v69, K k70, V v70, K k71, V v71, K k72, V v72, K k73, V v73, K k74, V v74, K k75, V v75, K k76, V v76, K k77, V v77, K k78, V v78, K k79, V v79, K k80, V v80, K k81, V v81, K k82, V v82, K k83, V v83, K k84, V v84, K k85, V v85, K k86, V v86, K k87, V v87, K k88, V v88, K k89, V v89, K k90, V v90, K k91, V v91, K k92, V v92, K k93, V v93, K k94, V v94, K k95, V v95, K k96, V v96, K k97, V v97, K k98, V v98, K k99, V v99, K k100, V v100) {
|
|
+ Map<K, V> map = new LinkedHashMap<K, V>();
|
|
+
|
|
+ map.put(k1, v1);
|
|
+ map.put(k2, v2);
|
|
+ map.put(k3, v3);
|
|
+ map.put(k4, v4);
|
|
+ map.put(k5, v5);
|
|
+ map.put(k6, v6);
|
|
+ map.put(k7, v7);
|
|
+ map.put(k8, v8);
|
|
+ map.put(k9, v9);
|
|
+ map.put(k10, v10);
|
|
+ map.put(k11, v11);
|
|
+ map.put(k12, v12);
|
|
+ map.put(k13, v13);
|
|
+ map.put(k14, v14);
|
|
+ map.put(k15, v15);
|
|
+ map.put(k16, v16);
|
|
+ map.put(k17, v17);
|
|
+ map.put(k18, v18);
|
|
+ map.put(k19, v19);
|
|
+ map.put(k20, v20);
|
|
+ map.put(k21, v21);
|
|
+ map.put(k22, v22);
|
|
+ map.put(k23, v23);
|
|
+ map.put(k24, v24);
|
|
+ map.put(k25, v25);
|
|
+ map.put(k26, v26);
|
|
+ map.put(k27, v27);
|
|
+ map.put(k28, v28);
|
|
+ map.put(k29, v29);
|
|
+ map.put(k30, v30);
|
|
+ map.put(k31, v31);
|
|
+ map.put(k32, v32);
|
|
+ map.put(k33, v33);
|
|
+ map.put(k34, v34);
|
|
+ map.put(k35, v35);
|
|
+ map.put(k36, v36);
|
|
+ map.put(k37, v37);
|
|
+ map.put(k38, v38);
|
|
+ map.put(k39, v39);
|
|
+ map.put(k40, v40);
|
|
+ map.put(k41, v41);
|
|
+ map.put(k42, v42);
|
|
+ map.put(k43, v43);
|
|
+ map.put(k44, v44);
|
|
+ map.put(k45, v45);
|
|
+ map.put(k46, v46);
|
|
+ map.put(k47, v47);
|
|
+ map.put(k48, v48);
|
|
+ map.put(k49, v49);
|
|
+ map.put(k50, v50);
|
|
+ map.put(k51, v51);
|
|
+ map.put(k52, v52);
|
|
+ map.put(k53, v53);
|
|
+ map.put(k54, v54);
|
|
+ map.put(k55, v55);
|
|
+ map.put(k56, v56);
|
|
+ map.put(k57, v57);
|
|
+ map.put(k58, v58);
|
|
+ map.put(k59, v59);
|
|
+ map.put(k60, v60);
|
|
+ map.put(k61, v61);
|
|
+ map.put(k62, v62);
|
|
+ map.put(k63, v63);
|
|
+ map.put(k64, v64);
|
|
+ map.put(k65, v65);
|
|
+ map.put(k66, v66);
|
|
+ map.put(k67, v67);
|
|
+ map.put(k68, v68);
|
|
+ map.put(k69, v69);
|
|
+ map.put(k70, v70);
|
|
+ map.put(k71, v71);
|
|
+ map.put(k72, v72);
|
|
+ map.put(k73, v73);
|
|
+ map.put(k74, v74);
|
|
+ map.put(k75, v75);
|
|
+ map.put(k76, v76);
|
|
+ map.put(k77, v77);
|
|
+ map.put(k78, v78);
|
|
+ map.put(k79, v79);
|
|
+ map.put(k80, v80);
|
|
+ map.put(k81, v81);
|
|
+ map.put(k82, v82);
|
|
+ map.put(k83, v83);
|
|
+ map.put(k84, v84);
|
|
+ map.put(k85, v85);
|
|
+ map.put(k86, v86);
|
|
+ map.put(k87, v87);
|
|
+ map.put(k88, v88);
|
|
+ map.put(k89, v89);
|
|
+ map.put(k90, v90);
|
|
+ map.put(k91, v91);
|
|
+ map.put(k92, v92);
|
|
+ map.put(k93, v93);
|
|
+ map.put(k94, v94);
|
|
+ map.put(k95, v95);
|
|
+ map.put(k96, v96);
|
|
+ map.put(k97, v97);
|
|
+ map.put(k98, v98);
|
|
+ map.put(k99, v99);
|
|
+ map.put(k100, v100);
|
|
+
|
|
+ return Collections.unmodifiableMap(map);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns the inverse view of this map, and duplicated key is not allowed
|
|
+ *
|
|
+ * @param map the map to inverse
|
|
+ * @param <K> key type
|
|
+ * @param <V> value type
|
|
+ * @return the inverse view of this map
|
|
+ */
|
|
+ public static <K, V> Map<V, K> inverse(Map<K, V> map) {
|
|
+ return inverse(map, false);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns the inverse view of this map
|
|
+ *
|
|
+ * @param map the map to inverse
|
|
+ * @param force whether to put anyway even if duplicated key exists
|
|
+ * @param <K> key type
|
|
+ * @param <V> value type
|
|
+ * @return the inverse view of this map
|
|
+ */
|
|
+ public static <K, V> Map<V, K> inverse(Map<K, V> map, boolean force) {
|
|
+ // Because we can not rely on 3rd party library(excluding antlr, asm), we have to implement our own utils such as the `inverse` method...
|
|
+ // Actually `BiMap` of Guava and `BidiMap` of commons-collections are both suitable for this scenario.
|
|
+
|
|
+ Map<V, K> resultMap = new LinkedHashMap<>();
|
|
+
|
|
+ for (Map.Entry<K, V> entry : map.entrySet()) {
|
|
+ V value = entry.getValue();
|
|
+
|
|
+ if (!force && resultMap.containsKey(value)) {
|
|
+ throw new IllegalArgumentException("duplicated key found: " + value);
|
|
+ }
|
|
+
|
|
+ resultMap.put(value, entry.getKey());
|
|
+ }
|
|
+
|
|
+ return Collections.<V, K>unmodifiableMap(resultMap);
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/ast/PackageNode.java b/src/main/org/codehaus/groovy/ast/PackageNode.java
|
|
index d4fb15a258..097c7f924a 100644
|
|
--- a/src/main/org/codehaus/groovy/ast/PackageNode.java
|
|
+++ b/src/main/org/codehaus/groovy/ast/PackageNode.java
|
|
@@ -1,46 +1,44 @@
|
|
-/*
|
|
- * 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.
|
|
- */
|
|
-package org.codehaus.groovy.ast;
|
|
-
|
|
-/**
|
|
- * Represents a package in the AST.
|
|
- *
|
|
- * @author Paul King
|
|
- */
|
|
-public class PackageNode extends AnnotatedNode {
|
|
- private String name;
|
|
-
|
|
- public PackageNode(String name) {
|
|
- this.name = name;
|
|
- }
|
|
-
|
|
- public String getName() {
|
|
- return name;
|
|
- }
|
|
-
|
|
- /**
|
|
- * @return the text display of this package definition
|
|
- */
|
|
- public String getText() {
|
|
- return "package " + name;
|
|
- }
|
|
-
|
|
- public void visit(GroovyCodeVisitor visitor) {
|
|
- }
|
|
-}
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.ast;
|
|
+
|
|
+/**
|
|
+ * Represents a package in the AST.
|
|
+ */
|
|
+public class PackageNode extends AnnotatedNode {
|
|
+ private final String name;
|
|
+
|
|
+ public PackageNode(String name) {
|
|
+ this.name = name;
|
|
+ }
|
|
+
|
|
+ public String getName() {
|
|
+ return name;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * @return the text display of this package definition
|
|
+ */
|
|
+ public String getText() {
|
|
+ return "package " + name;
|
|
+ }
|
|
+
|
|
+ public void visit(GroovyCodeVisitor visitor) {
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
|
|
index f6455e5abd..4c809099f7 100644
|
|
--- a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
|
|
+++ b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
|
|
@@ -24,6 +24,7 @@ import org.codehaus.groovy.ast.ClassHelper;
|
|
import org.codehaus.groovy.ast.ClassNode;
|
|
import org.codehaus.groovy.ast.FieldNode;
|
|
import org.codehaus.groovy.ast.MethodNode;
|
|
+import org.codehaus.groovy.ast.PackageNode;
|
|
import org.codehaus.groovy.ast.Parameter;
|
|
import org.codehaus.groovy.ast.PropertyNode;
|
|
import org.codehaus.groovy.ast.Variable;
|
|
@@ -61,6 +62,7 @@ import org.codehaus.groovy.syntax.Token;
|
|
import org.codehaus.groovy.syntax.Types;
|
|
import org.codehaus.groovy.transform.AbstractASTTransformation;
|
|
|
|
+import java.lang.reflect.Modifier;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.LinkedHashSet;
|
|
@@ -466,6 +468,24 @@ public class GeneralUtils {
|
|
return false;
|
|
}
|
|
|
|
+ public static boolean inSamePackage(final ClassNode first, final ClassNode second) {
|
|
+ PackageNode firstPackage = first.getPackage();
|
|
+ PackageNode secondPackage = second.getPackage();
|
|
+ return ((firstPackage == null && secondPackage == null) ||
|
|
+ firstPackage != null && secondPackage != null && firstPackage.getName().equals(secondPackage.getName()));
|
|
+ }
|
|
+
|
|
+ public static boolean inSamePackage(final Class first, final Class second) {
|
|
+ Package firstPackage = first.getPackage();
|
|
+ Package secondPackage = second.getPackage();
|
|
+ return ((firstPackage == null && secondPackage == null) ||
|
|
+ firstPackage != null && secondPackage != null && firstPackage.getName().equals(secondPackage.getName()));
|
|
+ }
|
|
+
|
|
+ public static boolean isDefaultVisibility(final int modifiers) {
|
|
+ return (modifiers & (Modifier.PRIVATE | Modifier.PUBLIC | Modifier.PROTECTED)) == 0;
|
|
+ }
|
|
+
|
|
public static BinaryExpression hasEqualFieldX(FieldNode fNode, Expression other) {
|
|
return eqX(varX(fNode), propX(other, fNode.getName()));
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/classgen/asm/util/TypeUtil.java b/src/main/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
|
|
new file mode 100644
|
|
index 0000000000..cae9bfa921
|
|
--- /dev/null
|
|
+++ b/src/main/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
|
|
@@ -0,0 +1,216 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+
|
|
+package org.codehaus.groovy.classgen.asm.util;
|
|
+
|
|
+import groovy.lang.Tuple2;
|
|
+import org.apache.groovy.util.Maps;
|
|
+import org.codehaus.groovy.ast.ClassNode;
|
|
+import org.objectweb.asm.Type;
|
|
+
|
|
+import java.util.Map;
|
|
+
|
|
+import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.byte_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.char_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.double_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.float_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
|
|
+import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
|
|
+import static org.objectweb.asm.Opcodes.ALOAD;
|
|
+import static org.objectweb.asm.Opcodes.ARETURN;
|
|
+import static org.objectweb.asm.Opcodes.DLOAD;
|
|
+import static org.objectweb.asm.Opcodes.DRETURN;
|
|
+import static org.objectweb.asm.Opcodes.FLOAD;
|
|
+import static org.objectweb.asm.Opcodes.FRETURN;
|
|
+import static org.objectweb.asm.Opcodes.ILOAD;
|
|
+import static org.objectweb.asm.Opcodes.IRETURN;
|
|
+import static org.objectweb.asm.Opcodes.LLOAD;
|
|
+import static org.objectweb.asm.Opcodes.LRETURN;
|
|
+
|
|
+/**
|
|
+ * A utility for getting information of types
|
|
+ *
|
|
+ * @since 2.5.0
|
|
+ */
|
|
+public abstract class TypeUtil {
|
|
+ public static Class autoboxType(Class type) {
|
|
+ final Class res = PRIMITIVE_TYPE_TO_WRAPPED_CLASS_MAP.get(type);
|
|
+ return res == null ? type : res;
|
|
+ }
|
|
+
|
|
+ public static int getLoadInsnByType(Type type) {
|
|
+ Integer insn = PRIMITIVE_TYPE_TO_LOAD_INSN_MAP.get(type);
|
|
+
|
|
+ if (null != insn) {
|
|
+ return insn;
|
|
+ }
|
|
+
|
|
+ return ALOAD;
|
|
+ }
|
|
+
|
|
+ public static int getReturnInsnByType(Type type) {
|
|
+ Integer insn = PRIMITIVE_TYPE_TO_RETURN_INSN_MAP.get(type);
|
|
+
|
|
+ if (null != insn) {
|
|
+ return insn;
|
|
+ }
|
|
+
|
|
+ return ARETURN;
|
|
+ }
|
|
+
|
|
+ public static String getWrappedClassDescriptor(Type type) {
|
|
+ String desc = PRIMITIVE_TYPE_TO_WRAPPED_CLASS_DESCRIPTOR_MAP.get(type);
|
|
+
|
|
+ if (null != desc) {
|
|
+ return desc;
|
|
+ }
|
|
+
|
|
+ throw new IllegalArgumentException("Unexpected type class [" + type + "]");
|
|
+ }
|
|
+
|
|
+ public static boolean isPrimitiveType(Type type) {
|
|
+ return PRIMITIVE_TYPE_TO_LOAD_INSN_MAP.containsKey(type);
|
|
+ }
|
|
+
|
|
+ public static boolean isPrimitiveType(String name) {
|
|
+ return NAME_TO_PRIMITIVE_TYPE_MAP.containsKey(name);
|
|
+ }
|
|
+
|
|
+ public static boolean isPrimitiveType(ClassNode type) {
|
|
+ return PRIMITIVE_TYPE_TO_DESCRIPTION_MAP.containsKey(type);
|
|
+ }
|
|
+
|
|
+ public static String getDescriptionByType(ClassNode type) {
|
|
+ String desc = PRIMITIVE_TYPE_TO_DESCRIPTION_MAP.get(type);
|
|
+
|
|
+ if (null == desc) { // reference type
|
|
+ if (!type.isArray()) {
|
|
+ return makeRefDescription(type.getName());
|
|
+ }
|
|
+
|
|
+ StringBuilder arrayDescription = new StringBuilder(32);
|
|
+ Tuple2<ClassNode, Integer> arrayInfo = extractArrayInfo(type);
|
|
+
|
|
+ for (int i = 0, dimension = arrayInfo.getSecond(); i < dimension; i++) {
|
|
+ arrayDescription.append("[");
|
|
+ }
|
|
+
|
|
+ ClassNode componentType = arrayInfo.getFirst();
|
|
+ return arrayDescription.append(getDescriptionByType(componentType)).toString();
|
|
+ }
|
|
+
|
|
+ return desc;
|
|
+ }
|
|
+
|
|
+ public static String getDescriptionByName(String name) {
|
|
+ ClassNode type = NAME_TO_PRIMITIVE_TYPE_MAP.get(name);
|
|
+
|
|
+ if (null == type) {
|
|
+ return makeRefDescription(name);
|
|
+ }
|
|
+
|
|
+ return getDescriptionByType(type);
|
|
+ }
|
|
+
|
|
+ private static String makeRefDescription(String name) {
|
|
+ return REF_DESCRIPTION + name.replace('.', '/') + ";";
|
|
+ }
|
|
+
|
|
+ private static Tuple2<ClassNode, Integer> extractArrayInfo(ClassNode type) {
|
|
+ int dimension = 0;
|
|
+
|
|
+ do {
|
|
+ dimension++;
|
|
+ } while ((type = type.getComponentType()).isArray());
|
|
+
|
|
+ return new Tuple2<ClassNode, Integer>(type, dimension);
|
|
+ }
|
|
+
|
|
+ private static final String REF_DESCRIPTION = "L";
|
|
+ private static final Map<ClassNode, String> PRIMITIVE_TYPE_TO_DESCRIPTION_MAP = Maps.of(
|
|
+ int_TYPE, "I",
|
|
+ VOID_TYPE,"V",
|
|
+ boolean_TYPE, "Z",
|
|
+ byte_TYPE, "B",
|
|
+ char_TYPE, "C",
|
|
+ short_TYPE, "S",
|
|
+ double_TYPE, "D",
|
|
+ float_TYPE, "F",
|
|
+ long_TYPE, "J"
|
|
+ );
|
|
+
|
|
+ private static final Map<String, ClassNode> NAME_TO_PRIMITIVE_TYPE_MAP = Maps.of(
|
|
+ "int", int_TYPE,
|
|
+ "void", VOID_TYPE,
|
|
+ "boolean", boolean_TYPE,
|
|
+ "byte", byte_TYPE,
|
|
+ "char", char_TYPE,
|
|
+ "short", short_TYPE,
|
|
+ "double", double_TYPE,
|
|
+ "float", float_TYPE,
|
|
+ "long", long_TYPE
|
|
+ );
|
|
+
|
|
+ private static final Map<Type, Integer> PRIMITIVE_TYPE_TO_LOAD_INSN_MAP = Maps.of(
|
|
+ Type.BOOLEAN_TYPE, ILOAD,
|
|
+ Type.BYTE_TYPE, ILOAD,
|
|
+ Type.CHAR_TYPE, ILOAD,
|
|
+ Type.DOUBLE_TYPE, DLOAD,
|
|
+ Type.FLOAT_TYPE, FLOAD,
|
|
+ Type.INT_TYPE, ILOAD,
|
|
+ Type.LONG_TYPE, LLOAD,
|
|
+ Type.SHORT_TYPE, ILOAD
|
|
+ );
|
|
+
|
|
+ private static final Map<Type, Integer> PRIMITIVE_TYPE_TO_RETURN_INSN_MAP = Maps.of(
|
|
+ Type.BOOLEAN_TYPE, IRETURN,
|
|
+ Type.BYTE_TYPE, IRETURN,
|
|
+ Type.CHAR_TYPE, IRETURN,
|
|
+ Type.DOUBLE_TYPE, DRETURN,
|
|
+ Type.FLOAT_TYPE, FRETURN,
|
|
+ Type.INT_TYPE, IRETURN,
|
|
+ Type.LONG_TYPE, LRETURN,
|
|
+ Type.SHORT_TYPE, IRETURN
|
|
+ );
|
|
+
|
|
+ private static final Map<Type, String> PRIMITIVE_TYPE_TO_WRAPPED_CLASS_DESCRIPTOR_MAP = Maps.of(
|
|
+ Type.BOOLEAN_TYPE, "java/lang/Boolean",
|
|
+ Type.BYTE_TYPE, "java/lang/Byte",
|
|
+ Type.CHAR_TYPE, "java/lang/Character",
|
|
+ Type.DOUBLE_TYPE, "java/lang/Double",
|
|
+ Type.FLOAT_TYPE, "java/lang/Float",
|
|
+ Type.INT_TYPE, "java/lang/Integer",
|
|
+ Type.LONG_TYPE, "java/lang/Long",
|
|
+ Type.SHORT_TYPE, "java/lang/Short"
|
|
+ );
|
|
+
|
|
+ private static final Map<Class<?>, Class<?>> PRIMITIVE_TYPE_TO_WRAPPED_CLASS_MAP = Maps.<Class<?>, Class<?>>of(
|
|
+ byte.class, Byte.class,
|
|
+ boolean.class, Boolean.class,
|
|
+ char.class, Character.class,
|
|
+ double.class, Double.class,
|
|
+ float.class, Float.class,
|
|
+ int.class, Integer.class,
|
|
+ long.class, Long.class,
|
|
+ short.class, Short.class
|
|
+ );
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/AccessPermissionChecker.java b/src/main/org/codehaus/groovy/reflection/AccessPermissionChecker.java
|
|
new file mode 100644
|
|
index 0000000000..ae297dfd09
|
|
--- /dev/null
|
|
+++ b/src/main/org/codehaus/groovy/reflection/AccessPermissionChecker.java
|
|
@@ -0,0 +1,100 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.reflection;
|
|
+
|
|
+import groovy.lang.GroovyObject;
|
|
+
|
|
+import java.lang.reflect.Constructor;
|
|
+import java.lang.reflect.Field;
|
|
+import java.lang.reflect.Method;
|
|
+import java.lang.reflect.Modifier;
|
|
+import java.lang.reflect.ReflectPermission;
|
|
+import java.security.AccessControlException;
|
|
+
|
|
+final class AccessPermissionChecker {
|
|
+
|
|
+ private static final ReflectPermission REFLECT_PERMISSION = new ReflectPermission("suppressAccessChecks");
|
|
+
|
|
+ private AccessPermissionChecker() {
|
|
+ }
|
|
+
|
|
+ private static void checkAccessPermission(Class<?> declaringClass, final int modifiers, boolean isAccessible) {
|
|
+ final SecurityManager securityManager = System.getSecurityManager();
|
|
+ if (securityManager != null && isAccessible) {
|
|
+ if (((modifiers & Modifier.PRIVATE) != 0
|
|
+ || ((modifiers & (Modifier.PUBLIC | Modifier.PROTECTED)) == 0
|
|
+ && packageCanNotBeAddedAnotherClass(declaringClass)))
|
|
+ && !GroovyObject.class.isAssignableFrom(declaringClass)) {
|
|
+ securityManager.checkPermission(REFLECT_PERMISSION);
|
|
+ } else if ((modifiers & (Modifier.PROTECTED)) != 0 && declaringClass.equals(ClassLoader.class)) {
|
|
+ securityManager.checkCreateClassLoader();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static boolean packageCanNotBeAddedAnotherClass(Class<?> declaringClass) {
|
|
+ return declaringClass.getName().startsWith("java.");
|
|
+ }
|
|
+
|
|
+ static void checkAccessPermission(Method method) {
|
|
+ try {
|
|
+ checkAccessPermission(method.getDeclaringClass(), method.getModifiers(), method.isAccessible());
|
|
+ } catch (AccessControlException e) {
|
|
+ throw createCacheAccessControlExceptionOf(method, e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ static void checkAccessPermission(Constructor constructor) {
|
|
+ try {
|
|
+ checkAccessPermission(constructor.getDeclaringClass(), constructor.getModifiers(), constructor.isAccessible());
|
|
+ } catch (AccessControlException e) {
|
|
+ throw createCacheAccessControlExceptionOf(constructor, e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static CacheAccessControlException createCacheAccessControlExceptionOf(Method method, AccessControlException e) {
|
|
+ return new CacheAccessControlException(
|
|
+ "Groovy object can not access method " + method.getName()
|
|
+ + " cacheAccessControlExceptionOf class " + method.getDeclaringClass().getName()
|
|
+ + " with modifiers \"" + Modifier.toString(method.getModifiers()) + "\"", e);
|
|
+ }
|
|
+
|
|
+ private static CacheAccessControlException createCacheAccessControlExceptionOf(Constructor constructor, AccessControlException e) {
|
|
+ return new CacheAccessControlException(
|
|
+ "Groovy object can not access constructor " + constructor.getName()
|
|
+ + " cacheAccessControlExceptionOf class " + constructor.getDeclaringClass().getName()
|
|
+ + " with modifiers \"" + Modifier.toString(constructor.getModifiers()) + "\"", e);
|
|
+ }
|
|
+
|
|
+ static void checkAccessPermission(Field field) {
|
|
+ try {
|
|
+ checkAccessPermission(field.getDeclaringClass(), field.getModifiers(), field.isAccessible());
|
|
+ } catch (AccessControlException e) {
|
|
+ throw createCacheAccessControlExceptionOf(field, e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static CacheAccessControlException createCacheAccessControlExceptionOf(Field field, AccessControlException e) {
|
|
+ return new CacheAccessControlException(
|
|
+ "Groovy object can not access field " + field.getName()
|
|
+ + " cacheAccessControlExceptionOf class " + field.getDeclaringClass().getName()
|
|
+ + " with modifiers \"" + Modifier.toString(field.getModifiers()) + "\"", e);
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/CacheAccessControlException.java b/src/main/org/codehaus/groovy/reflection/CacheAccessControlException.java
|
|
new file mode 100644
|
|
index 0000000000..8dfa960ec8
|
|
--- /dev/null
|
|
+++ b/src/main/org/codehaus/groovy/reflection/CacheAccessControlException.java
|
|
@@ -0,0 +1,29 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.reflection;
|
|
+
|
|
+import groovy.lang.GroovyRuntimeException;
|
|
+
|
|
+public class CacheAccessControlException extends GroovyRuntimeException {
|
|
+ private static final long serialVersionUID = -5315107566539656474L;
|
|
+
|
|
+ public CacheAccessControlException(String message, Throwable cause) {
|
|
+ super(message, cause);
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/CachedClass.java b/src/main/org/codehaus/groovy/reflection/CachedClass.java
|
|
index 3a4918f53f..5127f22aeb 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/CachedClass.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/CachedClass.java
|
|
@@ -31,8 +31,6 @@ import org.codehaus.groovy.util.FastArray;
|
|
import org.codehaus.groovy.util.LazyReference;
|
|
import org.codehaus.groovy.util.ReferenceBundle;
|
|
|
|
-import java.lang.reflect.AccessibleObject;
|
|
-import java.lang.reflect.Array;
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Method;
|
|
@@ -49,9 +47,8 @@ import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
-/**
|
|
- * @author Alex.Tkachman
|
|
- */
|
|
+import static org.codehaus.groovy.reflection.ReflectionUtils.checkCanSetAccessible;
|
|
+
|
|
public class CachedClass {
|
|
private static final Method[] EMPTY_METHOD_ARRAY = new Method[0];
|
|
private final Class cachedClass;
|
|
@@ -63,15 +60,17 @@ public class CachedClass {
|
|
private static final long serialVersionUID = 5450437842165410025L;
|
|
|
|
public CachedField[] initValue() {
|
|
- final Field[] declaredFields = (Field[])
|
|
- AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
|
|
- public Field[] run() {
|
|
- Field[] df = getTheClass().getDeclaredFields();
|
|
- df = (Field[]) makeAccessible(df);
|
|
- return df;
|
|
- }
|
|
- });
|
|
- CachedField [] fields = new CachedField[declaredFields.length];
|
|
+ final Field[] declaredFields = AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
|
|
+ public Field[] run() {
|
|
+ Field[] df = getTheClass().getDeclaredFields();
|
|
+ df = Arrays.stream(df)
|
|
+ .filter(f -> checkCanSetAccessible(f, CachedClass.class))
|
|
+ .toArray(Field[]::new);
|
|
+// df = (Field[]) ReflectionUtils.makeAccessible(df);
|
|
+ return df;
|
|
+ }
|
|
+ });
|
|
+ CachedField[] fields = new CachedField[declaredFields.length];
|
|
for (int i = 0; i != fields.length; ++i)
|
|
fields[i] = new CachedField(declaredFields[i]);
|
|
return fields;
|
|
@@ -83,49 +82,36 @@ public class CachedClass {
|
|
|
|
public CachedConstructor[] initValue() {
|
|
final Constructor[] declaredConstructors = (Constructor[])
|
|
- AccessController.doPrivileged(new PrivilegedAction/*<Constructor[]>*/() {
|
|
- public /*Constructor[]*/ Object run() {
|
|
- return getTheClass().getDeclaredConstructors();
|
|
+ AccessController.doPrivileged(new PrivilegedAction<Constructor[]>() {
|
|
+ public Constructor[] run() {
|
|
+ Constructor[] dc = getTheClass().getDeclaredConstructors();
|
|
+ dc = Arrays.stream(dc)
|
|
+ .filter(c -> checkCanSetAccessible(c, CachedClass.class))
|
|
+ .toArray(Constructor[]::new);
|
|
+
|
|
+ return dc;
|
|
}
|
|
});
|
|
- CachedConstructor [] constructors = new CachedConstructor[declaredConstructors.length];
|
|
+ CachedConstructor[] constructors = new CachedConstructor[declaredConstructors.length];
|
|
for (int i = 0; i != constructors.length; ++i)
|
|
constructors[i] = new CachedConstructor(CachedClass.this, declaredConstructors[i]);
|
|
return constructors;
|
|
}
|
|
};
|
|
|
|
- // to be run in PrivilegedAction!
|
|
- private static AccessibleObject[] makeAccessible(final AccessibleObject[] aoa) {
|
|
- try {
|
|
- AccessibleObject.setAccessible(aoa, true);
|
|
- return aoa;
|
|
- } catch (Throwable outer) {
|
|
- // swallow for strict security managers, module systems, android or others,
|
|
- // but try one-by-one to get the allowed ones at least
|
|
- final ArrayList<AccessibleObject> ret = new ArrayList<AccessibleObject>(aoa.length);
|
|
- for (final AccessibleObject ao : aoa) {
|
|
- try {
|
|
- ao.setAccessible(true);
|
|
- ret.add(ao);
|
|
- } catch (Throwable inner) {
|
|
- // swallow for strict security managers, module systems, android or others
|
|
- }
|
|
- }
|
|
- return ret.toArray((AccessibleObject[]) Array.newInstance(aoa.getClass().getComponentType(), ret.size()));
|
|
- }
|
|
- }
|
|
-
|
|
private final LazyReference<CachedMethod[]> methods = new LazyReference<CachedMethod[]>(softBundle) {
|
|
private static final long serialVersionUID = 6347586066597418308L;
|
|
|
|
public CachedMethod[] initValue() {
|
|
- final Method[] declaredMethods = (Method[])
|
|
- AccessController.doPrivileged(new PrivilegedAction/*<Method[]>*/() {
|
|
- public /*Method[]*/ Object run() {
|
|
+ final Method[] declaredMethods =
|
|
+ AccessController.doPrivileged(new PrivilegedAction<Method[]>() {
|
|
+ public Method[] run() {
|
|
try {
|
|
Method[] dm = getTheClass().getDeclaredMethods();
|
|
- dm = (Method[]) makeAccessible(dm);
|
|
+ dm = Arrays.stream(dm)
|
|
+ .filter(m -> checkCanSetAccessible(m, CachedClass.class))
|
|
+ .toArray(Method[]::new);
|
|
+// dm = (Method[]) ReflectionUtils.makeAccessible(dm);
|
|
return dm;
|
|
} catch (Throwable e) {
|
|
// Typically, Android can throw ClassNotFoundException
|
|
@@ -151,7 +137,7 @@ public class CachedClass {
|
|
else
|
|
methods.add(cachedMethod);
|
|
}
|
|
- CachedMethod [] resMethods = methods.toArray(new CachedMethod[methods.size()]);
|
|
+ CachedMethod[] resMethods = methods.toArray(CachedMethod.EMPTY_ARRAY);
|
|
Arrays.sort(resMethods);
|
|
|
|
final CachedClass superClass = getCachedSuperClass();
|
|
@@ -221,7 +207,7 @@ public class CachedClass {
|
|
|
|
int hashCode;
|
|
|
|
- public CachedMethod [] mopMethods;
|
|
+ public CachedMethod[] mopMethods;
|
|
public static final CachedClass[] EMPTY_ARRAY = new CachedClass[0];
|
|
|
|
private final LazyReference<Set<CachedClass>> declaredInterfaces = new LazyReference<Set<CachedClass>> (softBundle) {
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/CachedConstructor.java b/src/main/org/codehaus/groovy/reflection/CachedConstructor.java
|
|
index 74d9b713a0..fc04281332 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/CachedConstructor.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/CachedConstructor.java
|
|
@@ -24,34 +24,19 @@ import org.codehaus.groovy.runtime.InvokerInvocationException;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
-import java.security.AccessController;
|
|
-import java.security.PrivilegedAction;
|
|
+
|
|
+import static org.codehaus.groovy.reflection.ReflectionUtils.makeAccessibleInPrivilegedAction;
|
|
|
|
/**
|
|
* @author Alex.Tkachman
|
|
*/
|
|
public class CachedConstructor extends ParameterTypes {
|
|
- CachedClass clazz;
|
|
-
|
|
- public final Constructor cachedConstructor;
|
|
+ private final CachedClass clazz;
|
|
+ private final Constructor cachedConstructor;
|
|
|
|
public CachedConstructor(CachedClass clazz, final Constructor c) {
|
|
this.cachedConstructor = c;
|
|
this.clazz = clazz;
|
|
- try {
|
|
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
- public Object run() {
|
|
- c.setAccessible(true);
|
|
- return null;
|
|
- }
|
|
- });
|
|
- } catch (SecurityException e) {
|
|
- // IGNORE
|
|
- } catch (RuntimeException re) {
|
|
- // test for JDK9 JIGSAW
|
|
- if (!"java.lang.reflect.InaccessibleObjectException".equals(re.getClass().getName())) throw re;
|
|
- // else IGNORE
|
|
- }
|
|
}
|
|
|
|
public CachedConstructor(Constructor c) {
|
|
@@ -78,6 +63,8 @@ public class CachedConstructor extends ParameterTypes {
|
|
}
|
|
|
|
public Object invoke(Object[] argumentArray) {
|
|
+ makeAccessibleIfNecessary();
|
|
+
|
|
Constructor constr = cachedConstructor;
|
|
try {
|
|
return constr.newInstance(argumentArray);
|
|
@@ -113,4 +100,22 @@ public class CachedConstructor extends ParameterTypes {
|
|
public CachedClass getCachedClass() {
|
|
return clazz;
|
|
}
|
|
+
|
|
+ public Class getDeclaringClass() {
|
|
+ return cachedConstructor.getDeclaringClass();
|
|
+ }
|
|
+
|
|
+ public Constructor getCachedConstructor() {
|
|
+ makeAccessibleIfNecessary();
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedConstructor);
|
|
+ return cachedConstructor;
|
|
+ }
|
|
+
|
|
+ private boolean makeAccessibleDone = false;
|
|
+ private void makeAccessibleIfNecessary() {
|
|
+ if (!makeAccessibleDone) {
|
|
+ makeAccessibleInPrivilegedAction(cachedConstructor);
|
|
+ makeAccessibleDone = true;
|
|
+ }
|
|
+ }
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/CachedField.java b/src/main/org/codehaus/groovy/reflection/CachedField.java
|
|
index 543a373653..c2b5dd4c10 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/CachedField.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/CachedField.java
|
|
@@ -25,12 +25,14 @@ import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Modifier;
|
|
|
|
+import static org.codehaus.groovy.reflection.ReflectionUtils.makeAccessibleInPrivilegedAction;
|
|
+
|
|
public class CachedField extends MetaProperty {
|
|
- public final Field field;
|
|
+ private final Field cachedField;
|
|
|
|
public CachedField(Field field) {
|
|
super (field.getName(), field.getType());
|
|
- this.field = field;
|
|
+ this.cachedField = field;
|
|
}
|
|
|
|
public boolean isStatic() {
|
|
@@ -42,7 +44,7 @@ public class CachedField extends MetaProperty {
|
|
}
|
|
|
|
public int getModifiers() {
|
|
- return field.getModifiers();
|
|
+ return cachedField.getModifiers();
|
|
}
|
|
|
|
/**
|
|
@@ -50,8 +52,10 @@ public class CachedField extends MetaProperty {
|
|
* @throws RuntimeException if the property could not be evaluated
|
|
*/
|
|
public Object getProperty(final Object object) {
|
|
+ makeAccessibleIfNecessary();
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedField);
|
|
try {
|
|
- return field.get(object);
|
|
+ return cachedField.get(object);
|
|
} catch (IllegalAccessException e) {
|
|
throw new GroovyRuntimeException("Cannot get the property '" + name + "'.", e);
|
|
}
|
|
@@ -65,15 +69,35 @@ public class CachedField extends MetaProperty {
|
|
* @throws RuntimeException if the property could not be set
|
|
*/
|
|
public void setProperty(final Object object, Object newValue) {
|
|
- final Object goalValue = DefaultTypeTransformation.castToType(newValue, field.getType());
|
|
+ makeAccessibleIfNecessary();
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedField);
|
|
+ final Object goalValue = DefaultTypeTransformation.castToType(newValue, cachedField.getType());
|
|
|
|
if (isFinal()) {
|
|
throw new GroovyRuntimeException("Cannot set the property '" + name + "' because the backing field is final.");
|
|
}
|
|
try {
|
|
- field.set(object, goalValue);
|
|
+ cachedField.set(object, goalValue);
|
|
} catch (IllegalAccessException ex) {
|
|
throw new GroovyRuntimeException("Cannot set the property '" + name + "'.", ex);
|
|
}
|
|
}
|
|
+
|
|
+ public Class getDeclaringClass() {
|
|
+ return cachedField.getDeclaringClass();
|
|
+ }
|
|
+
|
|
+ public Field getCachedField() {
|
|
+ makeAccessibleIfNecessary();
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedField);
|
|
+ return cachedField;
|
|
+ }
|
|
+
|
|
+ private boolean makeAccessibleDone = false;
|
|
+ private void makeAccessibleIfNecessary() {
|
|
+ if (!makeAccessibleDone) {
|
|
+ makeAccessibleInPrivilegedAction(cachedField);
|
|
+ makeAccessibleDone = true;
|
|
+ }
|
|
+ }
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/CachedMethod.java b/src/main/org/codehaus/groovy/reflection/CachedMethod.java
|
|
index 0c8dac0489..b9e319c787 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/CachedMethod.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/CachedMethod.java
|
|
@@ -31,6 +31,7 @@ import org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite;
|
|
import org.codehaus.groovy.runtime.metaclass.MethodHelper;
|
|
|
|
import java.io.Serializable;
|
|
+import java.lang.annotation.Annotation;
|
|
import java.lang.ref.SoftReference;
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
@@ -38,16 +39,16 @@ import java.lang.reflect.Method;
|
|
import java.util.Arrays;
|
|
import java.util.Comparator;
|
|
|
|
-/**
|
|
- * @author Alex.Tkachman
|
|
- */
|
|
+import static org.codehaus.groovy.reflection.ReflectionUtils.makeAccessibleInPrivilegedAction;
|
|
+
|
|
public class CachedMethod extends MetaMethod implements Comparable {
|
|
+ public static final CachedMethod[] EMPTY_ARRAY = new CachedMethod[0];
|
|
public final CachedClass cachedClass;
|
|
|
|
private final Method cachedMethod;
|
|
private int hashCode;
|
|
|
|
- private static MyComparator comparator = new MyComparator();
|
|
+ private static final MyComparator COMPARATOR = new MyComparator();
|
|
|
|
private SoftReference<Constructor> pogoCallSiteConstructor, pojoCallSiteConstructor, staticCallSiteConstructor;
|
|
|
|
@@ -70,14 +71,14 @@ public class CachedMethod extends MetaMethod implements Comparable {
|
|
// return cachedMethod;
|
|
// }
|
|
// return null;
|
|
- int i = Arrays.binarySearch(methods, method, comparator);
|
|
+ int i = Arrays.binarySearch(methods, method, COMPARATOR);
|
|
if (i < 0)
|
|
return null;
|
|
|
|
return methods[i];
|
|
}
|
|
|
|
- protected Class[] getPT() {
|
|
+ public Class[] getPT() {
|
|
return cachedMethod.getParameterTypes();
|
|
}
|
|
|
|
@@ -94,11 +95,33 @@ public class CachedMethod extends MetaMethod implements Comparable {
|
|
}
|
|
|
|
public final Object invoke(Object object, Object[] arguments) {
|
|
+ /*
|
|
+ CachedMethod transformedCachedMethod =
|
|
+ (CachedMethod) CallSiteHelper.transformMetaMethod(
|
|
+ InvokerHelper.getMetaClass(object.getClass()),
|
|
+ this,
|
|
+ this.getPT(),
|
|
+ CachedMethod.class);
|
|
+
|
|
+ Method cachedMethod = transformedCachedMethod.cachedMethod;
|
|
+
|
|
+ if (transformedCachedMethod == this) {
|
|
+ makeAccessibleIfNecessary();
|
|
+ } else {
|
|
+ ReflectionUtils.trySetAccessible(cachedMethod);
|
|
+ }
|
|
+ */
|
|
+
|
|
+ makeAccessibleIfNecessary();
|
|
+
|
|
+ try {
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedMethod);
|
|
+ } catch (CacheAccessControlException ex) {
|
|
+ throw new InvokerInvocationException(ex);
|
|
+ }
|
|
try {
|
|
return cachedMethod.invoke(object, arguments);
|
|
- } catch (IllegalArgumentException e) {
|
|
- throw new InvokerInvocationException(e);
|
|
- } catch (IllegalAccessException e) {
|
|
+ } catch (IllegalArgumentException | IllegalAccessException e) {
|
|
throw new InvokerInvocationException(e);
|
|
} catch (InvocationTargetException e) {
|
|
Throwable cause = e.getCause();
|
|
@@ -129,6 +152,9 @@ public class CachedMethod extends MetaMethod implements Comparable {
|
|
}
|
|
|
|
public final Method setAccessible() {
|
|
+ makeAccessibleIfNecessary();
|
|
+
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedMethod);
|
|
// if (queuedToCompile.compareAndSet(false,true)) {
|
|
// if (isCompilable())
|
|
// CompileThread.addMethod(this);
|
|
@@ -330,9 +356,25 @@ public class CachedMethod extends MetaMethod implements Comparable {
|
|
}
|
|
}
|
|
|
|
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
|
|
+ return cachedMethod.getAnnotation(annotationClass);
|
|
+ }
|
|
+
|
|
+ public boolean isSynthetic() {
|
|
+ return cachedMethod.isSynthetic();
|
|
+ }
|
|
+
|
|
public Method getCachedMethod() {
|
|
+ makeAccessibleIfNecessary();
|
|
+ AccessPermissionChecker.checkAccessPermission(cachedMethod);
|
|
return cachedMethod;
|
|
}
|
|
|
|
+ private boolean makeAccessibleDone = false;
|
|
+ private void makeAccessibleIfNecessary() {
|
|
+ if (!makeAccessibleDone) {
|
|
+ makeAccessibleInPrivilegedAction(cachedMethod);
|
|
+ makeAccessibleDone = true;
|
|
+ }
|
|
+ }
|
|
}
|
|
-
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java b/src/main/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
|
|
index ba24a6d39c..f8f0dfa6f2 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
|
|
@@ -60,12 +60,16 @@ public class ClassLoaderForClassArtifacts extends ClassLoader {
|
|
}
|
|
|
|
public String createClassName(Method method) {
|
|
+ return createClassName(method.getName());
|
|
+ }
|
|
+
|
|
+ public String createClassName(String methodName) {
|
|
final String name;
|
|
final String clsName = klazz.get().getName();
|
|
if (clsName.startsWith("java."))
|
|
- name = clsName.replace('.','_') + "$" + method.getName();
|
|
+ name = clsName.replace('.','_') + "$" + methodName;
|
|
else
|
|
- name = clsName + "$" + method.getName();
|
|
+ name = clsName + "$" + methodName;
|
|
int suffix = classNamesCounter.getAndIncrement();
|
|
return suffix == -1? name : name + "$" + suffix;
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/MixinInMetaClass.java b/src/main/org/codehaus/groovy/reflection/MixinInMetaClass.java
|
|
index 2f58d5c529..1a592e685d 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/MixinInMetaClass.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/MixinInMetaClass.java
|
|
@@ -25,6 +25,7 @@ import groovy.lang.GroovySystem;
|
|
import groovy.lang.MetaClass;
|
|
import groovy.lang.MetaMethod;
|
|
import groovy.lang.MetaProperty;
|
|
+import groovy.transform.Internal;
|
|
import org.codehaus.groovy.runtime.HandleMetaClass;
|
|
import org.codehaus.groovy.runtime.MetaClassHelper;
|
|
import org.codehaus.groovy.runtime.metaclass.MixedInMetaClass;
|
|
@@ -134,7 +135,7 @@ public class MixinInMetaClass extends ManagedConcurrentMap {
|
|
if (!Modifier.isPublic(mod))
|
|
continue;
|
|
|
|
- if (method instanceof CachedMethod && ((CachedMethod) method).getCachedMethod().isSynthetic())
|
|
+ if (method instanceof CachedMethod && ((CachedMethod) method).isSynthetic())
|
|
continue;
|
|
|
|
if (Modifier.isStatic(mod)) {
|
|
@@ -159,6 +160,10 @@ public class MixinInMetaClass extends ManagedConcurrentMap {
|
|
}
|
|
}
|
|
|
|
+ private static boolean hasAnnotation(CachedMethod method, Class<Internal> annotationClass) {
|
|
+ return method.getAnnotation(annotationClass) != null;
|
|
+ }
|
|
+
|
|
private static void staticMethod(final MetaClass self, List<MetaMethod> arr, final CachedMethod method) {
|
|
CachedClass[] paramTypes = method.getParameterTypes();
|
|
|
|
diff --git a/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java b/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java
|
|
index e621729823..03706d4611 100644
|
|
--- a/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java
|
|
+++ b/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java
|
|
@@ -18,9 +18,21 @@
|
|
*/
|
|
package org.codehaus.groovy.reflection;
|
|
|
|
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
|
|
+import org.codehaus.groovy.vmplugin.VMPlugin;
|
|
+import org.codehaus.groovy.vmplugin.VMPluginFactory;
|
|
+
|
|
+import java.lang.reflect.AccessibleObject;
|
|
+import java.lang.reflect.Array;
|
|
+import java.lang.reflect.Method;
|
|
+import java.security.AccessController;
|
|
+import java.security.PrivilegedAction;
|
|
+import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.HashSet;
|
|
+import java.util.List;
|
|
+import java.util.Optional;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
@@ -29,9 +41,9 @@ import java.util.Set;
|
|
* groovy MOP are excluded from the level counting.
|
|
*/
|
|
public class ReflectionUtils {
|
|
-
|
|
// these are packages in the call stack that are only part of the groovy MOP
|
|
private static final Set<String> IGNORED_PACKAGES = new HashSet<String>();
|
|
+ private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
|
|
|
|
static {
|
|
//IGNORED_PACKAGES.add("java.lang.reflect");
|
|
@@ -41,6 +53,7 @@ public class ReflectionUtils {
|
|
IGNORED_PACKAGES.add("org.codehaus.groovy.runtime.metaclass");
|
|
IGNORED_PACKAGES.add("org.codehaus.groovy.runtime");
|
|
IGNORED_PACKAGES.add("sun.reflect");
|
|
+ IGNORED_PACKAGES.add("java.security");
|
|
IGNORED_PACKAGES.add("java.lang.invoke");
|
|
IGNORED_PACKAGES.add("org.codehaus.groovy.vmplugin.v7");
|
|
}
|
|
@@ -119,6 +132,85 @@ public class ReflectionUtils {
|
|
}
|
|
}
|
|
|
|
+ public static Optional<Method> getMethod(Class type, String name, Class<?>... parameterTypes) {
|
|
+ out:
|
|
+ for (Method m : type.getMethods()) {
|
|
+ if (!m.getName().equals(name)) {
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ Class<?>[] methodParameterTypes = m.getParameterTypes();
|
|
+ if (methodParameterTypes.length != parameterTypes.length) {
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ for (int i = 0, n = methodParameterTypes.length; i < n; i++) {
|
|
+ Class<?> parameterType = TypeUtil.autoboxType(parameterTypes[i]);
|
|
+ if (null == parameterType) {
|
|
+ continue out;
|
|
+ }
|
|
+
|
|
+ Class<?> methodParameterType = TypeUtil.autoboxType(methodParameterTypes[i]);
|
|
+ if (!methodParameterType.isAssignableFrom(parameterType)) {
|
|
+ continue out;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return Optional.of(m);
|
|
+ }
|
|
+
|
|
+ return Optional.empty();
|
|
+ }
|
|
+
|
|
+ public static boolean checkCanSetAccessible(AccessibleObject accessibleObject,
|
|
+ Class<?> caller) {
|
|
+ return VM_PLUGIN.checkCanSetAccessible(accessibleObject, caller);
|
|
+ }
|
|
+
|
|
+ public static boolean trySetAccessible(AccessibleObject ao) {
|
|
+ try {
|
|
+ return VM_PLUGIN.trySetAccessible(ao);
|
|
+ } catch (Throwable t) {
|
|
+ // swallow for strict security managers, module systems, android or others
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ public static Optional<AccessibleObject> makeAccessibleInPrivilegedAction(final AccessibleObject ao) {
|
|
+ return AccessController.doPrivileged(new PrivilegedAction<Optional<AccessibleObject>>() {
|
|
+ public Optional<AccessibleObject> run() {
|
|
+ return makeAccessible(ao);
|
|
+ }
|
|
+ });
|
|
+ }
|
|
+
|
|
+ // to be run in PrivilegedAction!
|
|
+ public static Optional<AccessibleObject> makeAccessible(final AccessibleObject ao) {
|
|
+ AccessibleObject[] result = makeAccessible(new AccessibleObject[] { ao });
|
|
+
|
|
+ return Optional.ofNullable(0 == result.length ? null : result[0]);
|
|
+ }
|
|
+
|
|
+ // to be run in PrivilegedAction!
|
|
+ public static AccessibleObject[] makeAccessible(final AccessibleObject[] aoa) {
|
|
+ try {
|
|
+ AccessibleObject.setAccessible(aoa, true);
|
|
+ return aoa;
|
|
+ } catch (Throwable outer) {
|
|
+ // swallow for strict security managers, module systems, android or others,
|
|
+ // but try one-by-one to get the allowed ones at least
|
|
+ final List<AccessibleObject> ret = new ArrayList<>(aoa.length);
|
|
+ for (final AccessibleObject ao : aoa) {
|
|
+ boolean accessible = trySetAccessible(ao);
|
|
+ if (accessible) {
|
|
+ ret.add(ao);
|
|
+ }
|
|
+ }
|
|
+ return ret.toArray((AccessibleObject[]) Array.newInstance(aoa.getClass().getComponentType(), 0));
|
|
+ }
|
|
+ }
|
|
+
|
|
private static boolean superClassShouldBeIgnored(Class sc) {
|
|
return ((sc != null) && (sc.getPackage() != null) && "org.codehaus.groovy.runtime.callsite".equals(sc.getPackage().getName()));
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
|
|
index e3f747426b..d49f83689a 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
|
|
@@ -59,6 +59,7 @@ import org.codehaus.groovy.classgen.Verifier;
|
|
import org.codehaus.groovy.reflection.ClassInfo;
|
|
import org.codehaus.groovy.reflection.MixinInMetaClass;
|
|
import org.codehaus.groovy.reflection.ReflectionCache;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
import org.codehaus.groovy.reflection.stdclasses.CachedSAMClass;
|
|
import org.codehaus.groovy.runtime.callsite.BooleanClosureWrapper;
|
|
import org.codehaus.groovy.runtime.callsite.BooleanReturningMethodInvoker;
|
|
@@ -386,9 +387,9 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
|
|
if (groovyObject && field.getName().equals("metaClass")) {
|
|
continue;
|
|
}
|
|
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
|
public Object run() {
|
|
- field.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(field);
|
|
return null;
|
|
}
|
|
});
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/CallSiteArray.java b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
|
|
index c2c2cf2572..acbb06fa24 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
|
|
@@ -29,10 +29,10 @@ import org.codehaus.groovy.runtime.InvokerHelper;
|
|
import java.security.AccessController;
|
|
import java.security.PrivilegedAction;
|
|
|
|
+
|
|
public final class CallSiteArray {
|
|
public final CallSite[] array;
|
|
-
|
|
- public static final Object [] NOPARAM = new Object[0];
|
|
+ public static final Object[] NOPARAM = new Object[0];
|
|
public final Class owner;
|
|
|
|
public CallSiteArray(Class owner, String [] names) {
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
|
|
index 8931d19599..1267cfe5b4 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
|
|
@@ -32,7 +32,6 @@ import org.objectweb.asm.MethodVisitor;
|
|
import org.objectweb.asm.Opcodes;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
-import java.lang.reflect.Method;
|
|
import java.lang.reflect.Modifier;
|
|
|
|
public class CallSiteGenerator {
|
|
@@ -71,9 +70,8 @@ public class CallSiteGenerator {
|
|
BytecodeHelper.doCast(mv, callClass);
|
|
if (useInterface) invokeMethodCode = Opcodes.INVOKEINTERFACE;
|
|
}
|
|
-
|
|
- Method method = cachedMethod.setAccessible();
|
|
- Class<?>[] parameters = method.getParameterTypes();
|
|
+
|
|
+ Class<?>[] parameters = cachedMethod.getPT();
|
|
int size = parameters.length;
|
|
for (int i = 0; i < size; i++) {
|
|
if (useArray) {
|
|
@@ -231,7 +229,7 @@ public class CallSiteGenerator {
|
|
|
|
final CachedClass declClass = cachedMethod.getDeclaringClass();
|
|
final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
|
|
- final String name = callSiteLoader.createClassName(cachedMethod.setAccessible());
|
|
+ final String name = callSiteLoader.createClassName(cachedMethod.getName());
|
|
|
|
final byte[] bytes = genPogoMetaMethodSite(cachedMethod, cw, name);
|
|
|
|
@@ -243,7 +241,7 @@ public class CallSiteGenerator {
|
|
|
|
final CachedClass declClass = cachedMethod.getDeclaringClass();
|
|
final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
|
|
- final String name = callSiteLoader.createClassName(cachedMethod.setAccessible());
|
|
+ final String name = callSiteLoader.createClassName(cachedMethod.getName());
|
|
|
|
final byte[] bytes = genPojoMetaMethodSite(cachedMethod, cw, name);
|
|
|
|
@@ -255,7 +253,7 @@ public class CallSiteGenerator {
|
|
|
|
final CachedClass declClass = cachedMethod.getDeclaringClass();
|
|
final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
|
|
- final String name = callSiteLoader.createClassName(cachedMethod.setAccessible());
|
|
+ final String name = callSiteLoader.createClassName(cachedMethod.getName());
|
|
|
|
final byte[] bytes = genStaticMetaMethodSite(cachedMethod, cw, name);
|
|
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
|
|
new file mode 100644
|
|
index 0000000000..016c5373d0
|
|
--- /dev/null
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
|
|
@@ -0,0 +1,33 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.runtime.callsite;
|
|
+
|
|
+import groovy.lang.MetaClass;
|
|
+import groovy.lang.MetaMethod;
|
|
+import org.codehaus.groovy.vmplugin.VMPlugin;
|
|
+import org.codehaus.groovy.vmplugin.VMPluginFactory;
|
|
+
|
|
+public class CallSiteHelper {
|
|
+ private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
|
|
+
|
|
+ public static MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
|
|
+ return VM_PLUGIN.transformMetaMethod(metaClass, metaMethod, params, caller);
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java b/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
|
|
index e8d7816683..efa5fb5c26 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
|
|
@@ -33,7 +33,7 @@ public class GetEffectivePogoFieldSite extends AbstractCallSite {
|
|
public GetEffectivePogoFieldSite(CallSite site, MetaClass metaClass, CachedField effective) {
|
|
super(site);
|
|
this.metaClass = metaClass;
|
|
- this.effective = effective.field;
|
|
+ this.effective = effective.getCachedField();
|
|
}
|
|
|
|
public final Object callGetProperty (Object receiver) throws Throwable {
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java b/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
|
|
index 68f7342e4c..f1c4d719f9 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
|
|
@@ -33,7 +33,7 @@ class GetEffectivePojoFieldSite extends AbstractCallSite {
|
|
public GetEffectivePojoFieldSite(CallSite site, MetaClassImpl metaClass, CachedField effective) {
|
|
super(site);
|
|
this.metaClass = metaClass;
|
|
- this.effective = effective.field;
|
|
+ this.effective = effective.getCachedField();
|
|
version = metaClass.getVersion();
|
|
}
|
|
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java b/src/main/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
|
|
index dc151450e6..94fb39324a 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
|
|
@@ -28,7 +28,7 @@ import groovy.lang.MetaMethod;
|
|
*/
|
|
public abstract class MetaMethodSite extends MetaClassSite {
|
|
final MetaMethod metaMethod;
|
|
- protected final Class [] params;
|
|
+ protected final Class[] params;
|
|
|
|
public MetaMethodSite(CallSite site, MetaClass metaClass, MetaMethod metaMethod, Class[] params) {
|
|
super(site, metaClass);
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java b/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
|
|
index 243e62de31..0a69ab4172 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
|
|
@@ -160,6 +160,9 @@ public class PogoMetaMethodSite extends MetaMethodSite {
|
|
public PogoCachedMethodSite(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params) {
|
|
super(site, metaClass, metaMethod, params);
|
|
reflect = metaMethod.setAccessible();
|
|
+
|
|
+// super(site, metaClass, CallSiteHelper.transformMetaMethod(metaClass, metaMethod, params, site), params);
|
|
+// reflect = ((CachedMethod) super.metaMethod).setAccessible();
|
|
}
|
|
|
|
public Object invoke(Object receiver, Object[] args) throws Throwable {
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java b/src/main/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
|
|
index 7bbd903d00..d44b0a507f 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
|
|
@@ -181,8 +181,8 @@ public class PojoMetaMethodSite extends MetaMethodSite {
|
|
final Method reflect;
|
|
|
|
public PojoCachedMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
|
|
- super(site, metaClass, metaMethod, params);
|
|
- reflect = ((CachedMethod)metaMethod).setAccessible();
|
|
+ super(site, metaClass, CallSiteHelper.transformMetaMethod(metaClass, metaMethod, params, site.getArray().owner), params);
|
|
+ reflect = ((CachedMethod) super.metaMethod).setAccessible();
|
|
}
|
|
|
|
public Object invoke(Object receiver, Object[] args) throws Throwable {
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java b/src/main/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
|
|
index 742060b2eb..97c0580637 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
|
|
@@ -234,7 +234,7 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
|
|
|
|
for (CachedMethod method : methods) {
|
|
final int mod = method.getModifiers();
|
|
- if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && method.getCachedMethod().getAnnotation(Deprecated.class) == null) {
|
|
+ if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && method.getAnnotation(Deprecated.class) == null) {
|
|
CachedClass[] paramTypes = method.getParameterTypes();
|
|
if (paramTypes.length > 0) {
|
|
List<MetaMethod> arr = map.get(paramTypes[0]);
|
|
diff --git a/src/main/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java b/src/main/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
|
|
index 4f0cc4cb96..5e30927362 100644
|
|
--- a/src/main/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
|
|
+++ b/src/main/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
|
|
@@ -32,12 +32,11 @@ import java.lang.reflect.Modifier;
|
|
* <p>
|
|
* <b>Note:</b> This exception as for internal use only!
|
|
*
|
|
- * @author Jochen Theodorou
|
|
* @since Groovy 1.1
|
|
*/
|
|
public class MethodSelectionException extends GroovyRuntimeException {
|
|
|
|
- private static final long serialVersionUID = 6260193948973669540L;
|
|
+ private static final long serialVersionUID = 8126246630023758333L;
|
|
private final String methodName;
|
|
private final FastArray methods;
|
|
private final Class[] arguments;
|
|
@@ -92,12 +91,12 @@ public class MethodSelectionException extends GroovyRuntimeException {
|
|
appendClassNames(buffer,method.getNativeParameterTypes());
|
|
}
|
|
else {
|
|
- CachedConstructor method = (CachedConstructor) methodOrConstructor;
|
|
- buffer.append(Modifier.toString(method.cachedConstructor.getModifiers()));
|
|
- buffer.append(" ").append(method.cachedConstructor.getDeclaringClass().getName());
|
|
+ CachedConstructor constructor = (CachedConstructor) methodOrConstructor;
|
|
+ buffer.append(Modifier.toString(constructor.getModifiers()));
|
|
+ buffer.append(" ").append(constructor.getDeclaringClass().getName());
|
|
buffer.append("#<init>");
|
|
- appendClassNames(buffer,method.getNativeParameterTypes());
|
|
+ appendClassNames(buffer,constructor.getNativeParameterTypes());
|
|
}
|
|
}
|
|
}
|
|
-}
|
|
\ No newline at end of file
|
|
+}
|
|
diff --git a/src/main/org/codehaus/groovy/tools/DgmConverter.java b/src/main/org/codehaus/groovy/tools/DgmConverter.java
|
|
index 0965c92ac4..93997a1058 100644
|
|
--- a/src/main/org/codehaus/groovy/tools/DgmConverter.java
|
|
+++ b/src/main/org/codehaus/groovy/tools/DgmConverter.java
|
|
@@ -58,7 +58,7 @@ public class DgmConverter implements Opcodes {
|
|
if (!method.isStatic() || !method.isPublic())
|
|
continue;
|
|
|
|
- if (method.getCachedMethod().getAnnotation(Deprecated.class) != null)
|
|
+ if (method.getAnnotation(Deprecated.class) != null)
|
|
continue;
|
|
|
|
if (method.getParameterTypes().length == 0)
|
|
diff --git a/src/main/org/codehaus/groovy/vmplugin/VMPlugin.java b/src/main/org/codehaus/groovy/vmplugin/VMPlugin.java
|
|
index d89ec16ce8..0d72662e77 100644
|
|
--- a/src/main/org/codehaus/groovy/vmplugin/VMPlugin.java
|
|
+++ b/src/main/org/codehaus/groovy/vmplugin/VMPlugin.java
|
|
@@ -18,22 +18,24 @@
|
|
*/
|
|
package org.codehaus.groovy.vmplugin;
|
|
|
|
+import groovy.lang.MetaClass;
|
|
+import groovy.lang.MetaMethod;
|
|
import org.codehaus.groovy.ast.AnnotationNode;
|
|
import org.codehaus.groovy.ast.ClassNode;
|
|
import org.codehaus.groovy.ast.CompileUnit;
|
|
|
|
+import java.lang.reflect.AccessibleObject;
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* Interface to access VM version based actions.
|
|
* This interface is for internal use only!
|
|
- *
|
|
- * @author Jochen Theodorou
|
|
*/
|
|
public interface VMPlugin {
|
|
void setAdditionalClassInformation(ClassNode c);
|
|
Class[] getPluginDefaultGroovyMethods();
|
|
Class[] getPluginStaticGroovyMethods();
|
|
+ void configureAnnotationNodeFromDefinition(AnnotationNode definition, AnnotationNode root);
|
|
void configureAnnotation(AnnotationNode an);
|
|
void configureClassNode(CompileUnit compileUnit, ClassNode classNode);
|
|
void invalidateCallSites();
|
|
@@ -56,9 +58,39 @@ public interface VMPlugin {
|
|
Object invokeHandle(Object handle, Object[] args) throws Throwable;
|
|
|
|
/**
|
|
- * Gives the version the plguin is made for
|
|
- * @return 5 for jdk5, 6 for jdk6, 7 for jdk7 or higher
|
|
+ * Gives the version the plugin is made for
|
|
+ * @return 7 for jdk7, 8 for jdk8, 9 for jdk9 or higher
|
|
*/
|
|
int getVersion();
|
|
|
|
+ /**
|
|
+ * Check whether invoking {@link AccessibleObject#setAccessible(boolean)} on the accessible object will be completed successfully
|
|
+ *
|
|
+ * @param accessibleObject the accessible object to check
|
|
+ * @param caller the caller to invoke {@code setAccessible}
|
|
+ * @return the check result
|
|
+ */
|
|
+ boolean checkCanSetAccessible(AccessibleObject accessibleObject, Class<?> caller);
|
|
+
|
|
+ /**
|
|
+ * Set the {@code accessible} flag for this reflected object to {@code true}
|
|
+ * if possible.
|
|
+ *
|
|
+ * @param ao the accessible object
|
|
+ * @return {@code true} if the {@code accessible} flag is set to {@code true};
|
|
+ * {@code false} if access cannot be enabled.
|
|
+ * @throws SecurityException if the request is denied by the security manager
|
|
+ */
|
|
+ boolean trySetAccessible(AccessibleObject ao);
|
|
+
|
|
+ /**
|
|
+ * transform meta method
|
|
+ *
|
|
+ * @param metaClass meta class
|
|
+ * @param metaMethod the original meta method
|
|
+ * @param params parameter types
|
|
+ * @param caller caller type
|
|
+ * @return the transformed meta method
|
|
+ */
|
|
+ MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller);
|
|
}
|
|
diff --git a/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java b/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
|
|
index 86c34b22af..a79eef0a13 100644
|
|
--- a/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
|
|
+++ b/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
|
|
@@ -18,6 +18,8 @@
|
|
*/
|
|
package org.codehaus.groovy.vmplugin.v5;
|
|
|
|
+import groovy.lang.MetaClass;
|
|
+import groovy.lang.MetaMethod;
|
|
import org.codehaus.groovy.GroovyBugError;
|
|
import org.codehaus.groovy.ast.AnnotatedNode;
|
|
import org.codehaus.groovy.ast.AnnotationNode;
|
|
@@ -36,12 +38,14 @@ import org.codehaus.groovy.ast.expr.ListExpression;
|
|
import org.codehaus.groovy.ast.expr.PropertyExpression;
|
|
import org.codehaus.groovy.ast.stmt.ReturnStatement;
|
|
import org.codehaus.groovy.vmplugin.VMPlugin;
|
|
+import org.codehaus.groovy.vmplugin.VMPluginFactory;
|
|
|
|
import java.lang.annotation.Annotation;
|
|
import java.lang.annotation.ElementType;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.annotation.Target;
|
|
+import java.lang.reflect.AccessibleObject;
|
|
import java.lang.reflect.Array;
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.Field;
|
|
@@ -50,19 +54,21 @@ import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.MalformedParameterizedTypeException;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.ParameterizedType;
|
|
+import java.lang.reflect.ReflectPermission;
|
|
import java.lang.reflect.Type;
|
|
import java.lang.reflect.TypeVariable;
|
|
import java.lang.reflect.WildcardType;
|
|
+import java.security.Permission;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* java 5 based functions
|
|
- *
|
|
- * @author Jochen Theodorou
|
|
*/
|
|
public class Java5 implements VMPlugin {
|
|
- private static Class[] EMPTY_CLASS_ARRAY = new Class[0];
|
|
+ private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
|
|
private static final Class[] PLUGIN_DGM = {PluginDefaultGroovyMethods.class};
|
|
+ private static final Method[] EMPTY_METHOD_ARRAY = new Method[0];
|
|
+ private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
|
|
|
|
public void setAdditionalClassInformation(ClassNode cn) {
|
|
setGenericsTypes(cn);
|
|
@@ -84,15 +90,16 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
|
|
private GenericsType configureTypeVariableDefinition(TypeVariable tv) {
|
|
- ClassNode base = configureTypeVariableReference(tv);
|
|
+ return configureTypeVariableDefinition(configureTypeVariableReference(tv.getName()), configureTypes(tv.getBounds()));
|
|
+ }
|
|
+
|
|
+ public static GenericsType configureTypeVariableDefinition(ClassNode base, ClassNode[] cBounds) {
|
|
ClassNode redirect = base.redirect();
|
|
base.setRedirect(null);
|
|
- Type[] tBounds = tv.getBounds();
|
|
GenericsType gt;
|
|
- if (tBounds.length == 0) {
|
|
+ if (cBounds == null || cBounds.length == 0) {
|
|
gt = new GenericsType(base);
|
|
} else {
|
|
- ClassNode[] cBounds = configureTypes(tBounds);
|
|
gt = new GenericsType(base, cBounds, null);
|
|
gt.setName(base.getName());
|
|
gt.setPlaceholder(true);
|
|
@@ -118,7 +125,7 @@ public class Java5 implements VMPlugin {
|
|
} else if (type instanceof GenericArrayType) {
|
|
return configureGenericArray((GenericArrayType) type);
|
|
} else if (type instanceof TypeVariable) {
|
|
- return configureTypeVariableReference((TypeVariable) type);
|
|
+ return configureTypeVariableReference(((TypeVariable) type).getName());
|
|
} else if (type instanceof Class) {
|
|
return configureClass((Class) type);
|
|
} else if (type==null) {
|
|
@@ -168,10 +175,10 @@ public class Java5 implements VMPlugin {
|
|
return base;
|
|
}
|
|
|
|
- private ClassNode configureTypeVariableReference(TypeVariable tv) {
|
|
- ClassNode cn = ClassHelper.makeWithoutCaching(tv.getName());
|
|
+ public static ClassNode configureTypeVariableReference(String name) {
|
|
+ ClassNode cn = ClassHelper.makeWithoutCaching(name);
|
|
cn.setGenericsPlaceHolder(true);
|
|
- ClassNode cn2 = ClassHelper.makeWithoutCaching(tv.getName());
|
|
+ ClassNode cn2 = ClassHelper.makeWithoutCaching(name);
|
|
cn2.setGenericsPlaceHolder(true);
|
|
GenericsType[] gts = new GenericsType[]{new GenericsType(cn2)};
|
|
cn.setGenericsTypes(gts);
|
|
@@ -210,18 +217,22 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
}
|
|
|
|
- private void configureAnnotationFromDefinition(AnnotationNode definition, AnnotationNode root) {
|
|
+ @Deprecated
|
|
+ public void configureAnnotationFromDefinition(AnnotationNode definition, AnnotationNode root) {
|
|
+ VMPlugin plugin = VMPluginFactory.getPlugin();
|
|
+ plugin.configureAnnotationNodeFromDefinition(definition, root);
|
|
+ }
|
|
+
|
|
+ public void configureAnnotationNodeFromDefinition(AnnotationNode definition, AnnotationNode root) {
|
|
ClassNode type = definition.getClassNode();
|
|
- if (!type.isResolved()) return;
|
|
- Class clazz = type.getTypeClass();
|
|
- if (clazz == Retention.class) {
|
|
+ if ("java.lang.annotation.Retention".equals(type.getName())) {
|
|
Expression exp = definition.getMember("value");
|
|
if (!(exp instanceof PropertyExpression)) return;
|
|
PropertyExpression pe = (PropertyExpression) exp;
|
|
String name = pe.getPropertyAsString();
|
|
RetentionPolicy policy = RetentionPolicy.valueOf(name);
|
|
setRetentionPolicy(policy, root);
|
|
- } else if (clazz == Target.class) {
|
|
+ } else if ("java.lang.annotation.Target".equals(type.getName())) {
|
|
Expression exp = definition.getMember("value");
|
|
if (!(exp instanceof ListExpression)) return;
|
|
ListExpression le = (ListExpression) exp;
|
|
@@ -239,13 +250,12 @@ public class Java5 implements VMPlugin {
|
|
|
|
public void configureAnnotation(AnnotationNode node) {
|
|
ClassNode type = node.getClassNode();
|
|
+ VMPlugin plugin = VMPluginFactory.getPlugin();
|
|
List<AnnotationNode> annotations = type.getAnnotations();
|
|
for (AnnotationNode an : annotations) {
|
|
- configureAnnotationFromDefinition(an, node);
|
|
- }
|
|
- if (!"java.lang.annotation.Retention".equals(node.getClassNode().getName())) {
|
|
- configureAnnotationFromDefinition(node, node);
|
|
+ plugin.configureAnnotationNodeFromDefinition(an, node);
|
|
}
|
|
+ plugin.configureAnnotationNodeFromDefinition(node, node);
|
|
}
|
|
|
|
private void configureAnnotation(AnnotationNode node, Annotation annotation) {
|
|
@@ -271,7 +281,7 @@ public class Java5 implements VMPlugin {
|
|
try {
|
|
declaredMethods = type.getDeclaredMethods();
|
|
} catch (SecurityException se) {
|
|
- declaredMethods = new Method[0];
|
|
+ declaredMethods = EMPTY_METHOD_ARRAY;
|
|
}
|
|
for (Method declaredMethod : declaredMethods) {
|
|
try {
|
|
@@ -280,8 +290,7 @@ public class Java5 implements VMPlugin {
|
|
if (valueExpression == null)
|
|
continue;
|
|
node.setMember(declaredMethod.getName(), valueExpression);
|
|
- } catch (IllegalAccessException e) {
|
|
- } catch (InvocationTargetException e) {
|
|
+ } catch (IllegalAccessException | InvocationTargetException e) {
|
|
}
|
|
}
|
|
}
|
|
@@ -305,7 +314,7 @@ public class Java5 implements VMPlugin {
|
|
return null;
|
|
}
|
|
|
|
- private void setRetentionPolicy(RetentionPolicy value, AnnotationNode node) {
|
|
+ private static void setRetentionPolicy(RetentionPolicy value, AnnotationNode node) {
|
|
switch (value) {
|
|
case RUNTIME:
|
|
node.setRuntimeRetention(true);
|
|
@@ -321,7 +330,7 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
}
|
|
|
|
- private int getElementCode(ElementType value) {
|
|
+ protected int getElementCode(ElementType value) {
|
|
switch (value) {
|
|
case TYPE:
|
|
return AnnotationNode.TYPE_TARGET;
|
|
@@ -339,13 +348,11 @@ public class Java5 implements VMPlugin {
|
|
return AnnotationNode.ANNOTATION_TARGET;
|
|
case PACKAGE:
|
|
return AnnotationNode.PACKAGE_TARGET;
|
|
- default:
|
|
- if ("TYPE_USE".equals(value.name()) || "TYPE_PARAMETER".equals(value.name()) || "MODULE".equals(value.name())) {
|
|
- // return 0 value because we are binary or'ing this and want to ignore without failing
|
|
- // later version plugins will override and provide sensible values for jdk8+
|
|
- return 0;
|
|
- }
|
|
- throw new GroovyBugError("unsupported Target " + value);
|
|
+ }
|
|
+ if ("MODULE".equals(value.name())) {
|
|
+ return AnnotationNode.TYPE_TARGET;
|
|
+ } else {
|
|
+ throw new GroovyBugError("unsupported Target " + value);
|
|
}
|
|
}
|
|
|
|
@@ -370,7 +377,7 @@ public class Java5 implements VMPlugin {
|
|
Method[] methods = clazz.getDeclaredMethods();
|
|
for (Method m : methods) {
|
|
ClassNode ret = makeClassNode(compileUnit, m.getGenericReturnType(), m.getReturnType());
|
|
- Parameter[] params = makeParameters(compileUnit, m.getGenericParameterTypes(), m.getParameterTypes(), m.getParameterAnnotations());
|
|
+ Parameter[] params = processParameters(compileUnit, m);
|
|
ClassNode[] exceptions = makeClassNodes(compileUnit, m.getGenericExceptionTypes(), m.getExceptionTypes());
|
|
MethodNode mn = new MethodNode(m.getName(), m.getModifiers(), ret, params, exceptions, null);
|
|
mn.setSynthetic(m.isSynthetic());
|
|
@@ -381,12 +388,15 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
Constructor[] constructors = clazz.getDeclaredConstructors();
|
|
for (Constructor ctor : constructors) {
|
|
- Parameter[] params = makeParameters(
|
|
- compileUnit,
|
|
- ctor.getGenericParameterTypes(),
|
|
- ctor.getParameterTypes(),
|
|
- getConstructorParameterAnnotations(ctor)
|
|
- );
|
|
+ Type[] types = ctor.getGenericParameterTypes();
|
|
+ Parameter[] params1 = Parameter.EMPTY_ARRAY;
|
|
+ if (types.length > 0) {
|
|
+ params1 = new Parameter[types.length];
|
|
+ for (int i = 0; i < params1.length; i++) {
|
|
+ params1[i] = makeParameter(compileUnit, types[i], ctor.getParameterTypes()[i], getConstructorParameterAnnotations(ctor)[i], "param" + i);
|
|
+ }
|
|
+ }
|
|
+ Parameter[] params = params1;
|
|
ClassNode[] exceptions = makeClassNodes(compileUnit, ctor.getGenericExceptionTypes(), ctor.getExceptionTypes());
|
|
classNode.addConstructor(ctor.getModifiers(), params, exceptions, null);
|
|
}
|
|
@@ -407,6 +417,18 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
}
|
|
|
|
+ protected Parameter[] processParameters(CompileUnit compileUnit, Method m) {
|
|
+ Type[] types = m.getGenericParameterTypes();
|
|
+ Parameter[] params = Parameter.EMPTY_ARRAY;
|
|
+ if (types.length > 0) {
|
|
+ params = new Parameter[types.length];
|
|
+ for (int i = 0; i < params.length; i++) {
|
|
+ params[i] = makeParameter(compileUnit, types[i], m.getParameterTypes()[i], m.getParameterAnnotations()[i], "param" + i);
|
|
+ }
|
|
+ }
|
|
+ return params;
|
|
+ }
|
|
+
|
|
/**
|
|
* Synthetic parameters such as those added for inner class constructors may
|
|
* not be included in the parameter annotations array. This is the case when
|
|
@@ -444,7 +466,7 @@ public class Java5 implements VMPlugin {
|
|
}
|
|
Annotation[][] adjusted = new Annotation[parameterCount][];
|
|
for (int i = 0; i < diff; i++) {
|
|
- adjusted[i] = new Annotation[0];
|
|
+ adjusted[i] = EMPTY_ANNOTATION_ARRAY;
|
|
}
|
|
System.arraycopy(annotations, 0, adjusted, diff, annotations.length);
|
|
return adjusted;
|
|
@@ -495,20 +517,9 @@ public class Java5 implements VMPlugin {
|
|
return back.getPlainNodeReference();
|
|
}
|
|
|
|
- private Parameter[] makeParameters(CompileUnit cu, Type[] types, Class[] cls, Annotation[][] parameterAnnotations) {
|
|
- Parameter[] params = Parameter.EMPTY_ARRAY;
|
|
- if (types.length > 0) {
|
|
- params = new Parameter[types.length];
|
|
- for (int i = 0; i < params.length; i++) {
|
|
- params[i] = makeParameter(cu, types[i], cls[i], parameterAnnotations[i], i);
|
|
- }
|
|
- }
|
|
- return params;
|
|
- }
|
|
-
|
|
- private Parameter makeParameter(CompileUnit cu, Type type, Class cl, Annotation[] annotations, int idx) {
|
|
+ protected Parameter makeParameter(CompileUnit cu, Type type, Class cl, Annotation[] annotations, String name) {
|
|
ClassNode cn = makeClassNode(cu, type, cl);
|
|
- Parameter parameter = new Parameter(cn, "param" + idx);
|
|
+ Parameter parameter = new Parameter(cn, name);
|
|
setAnnotationMetaData(annotations, parameter);
|
|
return parameter;
|
|
}
|
|
@@ -529,5 +540,55 @@ public class Java5 implements VMPlugin {
|
|
public Object invokeHandle(Object handle, Object[] args) throws Throwable {
|
|
throw new GroovyBugError("invokeHandle requires at least JDK 7");
|
|
}
|
|
+
|
|
+ /**
|
|
+ * The following scenarios can not set accessible, i.e. the return value is false
|
|
+ * 1) SecurityException occurred
|
|
+ * 2) the accessible object is a Constructor object for the Class class
|
|
+ *
|
|
+ * @param accessibleObject the accessible object to check
|
|
+ * @param caller the caller to invoke {@code setAccessible}
|
|
+ * @return the check result
|
|
+ */
|
|
+ @Override
|
|
+ public boolean checkCanSetAccessible(AccessibleObject accessibleObject,
|
|
+ Class<?> caller) {
|
|
+ SecurityManager sm = System.getSecurityManager();
|
|
+ try {
|
|
+ if (sm != null) {
|
|
+ sm.checkPermission(ACCESS_PERMISSION);
|
|
+ }
|
|
+ } catch (SecurityException e) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ if (accessibleObject instanceof Constructor) {
|
|
+ Constructor c = (Constructor) accessibleObject;
|
|
+ if (c.getDeclaringClass() == Class.class) {
|
|
+ return false; // Cannot make a java.lang.Class constructor accessible
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean trySetAccessible(AccessibleObject ao) {
|
|
+ try {
|
|
+ ao.setAccessible(true);
|
|
+ return true;
|
|
+ } catch (SecurityException e) {
|
|
+ throw e;
|
|
+ } catch (Throwable t) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ private static final Permission ACCESS_PERMISSION = new ReflectPermission("suppressAccessChecks");
|
|
}
|
|
|
|
diff --git a/src/main/org/codehaus/groovy/vmplugin/v7/Java7.java b/src/main/org/codehaus/groovy/vmplugin/v7/Java7.java
|
|
index 93165b1d6e..dbcd111446 100644
|
|
--- a/src/main/org/codehaus/groovy/vmplugin/v7/Java7.java
|
|
+++ b/src/main/org/codehaus/groovy/vmplugin/v7/Java7.java
|
|
@@ -19,6 +19,7 @@
|
|
package org.codehaus.groovy.vmplugin.v7;
|
|
|
|
import org.codehaus.groovy.GroovyBugError;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
import org.codehaus.groovy.vmplugin.v6.Java6;
|
|
|
|
import java.lang.invoke.MethodHandle;
|
|
@@ -29,40 +30,44 @@ import java.security.AccessController;
|
|
import java.security.PrivilegedAction;
|
|
|
|
/**
|
|
- * Java 7 based functions. Currently just a stub but you can
|
|
- * add your own methods to your own version and place it on the classpath
|
|
- * ahead of this one.
|
|
+ * Java 7 based functions.
|
|
*
|
|
- * @author Jochen Theodorou
|
|
+ * For crude customization, you can add your own methods to your own version and place it on the classpath ahead of this one.
|
|
*/
|
|
public class Java7 extends Java6 {
|
|
- private static final Constructor<MethodHandles.Lookup> LOOKUP_Constructor;
|
|
- static {
|
|
- Constructor<MethodHandles.Lookup> con = null;
|
|
- try {
|
|
- con = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class);
|
|
- } catch (NoSuchMethodException e) {
|
|
- throw new GroovyBugError(e);
|
|
- }
|
|
- try {
|
|
- if (!con.isAccessible()) {
|
|
- final Constructor tmp = con;
|
|
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
- @Override
|
|
- public Object run() {
|
|
- tmp.setAccessible(true);
|
|
- return null;
|
|
- }
|
|
- });
|
|
+ private static class LookupHolder {
|
|
+ private static final Constructor<MethodHandles.Lookup> LOOKUP_Constructor;
|
|
+ static {
|
|
+ Constructor<MethodHandles.Lookup> con = null;
|
|
+ try {
|
|
+ con = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class);
|
|
+ } catch (NoSuchMethodException e) {
|
|
+ throw new GroovyBugError(e);
|
|
}
|
|
- } catch (SecurityException se) {
|
|
- con = null;
|
|
- } catch (RuntimeException re) {
|
|
- // test for JDK9 JIGSAW
|
|
- if (!"java.lang.reflect.InaccessibleObjectException".equals(re.getClass().getName())) throw re;
|
|
- con = null;
|
|
+ try {
|
|
+ if (!con.isAccessible()) {
|
|
+ final Constructor tmp = con;
|
|
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
|
+ @Override
|
|
+ public Object run() {
|
|
+ ReflectionUtils.trySetAccessible(tmp);
|
|
+ return null;
|
|
+ }
|
|
+ });
|
|
+ }
|
|
+ } catch (SecurityException se) {
|
|
+ con = null;
|
|
+ } catch (RuntimeException re) {
|
|
+ // test for JDK9 JIGSAW
|
|
+ if (!"java.lang.reflect.InaccessibleObjectException".equals(re.getClass().getName())) throw re;
|
|
+ con = null;
|
|
+ }
|
|
+ LOOKUP_Constructor = con;
|
|
}
|
|
- LOOKUP_Constructor = con;
|
|
+ }
|
|
+
|
|
+ private static Constructor<MethodHandles.Lookup> getLookupConstructor() {
|
|
+ return LookupHolder.LOOKUP_Constructor;
|
|
}
|
|
|
|
@Override
|
|
@@ -77,22 +82,21 @@ public class Java7 extends Java6 {
|
|
|
|
@Override
|
|
public Object getInvokeSpecialHandle(final Method method, final Object receiver) {
|
|
- if (LOOKUP_Constructor==null) {
|
|
+ if (getLookupConstructor() == null) {
|
|
return super.getInvokeSpecialHandle(method, receiver);
|
|
}
|
|
if (!method.isAccessible()) {
|
|
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
|
@Override
|
|
public Object run() {
|
|
- method.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(method);
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
Class declaringClass = method.getDeclaringClass();
|
|
try {
|
|
- return LOOKUP_Constructor.
|
|
- newInstance(declaringClass, MethodHandles.Lookup.PRIVATE).
|
|
+ return getLookupConstructor().newInstance(declaringClass, -1).
|
|
unreflectSpecial(method, declaringClass).
|
|
bindTo(receiver);
|
|
} catch (ReflectiveOperationException e) {
|
|
diff --git a/src/main/org/codehaus/groovy/vmplugin/v7/Selector.java b/src/main/org/codehaus/groovy/vmplugin/v7/Selector.java
|
|
index a8f9b464e9..c0e9ca37cc 100644
|
|
--- a/src/main/org/codehaus/groovy/vmplugin/v7/Selector.java
|
|
+++ b/src/main/org/codehaus/groovy/vmplugin/v7/Selector.java
|
|
@@ -325,7 +325,7 @@ public abstract class Selector {
|
|
insertName = true;
|
|
} else if (res instanceof CachedField) {
|
|
CachedField cf = (CachedField) res;
|
|
- Field f = cf.field;
|
|
+ Field f = cf.getCachedField();
|
|
try {
|
|
handle = LOOKUP.unreflectGetter(f);
|
|
if (Modifier.isStatic(f.getModifiers())) {
|
|
@@ -424,7 +424,7 @@ public abstract class Selector {
|
|
if (LOG_ENABLED) LOG.info("meta method is MetaConstructor instance");
|
|
MetaConstructor mc = (MetaConstructor) method;
|
|
isVargs = mc.isVargsMethod();
|
|
- Constructor con = mc.getCachedConstrcutor().cachedConstructor;
|
|
+ Constructor con = mc.getCachedConstrcutor().getCachedConstructor();
|
|
try {
|
|
handle = LOOKUP.unreflectConstructor(con);
|
|
if (LOG_ENABLED) LOG.info("successfully unreflected constructor");
|
|
diff --git a/src/main/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/org/codehaus/groovy/vmplugin/v9/Java9.java
|
|
new file mode 100644
|
|
index 0000000000..eb3f760c1f
|
|
--- /dev/null
|
|
+++ b/src/main/org/codehaus/groovy/vmplugin/v9/Java9.java
|
|
@@ -0,0 +1,253 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.vmplugin.v9;
|
|
+
|
|
+import groovy.lang.MetaClass;
|
|
+import groovy.lang.MetaMethod;
|
|
+import org.codehaus.groovy.GroovyBugError;
|
|
+import org.codehaus.groovy.reflection.CachedClass;
|
|
+import org.codehaus.groovy.reflection.CachedMethod;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
+import org.codehaus.groovy.vmplugin.v5.Java5;
|
|
+import org.codehaus.groovy.vmplugin.v8.Java8;
|
|
+
|
|
+import java.lang.invoke.MethodHandle;
|
|
+import java.lang.invoke.MethodHandles;
|
|
+import java.lang.reflect.AccessibleObject;
|
|
+import java.lang.reflect.Constructor;
|
|
+import java.lang.reflect.Executable;
|
|
+import java.lang.reflect.Field;
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
+import java.lang.reflect.Member;
|
|
+import java.lang.reflect.Method;
|
|
+import java.lang.reflect.Modifier;
|
|
+import java.util.Optional;
|
|
+
|
|
+/**
|
|
+ * Additional Java 9 based functions will be added here as needed.
|
|
+ */
|
|
+public class Java9 extends Java8 {
|
|
+
|
|
+ private static class LookupHolder {
|
|
+ private static final Method PRIVATE_LOOKUP;
|
|
+ private static final Constructor<MethodHandles.Lookup> LOOKUP_Constructor;
|
|
+ static {
|
|
+ Constructor<MethodHandles.Lookup> lookup = null;
|
|
+ Method privateLookup = null;
|
|
+ try { // java 9
|
|
+ privateLookup = MethodHandles.class.getMethod("privateLookupIn", Class.class, MethodHandles.Lookup.class);
|
|
+ } catch (final NoSuchMethodException | RuntimeException e) { // java 8 or fallback if anything else goes wrong
|
|
+ try {
|
|
+ lookup = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, Integer.TYPE);
|
|
+ if (!lookup.isAccessible()) {
|
|
+ ReflectionUtils.trySetAccessible(lookup);
|
|
+ }
|
|
+ } catch (final NoSuchMethodException ex) {
|
|
+ throw new IllegalStateException("Incompatible JVM", e);
|
|
+ }
|
|
+ }
|
|
+ PRIVATE_LOOKUP = privateLookup;
|
|
+ LOOKUP_Constructor = lookup;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static Constructor<MethodHandles.Lookup> getLookupConstructor() {
|
|
+ return LookupHolder.LOOKUP_Constructor;
|
|
+ }
|
|
+
|
|
+ private static Method getPrivateLookup() {
|
|
+ return LookupHolder.PRIVATE_LOOKUP;
|
|
+ }
|
|
+
|
|
+ public static MethodHandles.Lookup of(final Class<?> declaringClass) {
|
|
+ try {
|
|
+ if (getPrivateLookup() != null) {
|
|
+ return MethodHandles.Lookup.class.cast(getPrivateLookup().invoke(null, declaringClass, MethodHandles.lookup()));
|
|
+ }
|
|
+ return getLookupConstructor().newInstance(declaringClass, MethodHandles.Lookup.PRIVATE).in(declaringClass);
|
|
+ } catch (final IllegalAccessException | InstantiationException e) {
|
|
+ throw new IllegalArgumentException(e);
|
|
+ } catch (final InvocationTargetException e) {
|
|
+ throw new RuntimeException(e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getVersion() {
|
|
+ return 9;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Object getInvokeSpecialHandle(Method method, Object receiver) {
|
|
+ if (getLookupConstructor() != null) {
|
|
+ Class declaringClass = method.getDeclaringClass();
|
|
+ try {
|
|
+ return of(declaringClass).unreflectSpecial(method, receiver.getClass()).bindTo(receiver);
|
|
+ } catch (ReflectiveOperationException e) {
|
|
+ throw new GroovyBugError(e);
|
|
+ }
|
|
+ }
|
|
+ return super.getInvokeSpecialHandle(method, receiver);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * This method may be used by a caller in class C to check whether to enable access to a member of declaring class D successfully
|
|
+ * if {@link Java5#checkCanSetAccessible(java.lang.reflect.AccessibleObject, java.lang.Class)} returns true and any of the following hold:
|
|
+ *
|
|
+ * 1) C and D are in the same module.
|
|
+ * 2) The member is public and D is public in a package that the module containing D exports to at least the module containing C.
|
|
+ * 3) The member is protected static, D is public in a package that the module containing D exports to at least the module containing C, and C is a subclass of D.
|
|
+ * 4) D is in a package that the module containing D opens to at least the module containing C. All packages in unnamed and open modules are open to all modules and so this method always succeeds when D is in an unnamed or open module.
|
|
+ *
|
|
+ * @param accessibleObject the accessible object to check
|
|
+ * @param caller the caller to invoke {@code setAccessible}
|
|
+ * @return the check result
|
|
+ */
|
|
+ public boolean checkCanSetAccessible(AccessibleObject accessibleObject,
|
|
+ Class<?> caller) {
|
|
+
|
|
+ if (!super.checkCanSetAccessible(accessibleObject, caller)) return false;
|
|
+
|
|
+ if (caller == MethodHandle.class) {
|
|
+ throw new IllegalCallerException(); // should not happen
|
|
+ }
|
|
+
|
|
+ if (!(accessibleObject instanceof Member)) {
|
|
+ throw new IllegalArgumentException("accessibleObject should be a member of type: " + accessibleObject); // should not happen
|
|
+ }
|
|
+
|
|
+ Class<?> declaringClass = ((Member) accessibleObject).getDeclaringClass();
|
|
+
|
|
+ Module callerModule = caller.getModule();
|
|
+ Module declaringModule = declaringClass.getModule();
|
|
+
|
|
+ if (callerModule == declaringModule) return true;
|
|
+ if (callerModule == Object.class.getModule()) return true;
|
|
+ if (!declaringModule.isNamed()) return true;
|
|
+
|
|
+ int modifiers;
|
|
+ if (accessibleObject instanceof Executable) {
|
|
+ modifiers = ((Executable) accessibleObject).getModifiers();
|
|
+ } else {
|
|
+ modifiers = ((Field) accessibleObject).getModifiers();
|
|
+ }
|
|
+
|
|
+ return checkAccessible(caller, declaringClass, modifiers, true);
|
|
+ }
|
|
+
|
|
+
|
|
+ @Override
|
|
+ public boolean trySetAccessible(AccessibleObject ao) {
|
|
+ return ao.trySetAccessible();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
|
|
+ if (!(metaMethod instanceof CachedMethod)) {
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ CachedMethod cachedMethod = (CachedMethod) metaMethod;
|
|
+ CachedClass methodDeclaringClass = cachedMethod.getDeclaringClass();
|
|
+
|
|
+ if (null == methodDeclaringClass) {
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ Class<?> declaringClass = methodDeclaringClass.getTheClass();
|
|
+ Class theClass = metaClass.getTheClass();
|
|
+
|
|
+ if (declaringClass == theClass) {
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ int modifiers = cachedMethod.getModifiers();
|
|
+
|
|
+ // if caller can access the method,
|
|
+ // no need to transform the meta method
|
|
+ if (checkAccessible(caller, declaringClass, modifiers, false)) {
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ // if caller can not access the method,
|
|
+ // try to find the corresponding method in its derived class
|
|
+ if (declaringClass.isAssignableFrom(theClass)) {
|
|
+ Optional<Method> optionalMethod = ReflectionUtils.getMethod(theClass, metaMethod.getName(), params);
|
|
+ if (optionalMethod.isPresent()) {
|
|
+ return new CachedMethod(optionalMethod.get());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return metaMethod;
|
|
+ }
|
|
+
|
|
+ private static boolean checkAccessible(Class<?> caller, Class<?> declaringClass, int modifiers, boolean allowIllegalAccess) {
|
|
+ Module callerModule = caller.getModule();
|
|
+ Module declaringModule = declaringClass.getModule();
|
|
+ String pn = declaringClass.getPackageName();
|
|
+
|
|
+ boolean unnamedModuleAccessNamedModule = !callerModule.isNamed() && declaringModule.isNamed();
|
|
+ boolean illegalAccess = !allowIllegalAccess && unnamedModuleAccessNamedModule;
|
|
+
|
|
+ // class is public and package is exported to caller
|
|
+ boolean isClassPublic = Modifier.isPublic(declaringClass.getModifiers());
|
|
+ if (isClassPublic && declaringModule.isExported(pn, callerModule)) {
|
|
+ // member is public
|
|
+ if (Modifier.isPublic(modifiers)) {
|
|
+ if (illegalAccess) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ // member is protected-static
|
|
+ if (Modifier.isProtected(modifiers)
|
|
+ && Modifier.isStatic(modifiers)
|
|
+ && isSubclassOf(caller, declaringClass)) {
|
|
+ if (illegalAccess) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // package is open to caller
|
|
+ if (declaringModule.isOpen(pn, callerModule)) {
|
|
+ if (illegalAccess) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ private static boolean isSubclassOf(Class<?> queryClass, Class<?> ofClass) {
|
|
+ while (queryClass != null) {
|
|
+ if (queryClass == ofClass) {
|
|
+ return true;
|
|
+ }
|
|
+ queryClass = queryClass.getSuperclass();
|
|
+ }
|
|
+ return false;
|
|
+ }
|
|
+}
|
|
diff --git a/src/test/groovy/bugs/Groovy8339Bug.groovy b/src/test/groovy/bugs/Groovy8339Bug.groovy
|
|
new file mode 100644
|
|
index 0000000000..5fa94f5339
|
|
--- /dev/null
|
|
+++ b/src/test/groovy/bugs/Groovy8339Bug.groovy
|
|
@@ -0,0 +1,27 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package groovy.bugs
|
|
+
|
|
+// TODO add JVM option `--illegal-access=deny` when all warnings fixed
|
|
+class Groovy8339Bug extends GroovyTestCase {
|
|
+ void testCase2() {
|
|
+ StringBuilder sb = new StringBuilder()
|
|
+ sb.setLength(0)
|
|
+ }
|
|
+}
|
|
diff --git a/src/test/org/codehaus/groovy/reflection/SecurityTest.java b/src/test/org/codehaus/groovy/reflection/SecurityTest.java
|
|
new file mode 100644
|
|
index 0000000000..229865e91e
|
|
--- /dev/null
|
|
+++ b/src/test/org/codehaus/groovy/reflection/SecurityTest.java
|
|
@@ -0,0 +1,278 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+package org.codehaus.groovy.reflection;
|
|
+
|
|
+import groovy.lang.GroovyObjectSupport;
|
|
+import groovy.util.GroovyTestCase;
|
|
+import org.codehaus.groovy.runtime.InvokerInvocationException;
|
|
+import java.lang.reflect.Field;
|
|
+import java.lang.reflect.Method;
|
|
+import java.lang.reflect.ReflectPermission;
|
|
+import java.math.BigDecimal;
|
|
+import java.nio.ByteBuffer;
|
|
+import java.security.AccessControlException;
|
|
+import java.security.Permission;
|
|
+import java.security.Permissions;
|
|
+import java.security.ProtectionDomain;
|
|
+
|
|
+import static groovy.test.GroovyAssert.isAtLeastJdk;
|
|
+
|
|
+public class SecurityTest extends GroovyTestCase {
|
|
+
|
|
+ @SuppressWarnings("unused")
|
|
+ public class TestClass{
|
|
+ public String publicField;
|
|
+ protected String protectedField;
|
|
+ String packagePrivateField;
|
|
+ private String privateField;
|
|
+
|
|
+ private boolean methodCalled = false;
|
|
+
|
|
+ public void publicMethod() {
|
|
+ privateMethod();
|
|
+ }
|
|
+
|
|
+ private void privateMethod() {
|
|
+ methodCalled = true;
|
|
+ }
|
|
+
|
|
+ void packagePrivateMethod() {
|
|
+ privateMethod();
|
|
+ }
|
|
+
|
|
+ void protectedMethod() {
|
|
+ privateMethod();
|
|
+ }
|
|
+
|
|
+ public boolean isMethodCalled() {
|
|
+ return methodCalled;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @SuppressWarnings("unused")
|
|
+ public class TestGroovyClass extends GroovyObjectSupport{
|
|
+ private String privateField;
|
|
+ private boolean methodCalled = false;
|
|
+ private void privateMethod() {
|
|
+ methodCalled = true;
|
|
+ }
|
|
+ public boolean isMethodCalled() {
|
|
+ return methodCalled;
|
|
+ }
|
|
+ }
|
|
+ SecurityManager restrictiveSecurityManager;
|
|
+ CachedMethod cachedMethodUnderTest;
|
|
+ CachedField cachedFieldUnderTest;
|
|
+ Permissions forbidden;
|
|
+
|
|
+ public void setUp() {
|
|
+ forbidden = new Permissions();
|
|
+ forbidden.add(new ReflectPermission("suppressAccessChecks"));
|
|
+ restrictiveSecurityManager = new SecurityManager() {
|
|
+
|
|
+ @Override
|
|
+ public void checkPermission(Permission perm) {
|
|
+ if (forbidden.implies(perm))
|
|
+ throw new AccessControlException(perm.getName());
|
|
+ }
|
|
+ };
|
|
+ }
|
|
+
|
|
+ public void tearDown(){
|
|
+ System.setSecurityManager(null);
|
|
+ }
|
|
+
|
|
+ private CachedMethod createCachedMethod(String name) throws Exception {
|
|
+ return createCachedMethod(TestClass.class, name);
|
|
+ }
|
|
+
|
|
+ private CachedMethod createCachedMethod(Class<?> cachedClass, String methodName, Class... parameters) throws NoSuchMethodException {
|
|
+ Method method = cachedClass.getDeclaredMethod(methodName, parameters);
|
|
+ method.setAccessible(true);
|
|
+ return new CachedMethod(null, method);
|
|
+ }
|
|
+
|
|
+ private boolean invokesCachedMethod() {
|
|
+ TestClass object = new TestClass();
|
|
+ cachedMethodUnderTest.invoke(object, new Object[]{});
|
|
+ return object.isMethodCalled();
|
|
+ }
|
|
+
|
|
+ private CachedField createCachedField(String name) throws Exception {
|
|
+ Field field = TestClass.class.getDeclaredField(name);
|
|
+ field.setAccessible(true);
|
|
+ return new CachedField(field);
|
|
+ }
|
|
+
|
|
+ public void testInvokesPublicMethodsWithoutChecks() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("publicMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ assertTrue(invokesCachedMethod());
|
|
+ }
|
|
+
|
|
+ public void testReturnsAccesiblePublicMethodsWithoutChecks() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("publicMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ assertEquals("publicMethod", cachedMethodUnderTest.setAccessible().getName());
|
|
+ assertEquals("publicMethod", cachedMethodUnderTest.getName());
|
|
+ }
|
|
+
|
|
+ public void testAccessesPublicFieldsWithoutChecks() throws Exception {
|
|
+ cachedFieldUnderTest = createCachedField("publicField");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ TestClass object = new TestClass();
|
|
+ cachedFieldUnderTest.setProperty(object, "value");
|
|
+ assertEquals("value", cachedFieldUnderTest.getProperty(object));
|
|
+ }
|
|
+
|
|
+ public void testInvokesPrivateMethodsWithoutSecurityManager() throws Exception{
|
|
+ cachedMethodUnderTest = createCachedMethod("privateMethod");
|
|
+ assertTrue(invokesCachedMethod());
|
|
+ }
|
|
+
|
|
+ public void testAccessesPrivateFieldsWithoutSecurityManager() throws Exception {
|
|
+ cachedFieldUnderTest = createCachedField("privateField");
|
|
+ System.setSecurityManager(null);
|
|
+ TestClass object = new TestClass();
|
|
+ cachedFieldUnderTest.setProperty(object, "value");
|
|
+ assertEquals("value", cachedFieldUnderTest.getProperty(object));
|
|
+ }
|
|
+
|
|
+ public void testReturnsAccesiblePrivateMethodsWithoutSecurityManager() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("privateMethod");
|
|
+ System.setSecurityManager(null);
|
|
+ assertEquals("privateMethod", cachedMethodUnderTest.setAccessible().getName());
|
|
+ assertEquals("privateMethod", cachedMethodUnderTest.getName());
|
|
+ }
|
|
+
|
|
+ public void testChecksReflectPermissionForInvokeOnPrivateMethods() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("privateMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ try {
|
|
+ invokesCachedMethod();
|
|
+ fail();
|
|
+ }
|
|
+ catch (InvokerInvocationException e) {
|
|
+ assertEquals(CacheAccessControlException.class, e.getCause().getClass());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void testChecksReflectPermissionForFieldAccessOnPrivateFields() throws Exception {
|
|
+ cachedFieldUnderTest = createCachedField("privateField");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ TestClass object = new TestClass();
|
|
+ try {
|
|
+ cachedFieldUnderTest.setProperty(object, "value");
|
|
+ fail();
|
|
+ }
|
|
+ catch (CacheAccessControlException e) {
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ cachedFieldUnderTest.getProperty(object);
|
|
+ fail();
|
|
+ }
|
|
+ catch (CacheAccessControlException e) {
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void testChecksReflectPermissionForMethodAccessOnPrivateMethods() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("privateMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ try {
|
|
+ cachedMethodUnderTest.setAccessible();
|
|
+ fail();
|
|
+ }
|
|
+ catch (CacheAccessControlException e) {
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ cachedMethodUnderTest.getCachedMethod();
|
|
+ fail();
|
|
+ }
|
|
+ catch (CacheAccessControlException e) {
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void testInvokesPackagePrivateMethodsWithoutChecksInNonRestrictedPackages() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("packagePrivateMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ assertTrue(invokesCachedMethod());
|
|
+ }
|
|
+
|
|
+ public void testChecksReflectPermissionForInvokeOnPackagePrivateMethodsInRestrictedJavaPackages() throws Exception {
|
|
+ // FIX_JDK9 remove this exemption for JDK9
|
|
+ if (isAtLeastJdk("9.0")) {
|
|
+ return;
|
|
+ }
|
|
+ cachedMethodUnderTest = createCachedMethod(ClassLoader.class, "getBootstrapClassPath", new Class[0]);
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+
|
|
+ try {
|
|
+ cachedMethodUnderTest.invoke(null, new Object[]{});
|
|
+ fail();
|
|
+ }
|
|
+ catch (InvokerInvocationException e) {
|
|
+ assertEquals(CacheAccessControlException.class, e.getCause().getClass());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void testInvokesProtectedMethodsWithoutChecks() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod("protectedMethod");
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ assertTrue(invokesCachedMethod());
|
|
+ }
|
|
+
|
|
+
|
|
+ public void testChecksCreateClassLoaderPermissionForClassLoaderProtectedMethodAccess() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod(ClassLoader.class, "defineClass", new Class[]{String.class, ByteBuffer.class, ProtectionDomain.class});
|
|
+ forbidden = new Permissions();
|
|
+ forbidden.add(new RuntimePermission("createClassLoader"));
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+
|
|
+ ClassLoader classLoader = getClass().getClassLoader();
|
|
+
|
|
+ try {
|
|
+ cachedMethodUnderTest.invoke(classLoader, new Object[]{null, null, null});
|
|
+ fail();
|
|
+ }
|
|
+ catch (InvokerInvocationException e) {
|
|
+ assertEquals(CacheAccessControlException.class, e.getCause().getClass());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void testInvokesPrivateMethodsInGroovyObjectsWithoutChecks() throws Exception {
|
|
+ cachedMethodUnderTest = createCachedMethod(TestGroovyClass.class, "privateMethod");
|
|
+ TestGroovyClass object = new TestGroovyClass();
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ cachedMethodUnderTest.invoke(object, new Object[]{});
|
|
+ assertTrue(object.isMethodCalled());
|
|
+ }
|
|
+
|
|
+ public void testAccessesPrivateFieldsInGroovyObjectsWithoutChecks() throws Exception {
|
|
+ Field field = TestGroovyClass.class.getDeclaredField("privateField");
|
|
+ field.setAccessible(true);
|
|
+ cachedFieldUnderTest = new CachedField(field);
|
|
+ TestGroovyClass object = new TestGroovyClass();
|
|
+ System.setSecurityManager(restrictiveSecurityManager);
|
|
+ cachedFieldUnderTest.setProperty(object, "value");
|
|
+ assertEquals("value", cachedFieldUnderTest.getProperty(object));
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java b/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
|
|
index 92961e4648..a4e04a79e0 100644
|
|
--- a/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
|
|
+++ b/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
|
|
@@ -35,6 +35,7 @@ import org.apache.tools.ant.dispatch.DispatchUtils;
|
|
import org.apache.tools.ant.helper.AntXMLContext;
|
|
import org.apache.tools.ant.helper.ProjectHelper2;
|
|
import org.codehaus.groovy.ant.FileScanner;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
import org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport;
|
|
import org.xml.sax.Attributes;
|
|
import org.xml.sax.Locator;
|
|
@@ -325,7 +326,7 @@ public class AntBuilder extends BuilderSupport {
|
|
try {
|
|
// Have to call fireTestStared/fireTestFinished via reflection as they unfortunately have protected access in Project
|
|
final Method fireTaskStarted = Project.class.getDeclaredMethod("fireTaskStarted", Task.class);
|
|
- fireTaskStarted.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(fireTaskStarted);
|
|
fireTaskStarted.invoke(project, task);
|
|
|
|
Object realThing;
|
|
@@ -359,7 +360,7 @@ public class AntBuilder extends BuilderSupport {
|
|
finally {
|
|
try {
|
|
final Method fireTaskFinished = Project.class.getDeclaredMethod("fireTaskFinished", Task.class, Throwable.class);
|
|
- fireTaskFinished.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(fireTaskFinished);
|
|
fireTaskFinished.invoke(project, task, reason);
|
|
}
|
|
catch (Exception e) {
|
|
diff --git a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
|
|
index aae992b8ba..48fd137328 100644
|
|
--- a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
|
|
+++ b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
|
|
@@ -35,6 +35,7 @@ import org.apache.tools.ant.util.FileUtils;
|
|
import org.codehaus.groovy.control.CompilationFailedException;
|
|
import org.codehaus.groovy.control.CompilerConfiguration;
|
|
import org.codehaus.groovy.control.customizers.ImportCustomizer;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
import org.codehaus.groovy.runtime.InvokerHelper;
|
|
import org.codehaus.groovy.runtime.ResourceGroovyMethods;
|
|
import org.codehaus.groovy.tools.ErrorReporter;
|
|
@@ -413,7 +414,7 @@ public class Groovy extends Java {
|
|
try {
|
|
final Object propsHandler = project.getClass().getMethod("getPropsHandler").invoke(project);
|
|
final Field contextField = propsHandler.getClass().getDeclaredField("context");
|
|
- contextField.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(contextField);
|
|
final Object context = contextField.get(propsHandler);
|
|
mavenPom = InvokerHelper.invokeMethod(context, "getProject", EMPTY_OBJECT_ARRAY);
|
|
}
|
|
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
|
|
index 73f9f7d32a..3b537343a3 100644
|
|
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
|
|
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
|
|
@@ -163,12 +163,14 @@ def filterClassName(Path path) {
|
|
}
|
|
}
|
|
|
|
+class GroovyFileVisitor extends SimpleFileVisitor {}
|
|
+
|
|
// walk each file and directory, possibly storing directories as packages, and files as classes
|
|
Files.walkFileTree(fs.getPath('modules'),
|
|
[preVisitDirectory: { dir, attrs -> filterPackageName(dir); FileVisitResult.CONTINUE },
|
|
visitFile: { file, attrs -> filterClassName(file); FileVisitResult.CONTINUE}
|
|
]
|
|
- as SimpleFileVisitor)
|
|
+ as GroovyFileVisitor)
|
|
'''
|
|
|
|
Set<String> jigsawPackages = (Set<String>) shell.getProperty('result')
|
|
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
|
|
index 8a0fecb2ec..7a08f753d7 100644
|
|
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
|
|
+++ b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
|
|
@@ -21,6 +21,7 @@ package org.codehaus.groovy.binding;
|
|
import groovy.lang.Closure;
|
|
import groovy.lang.GroovyObjectSupport;
|
|
import groovy.lang.Reference;
|
|
+import org.codehaus.groovy.reflection.ReflectionUtils;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.Field;
|
|
@@ -81,13 +82,13 @@ public class ClosureTriggerBinding implements TriggerBinding, SourceBinding {
|
|
}
|
|
try {
|
|
boolean acc = constructor.isAccessible();
|
|
- constructor.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(constructor);
|
|
Closure localCopy = (Closure) constructor.newInstance(args);
|
|
if (!acc) { constructor.setAccessible(false); }
|
|
localCopy.setResolveStrategy(Closure.DELEGATE_ONLY);
|
|
for (Field f:closureClass.getDeclaredFields()) {
|
|
acc = f.isAccessible();
|
|
- f.setAccessible(true);
|
|
+ ReflectionUtils.trySetAccessible(f);
|
|
if (f.getType() == Reference.class) {
|
|
delegate.fields.put(f.getName(),
|
|
(BindPathSnooper) ((Reference) f.get(localCopy)).get());
|
|
diff --git a/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy b/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy
|
|
index f17a37ba5c..39135b8f08 100644
|
|
--- a/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy
|
|
+++ b/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy
|
|
@@ -30,6 +30,17 @@ class BindableSwingTest extends GroovySwingTestCase {
|
|
|
|
class BindableTestBean6 extends javax.swing.JPanel {
|
|
@Bindable String testField
|
|
+
|
|
+ /*
|
|
+ // if the following stub added, the illegal access warnings can be fixed
|
|
+ // java.awt.Component.firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
|
|
+ // should we add this kind of stubs automatically?
|
|
+ void firePropertyChange(String propertyName,
|
|
+ Object oldValue, Object newValue) {
|
|
+
|
|
+ super.firePropertyChange(propertyName, oldValue, newValue)
|
|
+ }
|
|
+ */
|
|
}
|
|
|
|
sb = new BindableTestBean6()
|
|
--
|
|
2.36.1
|
|
|