Skip to content

Commit 5ea05d1

Browse files
committed
make the localization related handles in NativeImageAgentJNIHandleSet lazy
1 parent c05db1a commit 5ea05d1

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/BreakpointInterceptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,14 +592,14 @@ private static boolean getBundleImplJDK11OrLater(JNIEnvironment jni, Breakpoint
592592
}
593593

594594
private static String readLocaleTag(JNIEnvironment jni, JNIObjectHandle locale) {
595-
return fromJniString(jni, callObjectMethod(jni, locale, agent.handles().javaUtilLocaleToLanguageTag));
595+
return fromJniString(jni, callObjectMethod(jni, locale, agent.handles().getJavaUtilLocaleToLanguageTag(jni)));
596596
}
597597

598598
private static List<Pair<String, String>> extractBundleInfo(JNIEnvironment jni, JNIObjectHandle result) {
599599
List<Pair<String, String>> res = new ArrayList<>();
600600
JNIObjectHandle curr = result;
601601
while (!nullHandle().equal(curr)) {
602-
JNIObjectHandle locale = callObjectMethod(jni, curr, agent.handles().javaUtilResourceBundleGetLocale);
602+
JNIObjectHandle locale = callObjectMethod(jni, curr, agent.handles().getJavaUtilResourceBundleGetLocale(jni));
603603
if (clearException(jni)) {
604604
return null;
605605
}
@@ -617,7 +617,7 @@ private static List<Pair<String, String>> extractBundleInfo(JNIEnvironment jni,
617617
}
618618

619619
private static JNIObjectHandle getParent(JNIEnvironment jni, JNIObjectHandle curr) {
620-
JNIObjectHandle parent = readObjectField(jni, curr, agent.handles().javaUtilResourceBundleParentField);
620+
JNIObjectHandle parent = readObjectField(jni, curr, agent.handles().getJavaUtilResourceBundleParentField(jni));
621621
if (!clearException(jni)) {
622622
return parent;
623623
}

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/NativeImageAgentJNIHandleSet.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ public class NativeImageAgentJNIHandleSet extends JNIHandleSet {
6969

7070
private JNIMethodId javaLangReflectConstructorDeclaringClassName;
7171

72-
final JNIMethodId javaUtilLocaleToLanguageTag;
73-
final JNIFieldId javaUtilResourceBundleParentField;
74-
final JNIMethodId javaUtilResourceBundleGetLocale;
72+
private JNIMethodId javaUtilLocaleToLanguageTag = WordFactory.nullPointer();
73+
private JNIFieldId javaUtilResourceBundleParentField = WordFactory.nullPointer();
74+
private JNIMethodId javaUtilResourceBundleGetLocale = WordFactory.nullPointer();
7575

7676
NativeImageAgentJNIHandleSet(JNIEnvironment env) {
7777
super(env);
@@ -102,11 +102,6 @@ public class NativeImageAgentJNIHandleSet extends JNIHandleSet {
102102
javaLangInvokeWrongMethodTypeException = newClassGlobalRef(env, "java/lang/invoke/WrongMethodTypeException");
103103
javaLangIllegalArgumentException = newClassGlobalRef(env, "java/lang/IllegalArgumentException");
104104

105-
JNIObjectHandle javaUtilLocale = findClass(env, "java/util/Locale");
106-
javaUtilLocaleToLanguageTag = getMethodId(env, javaUtilLocale, "toLanguageTag", "()Ljava/lang/String;", false);
107-
JNIObjectHandle javaUtilResourceBundle = findClass(env, "java/util/ResourceBundle");
108-
javaUtilResourceBundleParentField = getFieldId(env, javaUtilResourceBundle, "parent", "Ljava/util/ResourceBundle;", false);
109-
javaUtilResourceBundleGetLocale = getMethodId(env, javaUtilResourceBundle, "getLocale", "()Ljava/util/Locale;", false);
110105
}
111106

112107
JNIMethodId getJavaLangInvokeMethodTypeReturnType(JNIEnvironment env) {
@@ -176,4 +171,28 @@ JNIMethodId getJavaLangReflectConstructorDeclaringClassName(JNIEnvironment env,
176171
}
177172
return javaLangReflectConstructorDeclaringClassName;
178173
}
174+
175+
public JNIMethodId getJavaUtilLocaleToLanguageTag(JNIEnvironment env) {
176+
if (javaUtilLocaleToLanguageTag.isNull()) {
177+
JNIObjectHandle javaUtilLocale = findClass(env, "java/util/Locale");
178+
javaUtilLocaleToLanguageTag = getMethodId(env, javaUtilLocale, "toLanguageTag", "()Ljava/lang/String;", false);
179+
}
180+
return javaUtilLocaleToLanguageTag;
181+
}
182+
183+
public JNIFieldId getJavaUtilResourceBundleParentField(JNIEnvironment env) {
184+
if (javaUtilResourceBundleParentField.isNull()) {
185+
JNIObjectHandle javaUtilResourceBundle = findClass(env, "java/util/ResourceBundle");
186+
javaUtilResourceBundleParentField = getFieldId(env, javaUtilResourceBundle, "parent", "Ljava/util/ResourceBundle;", false);
187+
}
188+
return javaUtilResourceBundleParentField;
189+
}
190+
191+
public JNIMethodId getJavaUtilResourceBundleGetLocale(JNIEnvironment env) {
192+
if (javaUtilResourceBundleGetLocale.isNull()) {
193+
JNIObjectHandle javaUtilResourceBundle = findClass(env, "java/util/ResourceBundle");
194+
javaUtilResourceBundleGetLocale = getMethodId(env, javaUtilResourceBundle, "getLocale", "()Ljava/util/Locale;", false);
195+
}
196+
return javaUtilResourceBundleGetLocale;
197+
}
179198
}

0 commit comments

Comments
 (0)