@@ -114,8 +114,11 @@ protected final void scanField(AnalysisField field, JavaConstant receiver, Objec
114
114
JavaConstant fieldValue = bb .getConstantReflectionProvider ().readFieldValue (field , receiver );
115
115
116
116
if (fieldValue == null ) {
117
+ StringBuilder backtrace = new StringBuilder ();
118
+ buildObjectBacktrace (reason , backtrace );
117
119
throw AnalysisError .shouldNotReachHere ("Could not find field " + field .format ("%H.%n" ) +
118
- (receiver == null ? "" : " on " + bb .getSnippetReflectionProvider ().asObject (Object .class , receiver ).getClass ()));
120
+ (receiver == null ? "" : " on " + bb .getSnippetReflectionProvider ().asObject (Object .class , receiver ).getClass ()) +
121
+ System .lineSeparator () + backtrace .toString ());
119
122
}
120
123
121
124
if (fieldValue .getJavaKind () == JavaKind .Object && bb .getHostVM ().isRelocatedPointer (bb .getSnippetReflectionProvider ().asObject (Object .class , fieldValue ))) {
@@ -229,6 +232,11 @@ public final void scanConstant(JavaConstant value, Object reason) {
229
232
230
233
private void unsupportedFeature (String key , String message , Object entry ) {
231
234
StringBuilder objectBacktrace = new StringBuilder ();
235
+ AnalysisMethod method = buildObjectBacktrace (entry , objectBacktrace );
236
+ bb .getUnsupportedFeatures ().addMessage (key , method , message , objectBacktrace .toString ());
237
+ }
238
+
239
+ private AnalysisMethod buildObjectBacktrace (Object entry , StringBuilder objectBacktrace ) {
232
240
Object cur = entry ;
233
241
AnalysisMethod method = null ;
234
242
@@ -246,8 +254,7 @@ private void unsupportedFeature(String key, String message, Object entry) {
246
254
} else {
247
255
objectBacktrace .append ("\t [unknown] " ).append (cur .toString ());
248
256
}
249
-
250
- bb .getUnsupportedFeatures ().addMessage (key , method , message , objectBacktrace .toString ());
257
+ return method ;
251
258
}
252
259
253
260
/**
@@ -268,7 +275,7 @@ assert checkCorrectClassloaders(entry, valueObj) : "Invalid classloader " + valu
268
275
for (AnalysisField field : type .getInstanceFields (true )) {
269
276
if (field .getJavaKind () == JavaKind .Object && field .isAccessed ()) {
270
277
assert !Modifier .isStatic (field .getModifiers ());
271
- scanField (field , entry .constant , entry . getReason () );
278
+ scanField (field , entry .constant , entry );
272
279
}
273
280
}
274
281
} else if (type .isArray () && bb .getProviders ().getWordTypes ().asKind (type .getComponentType ()) == JavaKind .Object ) {
0 commit comments