code simplifications made possible with Java 8; additional null-safe method override
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
index e789a5f..fe324f4 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
@@ -27,7 +27,8 @@
* {@link Weavable} {@link Package}.
*/
public class WeavablePackage extends Weavable<WeavablePackage, Package> {
- private static final Comparator<WeavablePackage> CMP = Comparator.nullsFirst(Comparator.comparing(WeavablePackage::getTarget, Comparator.nullsFirst(Comparator.comparing(Package::getName))));
+ private static final Comparator<WeavablePackage> CMP = Comparator.nullsFirst(Comparator
+ .comparing(WeavablePackage::getTarget, Comparator.nullsFirst(Comparator.comparing(Package::getName))));
private final ConcurrentNavigableMap<String, WeavableClass<?>> clazzes = new ConcurrentSkipListMap<>();
@@ -45,17 +46,9 @@
* @param <T> generic type of {@code cls}
* @return {@link WeavableClass}
*/
+ @SuppressWarnings("unchecked")
public synchronized <T> WeavableClass<T> getWeavable(final Class<T> cls) {
- final String key = cls.getName();
- if (clazzes.containsKey(key)) {
- @SuppressWarnings("unchecked")
- final WeavableClass<T> result = (WeavableClass<T>) clazzes.get(key);
- return result;
- }
- final WeavableClass<T> result = new WeavableClass<>(cls, this);
- @SuppressWarnings("unchecked")
- final WeavableClass<T> faster = (WeavableClass<T>) clazzes.putIfAbsent(key, result);
- return faster == null ? result : faster;
+ return (WeavableClass<T>) clazzes.computeIfAbsent(cls.getName(), k -> new WeavableClass<>(cls, this));
}
/**
@@ -75,4 +68,15 @@
public int compareTo(final WeavablePackage arg0) {
return CMP.compare(this, arg0);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ if (getTarget() == null) {
+ return "Weavable default package";
+ }
+ return super.toString();
+ }
}