You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by cr...@apache.org on 2019/02/15 09:05:34 UTC
[incubator-dubbo] branch master updated: [Enhancement]: language
level migration (#3485)
This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 9c049f6 [Enhancement]: language level migration (#3485)
9c049f6 is described below
commit 9c049f6207fd444401da076e558996037db40745
Author: kezhenxu94 <ke...@163.com>
AuthorDate: Fri Feb 15 17:05:10 2019 +0800
[Enhancement]: language level migration (#3485)
* use java7 diamond operator
* replace Collections.sort with List.sort
* extract duplicated code blocks
* use StandardCharsets.UTF_8
* use try-with-resources
* use java7 diamond operator
* enhance log message
* fix unit tests failures
---
.../dubbo/common/extension/ExtensionLoader.java | 59 +++++++++++-----------
.../common/extension/ExtensionLoaderTest.java | 6 +--
2 files changed, 32 insertions(+), 33 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index e47e19d..3f2709e 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -33,6 +33,7 @@ import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -71,9 +72,9 @@ public class ExtensionLoader<T> {
private static final Pattern NAME_SEPARATOR = Pattern.compile("\\s*[,]+\\s*");
- private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<Class<?>, ExtensionLoader<?>>();
+ private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<>();
- private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<Class<?>, Object>();
+ private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<>();
// ==============================
@@ -81,20 +82,20 @@ public class ExtensionLoader<T> {
private final ExtensionFactory objectFactory;
- private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<Class<?>, String>();
+ private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<>();
- private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<Map<String, Class<?>>>();
+ private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<>();
- private final Map<String, Object> cachedActivates = new ConcurrentHashMap<String, Object>();
- private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<String, Holder<Object>>();
- private final Holder<Object> cachedAdaptiveInstance = new Holder<Object>();
+ private final Map<String, Object> cachedActivates = new ConcurrentHashMap<>();
+ private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<>();
+ private final Holder<Object> cachedAdaptiveInstance = new Holder<>();
private volatile Class<?> cachedAdaptiveClass = null;
private String cachedDefaultName;
private volatile Throwable createAdaptiveInstanceError;
private Set<Class<?>> cachedWrapperClasses;
- private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<String, IllegalStateException>();
+ private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<>();
private ExtensionLoader(Class<?> type) {
this.type = type;
@@ -111,11 +112,11 @@ public class ExtensionLoader<T> {
throw new IllegalArgumentException("Extension type == null");
}
if (!type.isInterface()) {
- throw new IllegalArgumentException("Extension type (" + type + ") is not interface!");
+ throw new IllegalArgumentException("Extension type (" + type + ") is not an interface!");
}
if (!withExtensionAnnotation(type)) {
throw new IllegalArgumentException("Extension type (" + type +
- ") is not extension, because WITHOUT @" + SPI.class.getSimpleName() + " Annotation!");
+ ") is not an extension, because it is NOT annotated with @" + SPI.class.getSimpleName() + "!");
}
ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);
@@ -201,8 +202,8 @@ public class ExtensionLoader<T> {
* @see org.apache.dubbo.common.extension.Activate
*/
public List<T> getActivateExtension(URL url, String[] values, String group) {
- List<T> exts = new ArrayList<T>();
- List<String> names = values == null ? new ArrayList<String>(0) : Arrays.asList(values);
+ List<T> exts = new ArrayList<>();
+ List<String> names = values == null ? new ArrayList<>(0) : Arrays.asList(values);
if (!names.contains(Constants.REMOVE_VALUE_PREFIX + Constants.DEFAULT_KEY)) {
getExtensionClasses();
for (Map.Entry<String, Object> entry : cachedActivates.entrySet()) {
@@ -229,9 +230,9 @@ public class ExtensionLoader<T> {
}
}
}
- Collections.sort(exts, ActivateComparator.COMPARATOR);
+ exts.sort(ActivateComparator.COMPARATOR);
}
- List<T> usrs = new ArrayList<T>();
+ List<T> usrs = new ArrayList<>();
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
if (!name.startsWith(Constants.REMOVE_VALUE_PREFIX)
@@ -297,12 +298,17 @@ public class ExtensionLoader<T> {
if (StringUtils.isEmpty(name)) {
throw new IllegalArgumentException("Extension name == null");
}
+ Holder<Object> holder = getOrCreateHolder(name);
+ return (T) holder.get();
+ }
+
+ private Holder<Object> getOrCreateHolder(String name) {
Holder<Object> holder = cachedInstances.get(name);
if (holder == null) {
- cachedInstances.putIfAbsent(name, new Holder<Object>());
+ cachedInstances.putIfAbsent(name, new Holder<>());
holder = cachedInstances.get(name);
}
- return (T) holder.get();
+ return holder;
}
/**
@@ -313,7 +319,7 @@ public class ExtensionLoader<T> {
* @see #getSupportedExtensions()
*/
public Set<String> getLoadedExtensions() {
- return Collections.unmodifiableSet(new TreeSet<String>(cachedInstances.keySet()));
+ return Collections.unmodifiableSet(new TreeSet<>(cachedInstances.keySet()));
}
public Object getLoadedAdaptiveExtensionInstances() {
@@ -332,11 +338,7 @@ public class ExtensionLoader<T> {
if ("true".equals(name)) {
return getDefaultExtension();
}
- Holder<Object> holder = cachedInstances.get(name);
- if (holder == null) {
- cachedInstances.putIfAbsent(name, new Holder<Object>());
- holder = cachedInstances.get(name);
- }
+ Holder<Object> holder = getOrCreateHolder(name);
Object instance = holder.get();
if (instance == null) {
synchronized (holder) {
@@ -371,7 +373,7 @@ public class ExtensionLoader<T> {
public Set<String> getSupportedExtensions() {
Map<String, Class<?>> clazzes = getExtensionClasses();
- return Collections.unmodifiableSet(new TreeSet<String>(clazzes.keySet()));
+ return Collections.unmodifiableSet(new TreeSet<>(clazzes.keySet()));
}
/**
@@ -680,8 +682,7 @@ public class ExtensionLoader<T> {
private void loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader, java.net.URL resourceURL) {
try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "utf-8"));
- try {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
final int ci = line.indexOf('#');
@@ -706,8 +707,6 @@ public class ExtensionLoader<T> {
}
}
}
- } finally {
- reader.close();
}
} catch (Throwable t) {
logger.error("Exception occurred when loading extension class (interface: " +
@@ -733,7 +732,7 @@ public class ExtensionLoader<T> {
throw new IllegalStateException("No such extension name for the class " + clazz.getName() + " in the config " + resourceURL);
}
}
-
+
String[] names = NAME_SEPARATOR.split(name);
if (ArrayUtils.isNotEmpty(names)) {
cacheActivateClass(clazz, names[0]);
@@ -798,7 +797,7 @@ public class ExtensionLoader<T> {
}
/**
- * cache wrapper class
+ * cache wrapper class
* <p>
* like: ProtocolFilterWrapper, ProtocolListenerWrapper
*/
@@ -810,7 +809,7 @@ public class ExtensionLoader<T> {
}
/**
- * test if clazz is a wrapper class
+ * test if clazz is a wrapper class
* <p>
* which has Constructor with given class type as its only argument
*/
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
index b0e878c..12d8aa9 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
@@ -87,7 +87,7 @@ public class ExtensionLoaderTest {
fail();
} catch (IllegalArgumentException expected) {
assertThat(expected.getMessage(),
- containsString("Extension type (class org.apache.dubbo.common.extension.ExtensionLoaderTest) is not interface"));
+ containsString("Extension type (class org.apache.dubbo.common.extension.ExtensionLoaderTest) is not an interface"));
}
}
@@ -99,8 +99,8 @@ public class ExtensionLoaderTest {
} catch (IllegalArgumentException expected) {
assertThat(expected.getMessage(),
allOf(containsString("org.apache.dubbo.common.extension.NoSpiExt"),
- containsString("is not extension"),
- containsString("WITHOUT @SPI Annotation")));
+ containsString("is not an extension"),
+ containsString("NOT annotated with @SPI")));
}
}