@@ -1095,9 +1095,18 @@ public InstanceFieldExpr(int line, int column, Expr target, String fieldName, Sy
1095
1095
this .tag = tag ;
1096
1096
if (field == null && RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1097
1097
{
1098
- RT .errPrintWriter ()
1099
- .format ("Reflection warning, %s:%d:%d - reference to field %s can't be resolved.\n " ,
1100
- SOURCE_PATH .deref (), line , column , fieldName );
1098
+ if (targetClass == null )
1099
+ {
1100
+ RT .errPrintWriter ()
1101
+ .format ("Reflection warning, %s:%d:%d - reference to field %s can't be resolved.\n " ,
1102
+ SOURCE_PATH .deref (), line , column , fieldName );
1103
+ }
1104
+ else
1105
+ {
1106
+ RT .errPrintWriter ()
1107
+ .format ("Reflection warning, %s:%d:%d - reference to field %s on %s can't be resolved.\n " ,
1108
+ SOURCE_PATH .deref (), line , column , fieldName , targetClass .getName ());
1109
+ }
1101
1110
}
1102
1111
}
1103
1112
@@ -1396,8 +1405,15 @@ public InstanceMethodExpr(String source, int line, int column, Symbol tag, Expr
1396
1405
{
1397
1406
List methods = Reflector .getMethods (target .getJavaClass (), args .count (), methodName , false );
1398
1407
if (methods .isEmpty ())
1408
+ {
1399
1409
method = null ;
1400
- //throw new IllegalArgumentException("No matching method found");
1410
+ if (RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1411
+ {
1412
+ RT .errPrintWriter ()
1413
+ .format ("Reflection warning, %s:%d:%d - call to method %s on %s can't be resolved (no such method).\n " ,
1414
+ SOURCE_PATH .deref (), line , column , methodName , target .getJavaClass ().getName ());
1415
+ }
1416
+ }
1401
1417
else
1402
1418
{
1403
1419
int methodidx = 0 ;
@@ -1421,16 +1437,23 @@ public InstanceMethodExpr(String source, int line, int column, Symbol tag, Expr
1421
1437
m = Reflector .getAsMethodOfPublicBase (m .getDeclaringClass (), m );
1422
1438
}
1423
1439
method = m ;
1440
+ if (method == null && RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1441
+ {
1442
+ RT .errPrintWriter ()
1443
+ .format ("Reflection warning, %s:%d:%d - call to method %s on %s can't be resolved (argument types: %s).\n " ,
1444
+ SOURCE_PATH .deref (), line , column , methodName , target .getJavaClass ().getName (), getTypeStringForArgs (args ));
1445
+ }
1424
1446
}
1425
1447
}
1426
1448
else
1427
- method = null ;
1428
-
1429
- if (method == null && RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1430
1449
{
1431
- RT .errPrintWriter ()
1432
- .format ("Reflection warning, %s:%d:%d - call to %s can't be resolved.\n " ,
1433
- SOURCE_PATH .deref (), line , column , methodName );
1450
+ method = null ;
1451
+ if (RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1452
+ {
1453
+ RT .errPrintWriter ()
1454
+ .format ("Reflection warning, %s:%d:%d - call to method %s can't be resolved (target class is unknown).\n " ,
1455
+ SOURCE_PATH .deref (), line , column , methodName );
1456
+ }
1434
1457
}
1435
1458
}
1436
1459
@@ -1580,8 +1603,8 @@ public StaticMethodExpr(String source, int line, int column, Symbol tag, Class c
1580
1603
if (method == null && RT .booleanCast (RT .WARN_ON_REFLECTION .deref ()))
1581
1604
{
1582
1605
RT .errPrintWriter ()
1583
- .format ("Reflection warning, %s:%d:%d - call to %s can't be resolved.\n " ,
1584
- SOURCE_PATH .deref (), line , column , methodName );
1606
+ .format ("Reflection warning, %s:%d:%d - call to static method %s on %s can't be resolved (argument types: %s) .\n " ,
1607
+ SOURCE_PATH .deref (), line , column , methodName , c . getName (), getTypeStringForArgs ( args ) );
1585
1608
}
1586
1609
}
1587
1610
@@ -2328,6 +2351,17 @@ static public boolean subsumes(Class[] c1, Class[] c2){
2328
2351
return better ;
2329
2352
}
2330
2353
2354
+ static String getTypeStringForArgs (IPersistentVector args ){
2355
+ StringBuilder sb = new StringBuilder ();
2356
+ for (int i = 0 ; i < args .count (); i ++)
2357
+ {
2358
+ Expr arg = (Expr ) args .nth (i );
2359
+ if (i > 0 ) sb .append (", " );
2360
+ sb .append (arg .hasJavaClass () ? arg .getJavaClass ().getName () : "unknown" );
2361
+ }
2362
+ return sb .toString ();
2363
+ }
2364
+
2331
2365
static int getMatchingParams (String methodName , ArrayList <Class []> paramlists , IPersistentVector argexprs ,
2332
2366
List <Class > rets )
2333
2367
{
0 commit comments