This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 25fe25a67d New BeanCreator API
25fe25a67d is described below
commit 25fe25a67d566c8abf827e288e1574992940821a
Author: James Bognar <[email protected]>
AuthorDate: Wed Jan 21 09:59:14 2026 -0500
New BeanCreator API
---
AI.md | 113 +++++++++++++++-
.../annotation/AppliedAnnotationObject.java | 32 ++---
.../juneau/commons/concurrent/SimpleLock.java | 129 +++++++++++++++++-
.../commons/concurrent/SimpleReadWriteLock.java | 149 +++++++++++++++++++--
.../apache/juneau/commons/inject/BeanCreator2.java | 12 +-
.../juneau/commons/reflect/AnnotationInfo.java | 2 +-
.../juneau/commons/reflect/ConstructorInfo.java | 4 +-
.../juneau/commons/reflect/ExecutableInfo.java | 18 +--
.../apache/juneau/commons/reflect/FieldInfo.java | 2 +-
.../apache/juneau/commons/reflect/MethodInfo.java | 4 +-
.../juneau/commons/reflect/ParameterInfo.java | 4 +-
.../apache/juneau/commons/utils/StringUtils.java | 4 +-
.../src/main/java/org/apache/juneau/BeanMap.java | 2 +-
.../src/main/java/org/apache/juneau/BeanMeta.java | 8 +-
.../src/main/java/org/apache/juneau/ClassMeta.java | 4 +-
.../juneau/httppart/bean/RequestBeanMeta.java | 2 +-
.../java/org/apache/juneau/reflect/Mutaters.java | 6 +-
.../java/org/apache/juneau/rest/RestContext.java | 6 +-
.../java/org/apache/juneau/rest/RestOpInvoker.java | 2 +-
.../org/apache/juneau/rest/arg/ArgException.java | 2 +-
.../juneau/rest/debug/BasicDebugEnablement.java | 2 +-
.../apache/juneau/rest/stats/MethodInvoker.java | 2 +-
.../commons/reflect/AnnotationInfo_Test.java | 2 +-
.../juneau/commons/reflect/ClassInfo_Test.java | 4 +-
.../commons/reflect/ConstructorInfo_Test.java | 10 +-
.../commons/reflect/ExecutableInfo_Test.java | 36 ++---
.../juneau/commons/reflect/FieldInfo_Test.java | 12 +-
.../juneau/commons/reflect/MethodInfo_Test.java | 16 +--
.../juneau/commons/reflect/ParameterInfo_Test.java | 2 +-
29 files changed, 477 insertions(+), 114 deletions(-)
diff --git a/AI.md b/AI.md
index b796218777..db5b83a201 100644
--- a/AI.md
+++ b/AI.md
@@ -1051,9 +1051,10 @@ public class BeanName_Test extends TestBase {
**Key Points:**
- Use `@Nested` inner classes for major test categories
-- Each nested class name follows the pattern: `L_categoryName`
-- Tests within nested classes still use `LNN_testName` pattern
-- The letter in the nested class name matches the letter in the test method
names
+- Each nested class name follows the pattern: `L_categoryName` where L is an
uppercase letter (A, B, C, etc.)
+- Tests within nested classes use `l##_testName` pattern where l is the
lowercase letter matching the nested class (a, b, c, etc.) and ## is an
incrementing number (01, 02, 03, etc.)
+- The letter in the nested class name matches the letter in the test method
names (uppercase for class, lowercase for methods)
+- Each nested class extends `TestBase` to inherit test utilities and setup
### Common Test Categories
@@ -1246,6 +1247,112 @@ In all cases, `assertBean` should be used to validate
results.
- Use descriptive test method names
- Follow consistent test structure across all test classes
+### Test Helper Class Naming Convention
+
+**Rule**: For test helper classes that are only used by one test, prefix the
class name with the test method prefix and move it immediately above the test
that uses it.
+
+**Naming Pattern**: `LNN_ClassName` where:
+- **L** is the uppercase letter matching the test method prefix (A, B, C, etc.)
+- **NN** is the two-digit number matching the test method number (01, 02, 03,
etc.)
+- **ClassName** is the descriptive class name
+
+**Placement**: Move the helper class definition to immediately above the test
method that uses it.
+
+**Examples**:
+```java
+// WRONG - Generic name, defined far from usage
+public static class BeanWithDeprecatedGetInstance {
+ // ...
+}
+
+@Test
+void c03_createBeanIgnoresDeprecatedGetInstance() {
+ var bean = bc(BeanWithDeprecatedGetInstance.class).run();
+ // ...
+}
+
+// CORRECT - Prefixed with test name, placed above test
+@Test
+void c03_createBeanIgnoresDeprecatedGetInstance() {
+ // Bean with both deprecated and valid getInstance methods
+ public static class C03_BeanWithDeprecatedGetInstance {
+ private static final C03_BeanWithDeprecatedGetInstance INSTANCE = new
C03_BeanWithDeprecatedGetInstance();
+ // ...
+ }
+
+ var bean = bc(C03_BeanWithDeprecatedGetInstance.class).run();
+ // ...
+}
+```
+
+**Rationale**:
+- Makes it immediately clear which test uses the helper class
+- Reduces namespace pollution by scoping helper classes to their tests
+- Improves code locality by keeping related code together
+- Makes it easier to identify unused helper classes
+
+**When to Apply**:
+- Only apply this convention to helper classes used by a single test
+- Classes used by multiple tests should keep their generic names
+- Classes used across nested test classes should remain at the nested class
level
+
+### Test State Capture Utilities
+
+**Purpose**: Use proper utility classes instead of arrays for capturing
mutable state in lambdas and test scenarios.
+
+**Rules**:
+1. **Use `Flag` for boolean state**: Instead of `new boolean[]{false}`, use
`Flag.create()` for capturing boolean flags in lambdas and test hooks.
+2. **Use `IntegerValue` for integer counters**: Instead of `new int[]{0}`, use
`IntegerValue.create()` for capturing integer counts in lambdas and test hooks.
+
+**Examples**:
+```java
+// WRONG - Using arrays for state capture
+var hookCalled = new boolean[]{false};
+bc(SimpleBean.class)
+ .postCreateHook(b -> hookCalled[0] = true)
+ .run();
+assertTrue(hookCalled[0]);
+
+var callCount = new int[]{0};
+bc(SimpleBean.class)
+ .postCreateHook(b -> callCount[0]++)
+ .run();
+assertEquals(1, callCount[0]);
+
+// CORRECT - Using Flag and IntegerValue
+var hookCalled = Flag.create();
+bc(SimpleBean.class)
+ .postCreateHook(b -> hookCalled.set())
+ .run();
+assertTrue(hookCalled.isSet());
+
+var callCount = IntegerValue.create();
+bc(SimpleBean.class)
+ .postCreateHook(b -> callCount.increment())
+ .run();
+assertEquals(1, callCount.get());
+```
+
+**Flag Methods**:
+- `Flag.create()` - Creates a flag initialized to `false`
+- `flag.set()` - Sets the flag to `true`
+- `flag.isSet()` - Returns `true` if flag is set
+- `flag.isUnset()` - Returns `true` if flag is not set
+- `flag.setIf(condition)` - Sets flag if condition is `true`
+
+**IntegerValue Methods**:
+- `IntegerValue.create()` - Creates an integer initialized to `0`
+- `counter.increment()` - Increments by 1
+- `counter.get()` - Returns the current value
+- `counter.getAndIncrement()` - Returns current value then increments
+- `counter.incrementAndGet()` - Increments then returns new value
+
+**Rationale**:
+- Provides cleaner, more readable code than array access patterns
+- Better type safety and API design
+- Consistent with Apache Juneau utility class patterns
+- Makes test code more maintainable and easier to understand
+
### Documentation
- Include javadoc for test methods explaining their purpose
- Document any special test scenarios or edge cases
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/annotation/AppliedAnnotationObject.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/annotation/AppliedAnnotationObject.java
index a90dc7924c..b97ba43905 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/annotation/AppliedAnnotationObject.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/annotation/AppliedAnnotationObject.java
@@ -216,7 +216,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderC on(Constructor<?>...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -229,7 +229,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderC on(ConstructorInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
}
@@ -276,7 +276,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderM on(Method...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -289,7 +289,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderM on(MethodInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
}
@@ -339,7 +339,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderMF on(Field...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -352,7 +352,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderMF on(FieldInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
@@ -365,7 +365,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderMF on(Method...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -378,7 +378,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderMF on(MethodInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
}
@@ -516,7 +516,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTM on(Method...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -529,7 +529,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTM on(MethodInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
@@ -584,7 +584,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMF on(Field...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -597,7 +597,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMF on(FieldInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
@@ -610,7 +610,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMF on(Method...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -623,7 +623,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMF on(MethodInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
}
@@ -667,7 +667,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMFC on(Constructor<?>...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(info(v).getFullName());
+ on(info(v).getNameFull());
return this;
}
@@ -680,7 +680,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
public BuilderTMFC on(ConstructorInfo...value) {
assertArgNoNulls("value", value);
for (var v : value)
- on(v.getFullName());
+ on(v.getNameFull());
return this;
}
}
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleLock.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleLock.java
index cb5c0fdcdb..3c6c8587a8 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleLock.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleLock.java
@@ -21,12 +21,84 @@ import static org.apache.juneau.commons.utils.Utils.*;
import java.util.concurrent.locks.*;
/**
- * A simple auto-closeable wrapper around a lock.
+ * A simple auto-closeable wrapper around a {@link Lock} that automatically
acquires the lock
+ * when created and releases it when closed.
+ *
+ * <p>
+ * This class wraps any {@link Lock} implementation and makes it work
seamlessly with try-with-resources
+ * statements. The lock is automatically acquired in the constructor and
released when {@link #close()}
+ * is called (either explicitly or automatically via try-with-resources).
+ *
+ * <p>
+ * This class is typically used indirectly through {@link
SimpleReadWriteLock#read()} and
+ * {@link SimpleReadWriteLock#write()}, but can also be used directly with any
{@link Lock} instance.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jc>// Using with a ReentrantLock</jc>
+ * <jk>var</jk> <jv>lock</jv> = <jk>new</jk> ReentrantLock();
+ * <jk>try</jk> (<jk>var</jk> <jv>simpleLock</jv> = <jk>new</jk>
SimpleLock(<jv>lock</jv>)) {
+ * <jc>// Lock is automatically held - perform critical section
operations</jc>
+ * <jv>sharedResource</jv>.modify();
+ * }
+ * <jc>// Lock is automatically released when exiting try block</jc>
+ *
+ * <jc>// Using with SimpleReadWriteLock</jc>
+ * <jk>var</jk> <jv>rwLock</jv> = <jk>new</jk> SimpleReadWriteLock();
+ * <jk>try</jk> (<jk>var</jk> <jv>readLock</jv> = <jv>rwLock</jv>.read()) {
+ * <jc>// Read lock is automatically held</jc>
+ * <jv>sharedResource</jv>.read();
+ * }
+ * <jc>// Read lock is automatically released</jc>
+ * </p>
+ *
+ * <h5 class='section'>Thread Safety:</h5>
+ * <p>
+ * This class is not thread-safe itself. Each instance wraps a single {@link
Lock} and should be used
+ * by a single thread. The underlying lock's thread-safety guarantees apply to
the wrapped lock.
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>The lock is automatically acquired in the constructor
and released in {@link #close()}.
+ * <li class='note'>If <jk>null</jk> is passed to the constructor, no
locking operations are performed
+ * (useful for creating no-op locks).
+ * <li class='note'>This class implements {@link AutoCloseable}, making it
ideal for use with
+ * try-with-resources statements.
+ * <li class='note'>Multiple calls to {@link #close()} are safe -
subsequent calls have no effect if
+ * the lock has already been released.
+ * <li class='note'>The underlying lock's reentrancy behavior is preserved
- if the lock supports
+ * reentrant locking, the same thread can acquire it multiple
times.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * <li class='jc'>{@link SimpleReadWriteLock} - A read-write lock that
returns {@link SimpleLock} instances
+ * <li class='jc'>{@link Lock} - The underlying lock interface
+ * </ul>
*/
public class SimpleLock implements AutoCloseable {
/**
- * A simple no-op lock.
+ * A no-op lock instance that performs no actual locking operations.
+ *
+ * <p>
+ * This instance can be used when locking is conditionally disabled or
when you need a
+ * {@link SimpleLock} instance but don't want any actual
synchronization overhead.
+ * All lock operations on this instance are no-ops.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jc>// Use NO_OP when locking is disabled</jc>
+ * <jk>var</jk> <jv>lock</jv> = isLockingEnabled() ? <jk>new</jk>
SimpleLock(<jk>new</jk> ReentrantLock()) : SimpleLock.NO_OP;
+ * <jk>try</jk> (<jk>var</jk> <jv>simpleLock</jv> = <jv>lock</jv>)
{
+ * <jc>// Code works the same whether locking is enabled
or not</jc>
+ * <jv>sharedResource</jv>.modify();
+ * }
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>Calling {@link #close()} on this instance has
no effect.
+ * <li class='note'>This instance is thread-safe and can be shared
across threads.
+ * <li class='note'>This instance wraps a <jk>null</jk> lock, so
no actual locking occurs.
+ * </ul>
*/
public static final SimpleLock NO_OP = new SimpleLock(null);
@@ -35,7 +107,30 @@ public class SimpleLock implements AutoCloseable {
/**
* Constructor.
*
- * @param lock The lock being wrapped.
+ * <p>
+ * Creates a new {@link SimpleLock} wrapper around the specified {@link
Lock}. The lock is
+ * automatically acquired during construction. If <jk>null</jk> is
passed, no locking operations
+ * are performed (useful for creating no-op locks).
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jc>// Wrap a ReentrantLock</jc>
+ * <jk>var</jk> <jv>underlyingLock</jv> = <jk>new</jk>
ReentrantLock();
+ * <jk>var</jk> <jv>simpleLock</jv> = <jk>new</jk>
SimpleLock(<jv>underlyingLock</jv>);
+ * <jc>// Lock is now held - use try-with-resources to ensure
release</jc>
+ * <jk>try</jk> (<jv>simpleLock</jv>) {
+ * <jc>// Critical section</jc>
+ * }
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>The lock is acquired immediately in the
constructor. This method may block
+ * if the lock is not available.
+ * <li class='note'>If <jk>null</jk> is passed, no lock is
acquired and {@link #close()} will have no effect.
+ * <li class='note'>The underlying lock's behavior (fairness,
reentrancy, etc.) is preserved.
+ * </ul>
+ *
+ * @param lock The {@link Lock} being wrapped. Can be <jk>null</jk> to
create a no-op lock.
*/
public SimpleLock(Lock lock) {
this.lock = lock;
@@ -43,6 +138,34 @@ public class SimpleLock implements AutoCloseable {
lock.lock();
}
+ /**
+ * Releases the lock.
+ *
+ * <p>
+ * This method is called automatically when used in a
try-with-resources statement, or can be
+ * called explicitly to release the lock early. If the lock was
<jk>null</jk> (no-op lock),
+ * this method has no effect.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jk>var</jk> <jv>lock</jv> = <jk>new</jk>
SimpleLock(<jk>new</jk> ReentrantLock());
+ * <jc>// Lock is held</jc>
+ * <jv>lock</jv>.close(); <jc>// Explicitly release the lock</jc>
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>This method is called automatically when
exiting a try-with-resources block.
+ * <li class='note'>Multiple calls to this method are safe -
subsequent calls have no effect if
+ * the lock has already been released.
+ * <li class='note'>If the lock was <jk>null</jk> (no-op lock),
this method returns immediately
+ * without performing any operations.
+ * <li class='note'>The underlying lock's unlock behavior is
preserved (e.g., reentrant locks
+ * must be unlocked the same number of times they were
locked).
+ * </ul>
+ *
+ * @throws IllegalMonitorStateException If the current thread does not
hold this lock
+ * (only applies to certain lock implementations).
+ */
@Override
public void close() {
if (nn(lock))
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleReadWriteLock.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleReadWriteLock.java
index 5d6d222c9d..146e751213 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleReadWriteLock.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/concurrent/SimpleReadWriteLock.java
@@ -20,12 +20,84 @@ import java.util.concurrent.locks.*;
/**
* An extension of {@link ReentrantReadWriteLock} with convenience methods for
creating
- * auto-closeable locks.
+ * auto-closeable locks that work seamlessly with try-with-resources
statements.
+ *
+ * <p>
+ * This class provides a simpler API than the standard {@link
ReentrantReadWriteLock} by wrapping
+ * read and write locks in {@link SimpleLock} instances that implement {@link
AutoCloseable}.
+ * This allows locks to be automatically released when used in
try-with-resources blocks, reducing
+ * the risk of forgetting to unlock and preventing deadlocks.
+ *
+ * <p>
+ * The returned {@link SimpleLock} instances automatically acquire the lock
when created and release
+ * it when {@link SimpleLock#close()} is called (either explicitly or
automatically via try-with-resources).
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jc>// Using read lock with try-with-resources</jc>
+ * <jk>var</jk> <jv>lock</jv> = <jk>new</jk> SimpleReadWriteLock();
+ * <jk>try</jk> (<jk>var</jk> <jv>readLock</jv> = <jv>lock</jv>.read()) {
+ * <jc>// Read operations here - lock is automatically held</jc>
+ * <jv>sharedResource</jv>.read();
+ * }
+ * <jc>// Lock is automatically released when exiting try block</jc>
+ *
+ * <jc>// Using write lock with try-with-resources</jc>
+ * <jk>try</jk> (<jk>var</jk> <jv>writeLock</jv> = <jv>lock</jv>.write()) {
+ * <jc>// Write operations here - lock is automatically held</jc>
+ * <jv>sharedResource</jv>.write(<js>"new value"</js>);
+ * }
+ * <jc>// Lock is automatically released when exiting try block</jc>
+ * </p>
+ *
+ * <h5 class='section'>Thread Safety:</h5>
+ * <p>
+ * This class inherits all thread-safety guarantees from {@link
ReentrantReadWriteLock}.
+ * Multiple threads can hold read locks simultaneously, but write locks are
exclusive.
+ * Read and write locks cannot be held simultaneously by different threads.
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>The returned {@link SimpleLock} instances are not
thread-safe themselves and should
+ * not be shared between threads. Each thread should call {@link
#read()} or {@link #write()} separately.
+ * <li class='note'>Each call to {@link #read()} or {@link #write()}
returns a new {@link SimpleLock} instance.
+ * <li class='note'>The lock is automatically acquired when {@link
SimpleLock} is created and released when
+ * {@link SimpleLock#close()} is called.
+ * <li class='note'>This class supports reentrant locking - the same
thread can acquire multiple read locks
+ * or upgrade from read to write lock (if no other threads hold
read locks).
+ * <li class='note'>For fair ordering, use {@link
#SimpleReadWriteLock(boolean)} with <jk>true</jk>.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * <li class='jc'>{@link SimpleLock} - The auto-closeable lock wrapper
+ * <li class='jc'>{@link ReentrantReadWriteLock} - The underlying lock
implementation
+ * </ul>
*/
public class SimpleReadWriteLock extends ReentrantReadWriteLock {
private static final long serialVersionUID = 1L;
+
/**
- * A no-op lock.
+ * A no-op lock instance that performs no actual locking operations.
+ *
+ * <p>
+ * This instance can be used when locking is conditionally disabled or
when you need a
+ * {@link SimpleReadWriteLock} instance but don't want any actual
synchronization overhead.
+ * All lock operations on this instance are no-ops and return {@link
SimpleLock#NO_OP}.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jc>// Use NO_OP when locking is disabled</jc>
+ * <jk>var</jk> <jv>lock</jv> = isLockingEnabled() ? <jk>new</jk>
SimpleReadWriteLock() : SimpleReadWriteLock.NO_OP;
+ * <jk>try</jk> (<jk>var</jk> <jv>readLock</jv> =
<jv>lock</jv>.read()) {
+ * <jc>// Code works the same whether locking is enabled
or not</jc>
+ * <jv>sharedResource</jv>.read();
+ * }
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>Calling {@link #read()} or {@link #write()} on
this instance returns {@link SimpleLock#NO_OP}.
+ * <li class='note'>Closing the returned {@link SimpleLock} has no
effect.
+ * <li class='note'>This instance is thread-safe and can be shared
across threads.
+ * </ul>
*/
public static SimpleReadWriteLock NO_OP = new SimpleReadWriteLock() {
private static final long serialVersionUID = 1L;
@@ -43,31 +115,92 @@ public class SimpleReadWriteLock extends
ReentrantReadWriteLock {
/**
* Constructor.
+ *
+ * <p>
+ * Creates a new read-write lock with an unfair ordering policy. Unfair
locks generally
+ * provide better throughput under high contention but may not
guarantee fairness.
*/
public SimpleReadWriteLock() {}
/**
- * Constructor
+ * Constructor.
+ *
+ * <p>
+ * Creates a new read-write lock with the specified fairness policy.
*
- * @param fair <jk>true</jk> if this lock should use a fair ordering
policy.
+ * <h5 class='section'>Fair vs Unfair:</h5><ul>
+ * <li class='note'><b>Fair locks</b> (<jk>true</jk>): Threads
acquire locks in approximately
+ * FIFO order. Provides fairness but may have lower
throughput under high contention.
+ * <li class='note'><b>Unfair locks</b> (<jk>false</jk>): No
ordering guarantee. Generally provides
+ * better throughput but may starve some threads under
high contention.
+ * </ul>
+ *
+ * @param fair <jk>true</jk> if this lock should use a fair ordering
policy, <jk>false</jk> for unfair.
*/
public SimpleReadWriteLock(boolean fair) {
super(fair);
}
/**
- * Construct a read lock.
+ * Acquires and returns a read lock.
+ *
+ * <p>
+ * The returned {@link SimpleLock} automatically acquires the read lock
when created and releases
+ * it when {@link SimpleLock#close()} is called. Multiple threads can
hold read locks simultaneously,
+ * but a write lock cannot be acquired while any read locks are held.
*
- * @return A new closeable read lock.
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jk>var</jk> <jv>lock</jv> = <jk>new</jk> SimpleReadWriteLock();
+ * <jk>try</jk> (<jk>var</jk> <jv>readLock</jv> =
<jv>lock</jv>.read()) {
+ * <jc>// Multiple threads can hold read locks
simultaneously</jc>
+ * <jv>sharedResource</jv>.read();
+ * }
+ * <jc>// Lock is automatically released</jc>
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>This method blocks until the read lock can be
acquired.
+ * <li class='note'>Multiple threads can hold read locks
concurrently.
+ * <li class='note'>Read locks cannot be acquired while a write
lock is held by another thread.
+ * <li class='note'>The same thread can acquire multiple read
locks (reentrant).
+ * <li class='note'>Each call returns a new {@link SimpleLock}
instance.
+ * </ul>
+ *
+ * @return A new {@link SimpleLock} that holds the read lock. The lock
is automatically acquired.
*/
public SimpleLock read() {
return new SimpleLock(readLock());
}
/**
- * Construct a write lock.
+ * Acquires and returns a write lock.
+ *
+ * <p>
+ * The returned {@link SimpleLock} automatically acquires the write
lock when created and releases
+ * it when {@link SimpleLock#close()} is called. Write locks are
exclusive - only one thread can
+ * hold a write lock at a time, and no read locks can be held while a
write lock is active.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * <jk>var</jk> <jv>lock</jv> = <jk>new</jk> SimpleReadWriteLock();
+ * <jk>try</jk> (<jk>var</jk> <jv>writeLock</jv> =
<jv>lock</jv>.write()) {
+ * <jc>// Only one thread can hold a write lock at a
time</jc>
+ * <jv>sharedResource</jv>.write(<js>"new value"</js>);
+ * }
+ * <jc>// Lock is automatically released</jc>
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * <li class='note'>This method blocks until the write lock can be
acquired.
+ * <li class='note'>Write locks are exclusive - only one thread
can hold a write lock at a time.
+ * <li class='note'>Write locks cannot be acquired while any read
locks are held by other threads.
+ * <li class='note'>Read locks cannot be acquired while a write
lock is held.
+ * <li class='note'>The same thread can acquire multiple write
locks (reentrant).
+ * <li class='note'>Each call returns a new {@link SimpleLock}
instance.
+ * </ul>
*
- * @return A new closeable write lock.
+ * @return A new {@link SimpleLock} that holds the write lock. The lock
is automatically acquired.
*/
public SimpleLock write() {
return new SimpleLock(writeLock());
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BeanCreator2.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BeanCreator2.java
index a57e73ca4b..0c5ee1071b 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BeanCreator2.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BeanCreator2.java
@@ -1072,7 +1072,7 @@ public class BeanCreator2<T> {
.sorted(methodComparator)
.findFirst()
.map(x -> {
- log("Found builder method: %s",
x.getFullName());
+ log("Found builder method: %s",
x.getNameFull());
return (T)beanType.cast(x.inject(store,
builder));
})
.orElse((T)null);
@@ -1089,7 +1089,7 @@ public class BeanCreator2<T> {
.sorted(methodComparator)
.findFirst()
.map(x -> {
- log("Found factory method
accepting builder: %s", x.getFullName());
+ log("Found factory method
accepting builder: %s", x.getNameFull());
return
(T)beanType.cast(x.inject(store, null, builder));
})
.orElse(null);
@@ -1105,7 +1105,7 @@ public class BeanCreator2<T> {
.sorted(constructorComparator)
.findFirst()
.map(x -> {
- log("Found constructor
accepting builder: %s", x.getFullName());
+ log("Found constructor
accepting builder: %s", x.getNameFull());
return
(T)beanType.cast(x.inject(store, enclosingInstance, builder));
})
.orElse(null);
@@ -1121,7 +1121,7 @@ public class BeanCreator2<T> {
.sorted(methodComparator)
.findFirst()
.map(x -> {
- log("Found builder method: %s",
x.getFullName());
+ log("Found builder method: %s",
x.getNameFull());
return
(T)beanType.cast(x.inject(store, builder));
})
.orElse(null);
@@ -1160,7 +1160,7 @@ public class BeanCreator2<T> {
.sorted(methodComparator)
.findFirst()
.map(x -> {
- log("Found factory method: %s",
x.getFullName());
+ log("Found factory method: %s",
x.getNameFull());
return (T)beanType.cast(x.inject(store, null));
})
.orElse(null);
@@ -1175,7 +1175,7 @@ public class BeanCreator2<T> {
.sorted(constructorComparator)
.findFirst()
.map(x -> {
- log("Found constructor: %s",
x.getFullName());
+ log("Found constructor: %s",
x.getNameFull());
return (T)beanType.cast(x.inject(store,
enclosingInstance));
})
.orElse(null);
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/AnnotationInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/AnnotationInfo.java
index 50da35746f..da01c79b6a 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/AnnotationInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/AnnotationInfo.java
@@ -391,7 +391,7 @@ public class AnnotationInfo<T extends Annotation> {
* @return An {@link Optional} containing the method info, or empty if
method not found.
*/
public Optional<MethodInfo> getMethod(String methodName) {
- return methods.get().stream().filter(x -> eq(methodName,
x.getSimpleName())).findFirst();
+ return methods.get().stream().filter(x -> eq(methodName,
x.getNameSimple())).findFirst();
}
//-----------------------------------------------------------------------------------------------------------------
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ConstructorInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ConstructorInfo.java
index b1924a5639..f2f006605c 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ConstructorInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ConstructorInfo.java
@@ -142,7 +142,7 @@ public class ConstructorInfo extends ExecutableInfo
implements Comparable<Constr
@Override
public int compareTo(ConstructorInfo o) {
- int i = cmp(getSimpleName(), o.getSimpleName());
+ int i = cmp(getNameSimple(), o.getNameSimple());
if (i == 0) {
i = getParameterCount() - o.getParameterCount();
if (i == 0) {
@@ -160,7 +160,7 @@ public class ConstructorInfo extends ExecutableInfo
implements Comparable<Constr
public AnnotatableType getAnnotatableType() { return
AnnotatableType.CONSTRUCTOR_TYPE; }
@Override /* Annotatable */
- public String getLabel() { return getDeclaringClass().getNameSimple() +
"." + getShortName(); }
+ public String getLabel() { return getDeclaringClass().getNameSimple() +
"." + getNameShort(); }
/**
* Returns the wrapped constructor.
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
index c0b6db0f37..7f159df6b4 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
@@ -113,7 +113,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
this.parameterTypes = mem(() ->
getParameters().stream().map(ParameterInfo::getParameterType).toList());
this.exceptions = mem(() ->
stream(inner.getExceptionTypes()).map(ClassInfo::of).map(ClassInfo.class::cast).toList());
this.declaredAnnotations = mem(() ->
stream(inner.getDeclaredAnnotations()).flatMap(a ->
AnnotationUtils.streamRepeated(a)).map(a -> ai((Annotatable)this, a)).toList());
- this.shortName = mem(() -> f("{0}({1})", getSimpleName(),
getParameters().stream().map(p ->
p.getParameterType().getNameSimple()).collect(joining(","))));
+ this.shortName = mem(() -> f("{0}({1})", getNameSimple(),
getParameters().stream().map(p ->
p.getParameterType().getNameSimple()).collect(joining(","))));
this.fullName = mem(this::findFullName);
}
@@ -298,7 +298,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
*
* @return The underlying executable name.
*/
- public final String getFullName() { return fullName.get(); }
+ public final String getNameFull() { return fullName.get(); }
/**
* Returns parameter information at the specified index.
@@ -362,14 +362,14 @@ public abstract class ExecutableInfo extends
AccessibleInfo {
*
* @return The underlying executable name.
*/
- public final String getShortName() { return shortName.get(); }
+ public final String getNameShort() { return shortName.get(); }
/**
* Returns the simple name of the underlying method.
*
* @return The simple name of the underlying method;
*/
- public final String getSimpleName() { return isConstructor ?
cns(inner.getDeclaringClass()) : inner.getName(); }
+ public final String getNameSimple() { return isConstructor ?
cns(inner.getDeclaringClass()) : inner.getName(); }
/**
* Returns an array of {@link TypeVariable} objects that represent the
type variables declared by the generic declaration.
@@ -411,7 +411,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
* @return <jk>true</jk> if this method has one of the names.
*/
public final boolean hasAnyName(Collection<String> names) {
- return names.contains(getSimpleName());
+ return names.contains(getNameSimple());
}
/**
@@ -421,7 +421,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
* @return <jk>true</jk> if this method has one of the names.
*/
public final boolean hasAnyName(String...names) {
- return stream(names).anyMatch(n -> eq(n, getSimpleName()));
+ return stream(names).anyMatch(n -> eq(n, getNameSimple()));
}
/**
@@ -442,7 +442,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
* @return <jk>true</jk> if this method has this name.
*/
public final boolean hasName(String name) {
- return getSimpleName().equals(name);
+ return getNameSimple().equals(name);
}
/**
@@ -787,7 +787,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
@Override
public String toString() {
- return getShortName();
+ return getNameShort();
}
private void checkIndex(int index) {
@@ -806,7 +806,7 @@ public abstract class ExecutableInfo extends AccessibleInfo
{
sb.append(pi.getName()).append('.');
dc.appendNameFormatted(sb, SHORT, true, '$', BRACKETS);
if (! isConstructor)
- sb.append('.').append(getSimpleName());
+ sb.append('.').append(getNameSimple());
sb.append('(');
sb.append(getParameters().stream().map(p ->
p.getParameterType().getNameFormatted(FULL, true, '$',
BRACKETS)).collect(joining(",")));
sb.append(')');
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/FieldInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/FieldInfo.java
index e81bcedb2d..5c43f8bba3 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/FieldInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/FieldInfo.java
@@ -260,7 +260,7 @@ public class FieldInfo extends AccessibleInfo implements
Comparable<FieldInfo>,
*
* @return The underlying executable name.
*/
- public String getFullName() { return fullName.get(); }
+ public String getNameFull() { return fullName.get(); }
@Override /* Annotatable */
public String getLabel() { return getDeclaringClass().getNameSimple() +
"." + getName(); }
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/MethodInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/MethodInfo.java
index fab3fae5e6..b01fabdf56 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/MethodInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/MethodInfo.java
@@ -171,7 +171,7 @@ public class MethodInfo extends ExecutableInfo implements
Comparable<MethodInfo>
@Override
public int compareTo(MethodInfo o) {
- int i = cmp(getSimpleName(), o.getSimpleName());
+ int i = cmp(getNameSimple(), o.getNameSimple());
if (i == 0) {
var params = getParameters();
var oParams = o.getParameters();
@@ -317,7 +317,7 @@ public class MethodInfo extends ExecutableInfo implements
Comparable<MethodInfo>
public Type getGenericReturnType() { return
inner.getGenericReturnType(); }
@Override /* Annotatable */
- public String getLabel() { return getDeclaringClass().getNameSimple() +
"." + getShortName(); }
+ public String getLabel() { return getDeclaringClass().getNameSimple() +
"." + getNameShort(); }
/**
* Returns this method and all matching methods up the hierarchy chain.
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ParameterInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ParameterInfo.java
index f13ec3fdcb..f24312c370 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ParameterInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ParameterInfo.java
@@ -279,7 +279,7 @@ public class ParameterInfo extends ElementInfo implements
Annotatable {
@Override /* Annotatable */
public String getLabel() {
var exec = getDeclaringExecutable();
- var label = exec.getDeclaringClass().getNameSimple() + "." +
exec.getShortName();
+ var label = exec.getDeclaringClass().getNameSimple() + "." +
exec.getNameShort();
return label + "[" + index + "]";
}
@@ -614,7 +614,7 @@ public class ParameterInfo extends ElementInfo implements
Annotatable {
@Override
public String toString() {
- return (executable.getSimpleName()) + "[" + index + "]";
+ return (executable.getNameSimple()) + "[" + index + "]";
}
private List<ParameterInfo> findMatchingParameters() {
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
index db349c516c..a89bd63605 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
@@ -8038,8 +8038,8 @@ public class StringUtils {
list.add(readifier(byte[].class, x -> toHex(x)));
list.add(readifier(Enum.class, x -> ((Enum<?>)x).name()));
list.add(readifier(Class.class, x -> cns(x)));
- list.add(readifier(Constructor.class, x ->
ConstructorInfo.of(x).getFullName()));
- list.add(readifier(Method.class, x ->
MethodInfo.of(x).getFullName()));
+ list.add(readifier(Constructor.class, x ->
ConstructorInfo.of(x).getNameFull()));
+ list.add(readifier(Method.class, x ->
MethodInfo.of(x).getNameFull()));
list.add(readifier(Field.class, x ->
FieldInfo.of(x).toString()));
list.add(readifier(Parameter.class, x ->
ParameterInfo.of(x).toString()));
list.add(readifier(ClassInfo.class, ClassInfo::toString));
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index 157e1918d2..bd0ab696f9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -433,7 +433,7 @@ public class BeanMap<T> extends AbstractMap<String,Object>
implements Delegate<T
propertyCache.forEach((k, v) -> put(k, v));
propertyCache = null;
} catch (IllegalArgumentException e) {
- throw bex(e, meta.getClassMeta().inner(),
"IllegalArgumentException occurred on call to class constructor ''{0}'' with
argument types ''{1}''", c.getSimpleName(),
+ throw bex(e, meta.getClassMeta().inner(),
"IllegalArgumentException occurred on call to class constructor ''{0}'' with
argument types ''{1}''", c.getNameSimple(),
Json5Serializer.DEFAULT.toString(getClasses(args)));
} catch (Exception e) {
throw bex(e);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 0d4481245b..ff3aacc256 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -470,7 +470,7 @@ public class BeanMeta<T> {
if (nn(bpm.getter)) {
if (!
ap.has(Beanp.class, mi) && ap.has(Beanp.class, bpm.getter)) {
m =
bpm.getter.inner(); // @Beanp annotated method takes precedence.
- } else if
(m.getName().startsWith("is") && bpm.getter.getSimpleName().startsWith("get")) {
+ } else if
(m.getName().startsWith("is") && bpm.getter.getNameSimple().startsWith("get")) {
m =
bpm.getter.inner(); // getX() overrides isX().
}
}
@@ -964,7 +964,7 @@ public class BeanMeta<T> {
args = con.getParameters().stream().map(x ->
x.getName()).toList();
for (int i = 0; i < args.size(); i++) {
if (isBlank(args.get(i)))
- throw bex(ci, "Could not find
name for parameter #{0} of constructor ''{1}''", i, con.getFullName());
+ throw bex(ci, "Could not find
name for parameter #{0} of constructor ''{1}''", i, con.getNameFull());
}
}
return new BeanConstructor(opt(con), args);
@@ -1084,7 +1084,7 @@ public class BeanMeta<T> {
if (! (m.isVisible(v) || ne(beanps) ||
ne(names)))
continue;
- var n = m.getSimpleName();
+ var n = m.getNameSimple();
var params = m.getParameters();
var rt = m.getReturnType();
@@ -1157,7 +1157,7 @@ public class BeanMeta<T> {
n = pn.getPropertyName(n);
if ("*".equals(bpName) && methodType == UNKNOWN)
- throw bex(ci, "Found @Beanp(\"*\") but
could not determine method type on method ''{0}''.", m.getSimpleName());
+ throw bex(ci, "Found @Beanp(\"*\") but
could not determine method type on method ''{0}''.", m.getNameSimple());
if (methodType != UNKNOWN) {
if (nn(bpName) && ! bpName.isEmpty())
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 6f73df7698..3b2b9b106d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -1536,7 +1536,7 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
// Try to find a corresponding getter method (even if
not annotated)
// If setter is "setName", look for "getName" or
"isName"
- var setterName = setterMethod.get().getSimpleName();
+ var setterName = setterMethod.get().getNameSimple();
if (setterName.startsWith("set") && setterName.length()
> 3) {
var propertyName = setterName.substring(3);
var getterName1 = "get" + propertyName;
@@ -1628,7 +1628,7 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
// Try to find a corresponding getter method (even if
not annotated)
// If setter is "setParent", look for "getParent" or
"isParent"
- var setterName = setterMethod.get().getSimpleName();
+ var setterName = setterMethod.get().getNameSimple();
if (setterName.startsWith("set") && setterName.length()
> 3) {
var propertyName = setterName.substring(3);
var getterName1 = "get" + propertyName;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
index 8452e84c2a..c84b3d1a84 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
@@ -58,7 +58,7 @@ public class RequestBeanMeta {
var ap = cm.getBeanContext().getAnnotationProvider();
apply(ap.find(Request.class,
cm).stream().findFirst().map(x -> x.inner()).orElse(null));
cm.getPublicMethods().stream().forEach(x -> {
- var n = x.getSimpleName();
+ var n = x.getNameSimple();
if (x.hasAnnotation(Header.class)) {
assertNoArgs(x, Header.class);
assertReturnNotVoid(x, Header.class);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
index db69c2fe4d..9052a3ea07 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
@@ -308,14 +308,14 @@ public class Mutaters {
return ic.getPublicMethod(
x -> x.isNotStatic()
&& x.getParameterCount() == 0
- && x.getSimpleName().startsWith("to")
- && x.getSimpleName().substring(2).equalsIgnoreCase(tn)
+ && x.getNameSimple().startsWith("to")
+ && x.getNameSimple().substring(2).equalsIgnoreCase(tn)
).orElse(null);
// @formatter:on
}
private static boolean isStaticCreateMethodName(MethodInfo mi, Class<?>
ic) {
- var n = mi.getSimpleName();
+ var n = mi.getNameSimple();
var cn = ic.getSimpleName();
// @formatter:off
return isOneOf(n,
"create","from","fromValue","parse","valueOf","builder")
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index d4de60fd64..e3dc57f604 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -4630,7 +4630,7 @@ public class RestContext extends Context {
if (al.size() > 0) {
try {
if (mi.isNotPublic())
- throw
servletException("@RestOp method {0}.{1} must be defined as public.",
rci.inner().getName(), mi.getSimpleName());
+ throw
servletException("@RestOp method {0}.{1} must be defined as public.",
rci.inner().getName(), mi.getNameSimple());
RestOpContext.Builder rocb =
RestOpContext.create(mi.inner(),
restContext).beanStore(beanStore).type(opContextClass);
@@ -5980,11 +5980,11 @@ public class RestContext extends Context {
if (nn(ra[i]))
break;
} catch (ExecutableException e) {
- throw new
InternalServerError(e.unwrap(), "Could not resolve parameter {0} on method
{1}.", i, mi.getFullName());
+ throw new
InternalServerError(e.unwrap(), "Could not resolve parameter {0} on method
{1}.", i, mi.getNameFull());
}
}
if (ra[i] == null)
- throw new InternalServerError("Could not
resolve parameter {0} on method {1}.", i, mi.getFullName());
+ throw new InternalServerError("Could not
resolve parameter {0} on method {1}.", i, mi.getNameFull());
}
return ra;
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpInvoker.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpInvoker.java
index cecf686323..ab638f9e35 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpInvoker.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpInvoker.java
@@ -86,7 +86,7 @@ public class RestOpInvoker extends MethodInvoker {
res.setContent(output);
} catch (IllegalAccessException | IllegalArgumentException e) {
- throw new InternalServerError(e, "Error occurred
invoking method ''{0}''.", inner().getFullName());
+ throw new InternalServerError(e, "Error occurred
invoking method ''{0}''.", inner().getNameFull());
} catch (InvocationTargetException e) {
RestResponse res = opSession.getResponse();
Throwable e2 = e.getTargetException();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/ArgException.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/ArgException.java
index 3ff02899ae..65a4988286 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/ArgException.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/ArgException.java
@@ -46,7 +46,7 @@ public class ArgException extends InternalServerError {
* @param args The message args.
*/
public ArgException(ParameterInfo pi, String msg, Object...args) {
- super(f(msg, args) + " on parameter " + pi.getIndex() + " of
method " + pi.getMethod().getFullName() + ".");
+ super(f(msg, args) + " on parameter " + pi.getIndex() + " of
method " + pi.getMethod().getNameFull() + ".");
}
/**
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index b3da36e39d..0585133738 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -95,7 +95,7 @@ public class BasicDebugEnablement extends DebugEnablement {
.map(varResolver::resolve)
.map(Enablement::fromString)
.filter(Objects::nonNull)
- .forEach(e -> b.enable(e,
x.getFullName()))
+ .forEach(e -> b.enable(e,
x.getNameFull()))
);
// @formatter:on
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodInvoker.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodInvoker.java
index 1c4976a15b..cf6f0f1c00 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodInvoker.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodInvoker.java
@@ -53,7 +53,7 @@ public class MethodInvoker {
*
* @return The name of the method.
*/
- public String getFullName() { return m.getFullName(); }
+ public String getFullName() { return m.getNameFull(); }
/**
* Returns the stats of this method invoker.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/AnnotationInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/AnnotationInfo_Test.java
index 4a74d04824..d6a134c2f1 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/AnnotationInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/AnnotationInfo_Test.java
@@ -372,7 +372,7 @@ class AnnotationInfo_Test extends TestBase {
// Existing method
var method = ai.getMethod("value");
assertTrue(method.isPresent());
- assertEquals("value", method.get().getSimpleName());
+ assertEquals("value", method.get().getNameSimple());
// Non-existent method
var method2 = ai.getMethod("nonexistent");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ClassInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ClassInfo_Test.java
index 592823741c..311900110e 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ClassInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ClassInfo_Test.java
@@ -144,9 +144,9 @@ public class ClassInfo_Test extends TestBase {
if (t instanceof ClassInfo t5)
return t5.getNameSimple();
if (t instanceof MethodInfo t6)
- return t6.getDeclaringClass().getNameSimple() + '.' +
t6.getShortName();
+ return t6.getDeclaringClass().getNameSimple() + '.' +
t6.getNameShort();
if (t instanceof ConstructorInfo t7)
- return t7.getShortName();
+ return t7.getNameShort();
if (t instanceof FieldInfo t8)
return t8.getDeclaringClass().getNameSimple() + '.' +
t8.getName();
if (t instanceof A t9)
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ConstructorInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ConstructorInfo_Test.java
index 08bfbf8217..69f93adbf0 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ConstructorInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ConstructorInfo_Test.java
@@ -50,9 +50,9 @@ class ConstructorInfo_Test extends TestBase {
if (t instanceof ClassInfo)
return ((ClassInfo)t).getNameSimple();
if (t instanceof ConstructorInfo)
- return ((ConstructorInfo)t).getShortName();
+ return ((ConstructorInfo)t).getNameShort();
if (t instanceof Constructor)
- return
ConstructorInfo.of((Constructor<?>)t).getShortName();
+ return
ConstructorInfo.of((Constructor<?>)t).getNameShort();
return t.toString();
}
};
@@ -257,7 +257,7 @@ class ConstructorInfo_Test extends TestBase {
//====================================================================================================
@Test
void a012_getFullName() {
- var fullName = b_c2.getFullName();
+ var fullName = b_c2.getNameFull();
assertNotNull(fullName);
assertTrue(fullName.contains("B"));
assertTrue(fullName.contains("String"));
@@ -330,8 +330,8 @@ class ConstructorInfo_Test extends TestBase {
//====================================================================================================
@Test
void a018_getSimpleName() {
- assertEquals("A", a.getSimpleName());
- assertEquals("B", b_c1.getSimpleName());
+ assertEquals("A", a.getNameSimple());
+ assertEquals("B", b_c1.getNameSimple());
}
//====================================================================================================
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
index d571a3d1dc..2a48480509 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
@@ -56,7 +56,7 @@ class ExecutableInfo_Test extends TestBase {
if (t instanceof ClassInfo)
return ((ClassInfo)t).getNameSimple();
if (t instanceof ConstructorInfo)
- return ((ConstructorInfo)t).getShortName();
+ return ((ConstructorInfo)t).getNameShort();
if (t instanceof ParameterInfo)
return apply(((ParameterInfo)t).toString());
return t.toString();
@@ -307,14 +307,14 @@ class ExecutableInfo_Test extends TestBase {
@Test
void a010_getFullName() throws Exception {
// Method
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo()",
x2.getPublicMethod(x -> x.hasName("foo") && x.getParameterCount() ==
0).get().getFullName());
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo(java.lang.String)",
x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(String.class)).get().getFullName());
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo(java.util.Map<java.lang.String,java.lang.Object>)",
x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(Map.class)).get().getFullName());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo()",
x2.getPublicMethod(x -> x.hasName("foo") && x.getParameterCount() ==
0).get().getNameFull());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo(java.lang.String)",
x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(String.class)).get().getNameFull());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X.foo(java.util.Map<java.lang.String,java.lang.Object>)",
x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(Map.class)).get().getNameFull());
// Constructor
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X()",
x2.getPublicConstructor(cons -> cons.getParameterCount() ==
0).get().getFullName());
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X(java.lang.String)",
x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getFullName());
-
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X(java.util.Map<java.lang.String,java.lang.Object>)",
x2.getPublicConstructor(x ->
x.hasParameterTypes(Map.class)).get().getFullName());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X()",
x2.getPublicConstructor(cons -> cons.getParameterCount() ==
0).get().getNameFull());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X(java.lang.String)",
x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getNameFull());
+
assertEquals("org.apache.juneau.commons.reflect.ExecutableInfo_Test$X(java.util.Map<java.lang.String,java.lang.Object>)",
x2.getPublicConstructor(x ->
x.hasParameterTypes(Map.class)).get().getNameFull());
// Test line 752: getPackage() returns null branch
// Primitive types don't have packages, but we can't get
methods/constructors from primitives.
@@ -327,7 +327,7 @@ class ExecutableInfo_Test extends TestBase {
if (pkg == null) {
// Test the false branch of line 752: when
package is null, don't append package name
ConstructorInfo defaultPkgCtor =
defaultPkgClass.getPublicConstructor(cons -> cons.getParameterCount() ==
0).get();
- String fullName = defaultPkgCtor.getFullName();
+ String fullName = defaultPkgCtor.getNameFull();
// When package is null, getFullName() should
not include package prefix
assertTrue(fullName.startsWith("DefaultPackageTestClass("), "Full name should
start with class name when package is null: " + fullName);
// Verify no package prefix (no dots before the
class name, except for inner classes)
@@ -419,14 +419,14 @@ class ExecutableInfo_Test extends TestBase {
@Test
void a014_getShortName() {
// Method
- assertEquals("foo()", x2.getPublicMethod(x -> x.hasName("foo")
&& x.getParameterCount() == 0).get().getShortName());
- assertEquals("foo(String)", x2.getPublicMethod(x ->
x.hasName("foo") && x.hasParameterTypes(String.class)).get().getShortName());
- assertEquals("foo(Map)", x2.getPublicMethod(x ->
x.hasName("foo") && x.hasParameterTypes(Map.class)).get().getShortName());
+ assertEquals("foo()", x2.getPublicMethod(x -> x.hasName("foo")
&& x.getParameterCount() == 0).get().getNameShort());
+ assertEquals("foo(String)", x2.getPublicMethod(x ->
x.hasName("foo") && x.hasParameterTypes(String.class)).get().getNameShort());
+ assertEquals("foo(Map)", x2.getPublicMethod(x ->
x.hasName("foo") && x.hasParameterTypes(Map.class)).get().getNameShort());
// Constructor
- assertEquals("X()", x2.getPublicConstructor(cons ->
cons.getParameterCount() == 0).get().getShortName());
- assertEquals("X(String)", x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getShortName());
- assertEquals("X(Map)", x2.getPublicConstructor(x ->
x.hasParameterTypes(Map.class)).get().getShortName());
+ assertEquals("X()", x2.getPublicConstructor(cons ->
cons.getParameterCount() == 0).get().getNameShort());
+ assertEquals("X(String)", x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getNameShort());
+ assertEquals("X(Map)", x2.getPublicConstructor(x ->
x.hasParameterTypes(Map.class)).get().getNameShort());
}
//====================================================================================================
@@ -435,12 +435,12 @@ class ExecutableInfo_Test extends TestBase {
@Test
void a015_getSimpleName() {
// Method
- assertEquals("foo", x2.getPublicMethod(x -> x.hasName("foo") &&
x.getParameterCount() == 0).get().getSimpleName());
- assertEquals("foo", x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(String.class)).get().getSimpleName());
+ assertEquals("foo", x2.getPublicMethod(x -> x.hasName("foo") &&
x.getParameterCount() == 0).get().getNameSimple());
+ assertEquals("foo", x2.getPublicMethod(x -> x.hasName("foo") &&
x.hasParameterTypes(String.class)).get().getNameSimple());
// Constructor
- assertEquals("X", x2.getPublicConstructor(cons ->
cons.getParameterCount() == 0).get().getSimpleName());
- assertEquals("X", x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getSimpleName());
+ assertEquals("X", x2.getPublicConstructor(cons ->
cons.getParameterCount() == 0).get().getNameSimple());
+ assertEquals("X", x2.getPublicConstructor(x ->
x.hasParameterTypes(String.class)).get().getNameSimple());
}
//====================================================================================================
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/FieldInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/FieldInfo_Test.java
index 10691491ea..450f7e773c 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/FieldInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/FieldInfo_Test.java
@@ -343,8 +343,8 @@ class FieldInfo_Test extends TestBase {
//====================================================================================================
@Test
void a010_getFullName() throws Exception {
- String fullName1 = g_field1.getFullName();
- String fullName2 = g_field2.getFullName();
+ String fullName1 = g_field1.getNameFull();
+ String fullName2 = g_field2.getNameFull();
// Test line 449: getPackage() returns null (default package
class)
// A field can have a null package if its declaring class is in
the default package
@@ -356,7 +356,7 @@ class FieldInfo_Test extends TestBase {
if (pkg == null) {
// Test the false branch of line 449: when
package is null, don't append package name
FieldInfo defaultPkgField =
defaultPkgClass.getPublicField(x -> x.hasName("testField")).get();
- String fullName = defaultPkgField.getFullName();
+ String fullName = defaultPkgField.getNameFull();
// When package is null, getFullName() should
not include package prefix
assertTrue(fullName.startsWith("DefaultPackageTestClass"), "Full name should
start with class name when package is null: " + fullName);
assertTrue(fullName.endsWith(".testField"),
"Full name should end with field name: " + fullName);
@@ -374,12 +374,12 @@ class FieldInfo_Test extends TestBase {
assertTrue(fullName2.startsWith("org.apache.juneau.commons.reflect."));
// Test memoization - should return same instance
- String name1 = g_field1.getFullName();
- String name2 = g_field1.getFullName();
+ String name1 = g_field1.getNameFull();
+ String name2 = g_field1.getNameFull();
assertSame(name1, name2);
// Test with inner class
- String innerFullName = inner_field.getFullName();
+ String innerFullName = inner_field.getNameFull();
assertTrue(innerFullName.contains("FieldInfo_Test$InnerClass"));
assertTrue(innerFullName.endsWith(".innerField"));
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/MethodInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/MethodInfo_Test.java
index a441078eb9..4fd449cfa7 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/MethodInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/MethodInfo_Test.java
@@ -67,9 +67,9 @@ class MethodInfo_Test extends TestBase {
if (t == null)
return null;
if (t instanceof MethodInfo t2)
- return t2.getDeclaringClass().getNameSimple() +
'.' + ((MethodInfo)t).getShortName();
+ return t2.getDeclaringClass().getNameSimple() +
'.' + ((MethodInfo)t).getNameShort();
if (t instanceof Method t2)
- return t2.getDeclaringClass().getSimpleName() +
'.' + MethodInfo.of((Method)t).getShortName();
+ return t2.getDeclaringClass().getSimpleName() +
'.' + MethodInfo.of((Method)t).getNameShort();
if (t instanceof List<?> t2)
return
(t2.stream().map(this).collect(Collectors.joining(",")));
if (t instanceof AnnotationInfo t2)
@@ -697,7 +697,7 @@ class MethodInfo_Test extends TestBase {
//====================================================================================================
@Test
void a036_getFullName() {
- var fullName = e_a1.getFullName();
+ var fullName = e_a1.getNameFull();
assertNotNull(fullName);
assertTrue(fullName.contains("MethodInfo_Test$E"));
assertTrue(fullName.contains("a1"));
@@ -724,9 +724,9 @@ class MethodInfo_Test extends TestBase {
//====================================================================================================
@Test
void a038_getShortName() {
- assertEquals("m()", a_m.getShortName());
- assertEquals("a1(CharSequence)", e_a1.getShortName());
- assertEquals("a2(int,int)", e_a2.getShortName());
+ assertEquals("m()", a_m.getNameShort());
+ assertEquals("a1(CharSequence)", e_a1.getNameShort());
+ assertEquals("a2(int,int)", e_a2.getNameShort());
}
//====================================================================================================
@@ -734,8 +734,8 @@ class MethodInfo_Test extends TestBase {
//====================================================================================================
@Test
void a039_getSimpleName() {
- assertEquals("m", a_m.getSimpleName());
- assertEquals("a1", e_a1.getSimpleName());
+ assertEquals("m", a_m.getNameSimple());
+ assertEquals("a1", e_a1.getNameSimple());
}
//====================================================================================================
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ParameterInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ParameterInfo_Test.java
index e386019f21..5ab6a63a28 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ParameterInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ParameterInfo_Test.java
@@ -113,7 +113,7 @@ class ParameterInfo_Test extends TestBase {
if (isArray(t))
return StreamSupport.stream(toList(t,
Object.class).spliterator(), false).map(this).collect(Collectors.joining(","));
if (t instanceof MethodInfo)
- return
((MethodInfo)t).getDeclaringClass().getNameSimple() + '.' +
((MethodInfo)t).getShortName();
+ return
((MethodInfo)t).getDeclaringClass().getNameSimple() + '.' +
((MethodInfo)t).getNameShort();
if (t instanceof CA)
return "@CA(" + ((CA)t).value() + ")";
if (t instanceof DA)