Merge pull request #6360 from pkriens/issue/6346-gradle-reference-to-… · bndtools/bnd@e3c95f8 (original) (raw)
`@@ -90,7 +90,7 @@
`
90
90
` */
`
91
91
`public class Macro {
`
92
92
`private final static String NULLVALUE = "c29e43048791e250dfd5723e7b8aa048df802c9262cfa8fbc4475b2e392a8ad2";
`
93
``
`-
private final static String LITERALVALUE = "017a3ddbfc0fcd27bcdb2590cdb713a379ae59ef";
`
``
93
`+
protected final static String LITERALVALUE = "017a3ddbfc0fcd27bcdb2590cdb713a379ae59ef";
`
94
94
`private final static Pattern NUMERIC_P = Pattern
`
95
95
` .compile("[-+]?(\d*\.?\d+|\d+\.)(e[-+]?[0-9]+)?");
`
96
96
``
`@@ -342,7 +342,7 @@ public String replace(String key, Link link) {
`
342
342
`return replace(key, null, link, '{', '}');
`
343
343
` }
`
344
344
``
345
``
`-
private String replace(String key, List args, Link link, char begin, char end) {
`
``
345
`+
protected String replace(String key, List args, Link link, char begin, char end) {
`
346
346
`String value = getMacro(key, args, link, begin, end);
`
347
347
`if (value != LITERALVALUE) {
`
348
348
`if (value != null)
`
`@@ -405,6 +405,26 @@ private String doCommands(String[] args, Link source) {
`
405
405
`return doCommand(this, args[0], args);
`
406
406
` }
`
407
407
``
``
408
`+
protected BiFunction<Object, String[], Object> getFunction(String method) {
`
``
409
`+
Processor rover = domain;
`
``
410
`+
while (rover != null) {
`
``
411
`+
BiFunction<Object, String[], Object> function = getFunction(rover, method);
`
``
412
`+
if (function != null)
`
``
413
`+
return function;
`
``
414
+
``
415
`+
rover = rover.getParent();
`
``
416
`+
}
`
``
417
+
``
418
`+
for (int i = 0; targets != null && i < targets.length; i++) {
`
``
419
`+
BiFunction<Object, String[], Object> function = getFunction(targets[i], method);
`
``
420
`+
if (function != null)
`
``
421
`+
return function;
`
``
422
`+
}
`
``
423
+
``
424
`+
BiFunction<Object, String[], Object> function = getFunction(this, method);
`
``
425
`+
return function;
`
``
426
`+
}
`
``
427
+
408
428
`private String doCommand(Object target, String method, String[] args) {
`
409
429
`if (target == null)
`
410
430
` ; // System.err.println("Huh? Target should never be null " +
`
`@@ -422,43 +442,7 @@ private String doCommand(Object target, String method, String[] args) {
`
422
442
` }
`
423
443
` }
`
424
444
``
425
``
`-
Map<String, BiFunction<Object, String[], Object>> macros = macrosByClass.computeIfAbsent(target.getClass(),
`
426
``
`-
c -> Arrays.stream(c.getMethods())
`
427
``
`-
.filter(m -> (m.getName()
`
428
``
`-
.charAt(0) == '_') && (m.getParameterCount() == 1)
`
429
``
`-
&& (m.getParameterTypes()[0] == String[].class))
`
430
``
`-
.collect(toMap(m -> m.getName()
`
431
``
`-
.substring(1), m -> {
`
432
``
`-
Memoize mh = Memoize.supplier(() -> {
`
433
``
`-
try {
`
434
``
`-
return publicLookup().unreflect(m);
`
435
``
`-
} catch (Exception e) {
`
436
``
`-
throw Exceptions.duck(e);
`
437
``
`-
}
`
438
``
`-
});
`
439
``
`-
if (Modifier.isStatic(m.getModifiers())) {
`
440
``
`-
return (Object t, String[] a) -> {
`
441
``
`-
try {
`
442
``
`-
return mh.get()
`
443
``
`-
.invoke(a);
`
444
``
`-
} catch (Throwable e) {
`
445
``
`-
throw Exceptions.duck(e);
`
446
``
`-
}
`
447
``
`-
};
`
448
``
`-
} else {
`
449
``
`-
return (Object t, String[] a) -> {
`
450
``
`-
try {
`
451
``
`-
return mh.get()
`
452
``
`-
.invoke(t, a);
`
453
``
`-
} catch (Throwable e) {
`
454
``
`-
throw Exceptions.duck(e);
`
455
``
`-
}
`
456
``
`-
};
`
457
``
`-
}
`
458
``
`-
})));
`
459
``
-
460
``
`-
String macro = method.replace('-', '_');
`
461
``
`-
BiFunction<Object, String[], Object> invoker = macros.get(macro);
`
``
445
`+
BiFunction<Object, String[], Object> invoker = getFunction(target, method);
`
462
446
`if (invoker == null) {
`
463
447
`return null;
`
464
448
` }
`
`@@ -481,6 +465,46 @@ private String doCommand(Object target, String method, String[] args) {
`
481
465
`return null;
`
482
466
` }
`
483
467
``
``
468
`+
BiFunction<Object, String[], Object> getFunction(Object target, String method) {
`
``
469
`+
Map<String, BiFunction<Object, String[], Object>> macros = macrosByClass.computeIfAbsent(target.getClass(),
`
``
470
`+
c -> Arrays.stream(c.getMethods())
`
``
471
`+
.filter(m -> (m.getName()
`
``
472
`+
.charAt(0) == '_') && (m.getParameterCount() == 1) && (m.getParameterTypes()[0] == String[].class))
`
``
473
`+
.collect(toMap(m -> m.getName()
`
``
474
`+
.substring(1), m -> {
`
``
475
`+
Memoize mh = Memoize.supplier(() -> {
`
``
476
`+
try {
`
``
477
`+
return publicLookup().unreflect(m);
`
``
478
`+
} catch (Exception e) {
`
``
479
`+
throw Exceptions.duck(e);
`
``
480
`+
}
`
``
481
`+
});
`
``
482
`+
if (Modifier.isStatic(m.getModifiers())) {
`
``
483
`+
return (Object t, String[] a) -> {
`
``
484
`+
try {
`
``
485
`+
return mh.get()
`
``
486
`+
.invoke(a);
`
``
487
`+
} catch (Throwable e) {
`
``
488
`+
throw Exceptions.duck(e);
`
``
489
`+
}
`
``
490
`+
};
`
``
491
`+
} else {
`
``
492
`+
return (Object t, String[] a) -> {
`
``
493
`+
try {
`
``
494
`+
return mh.get()
`
``
495
`+
.invoke(t, a);
`
``
496
`+
} catch (Throwable e) {
`
``
497
`+
throw Exceptions.duck(e);
`
``
498
`+
}
`
``
499
`+
};
`
``
500
`+
}
`
``
501
`+
})));
`
``
502
+
``
503
`+
String macro = method.replace('-', '_');
`
``
504
`+
BiFunction<Object, String[], Object> invoker = macros.get(macro);
`
``
505
`+
return invoker;
`
``
506
`+
}
`
``
507
+
484
508
`/**
`
485
509
` * Return a unique list where the duplicates are removed.
`
486
510
` */
`
`@@ -1458,7 +1482,7 @@ public Properties getFlattenedProperties(boolean ignoreInstructions) {
`
1458
1482
` }
`
1459
1483
` }
`
1460
1484
``
1461
``
`-
static final String _osfileHelp = "${osfile;;
`
``
1485
`+
static final String _osfileHelp = "${osfile;;
`
1462
1486
``
1463
1487
`public String _osfile(String[] args) {
`
1464
1488
`verifyCommand(args, _osfileHelp, null, 3, 3);
`