ralf0131 closed pull request #1646: Method extraction & Unnecessary code remove
& Typo fix
URL: https://github.com/apache/incubator-dubbo/pull/1646
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java
index a805943942..b5d0e209e8 100644
---
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java
+++
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java
@@ -238,7 +238,7 @@ private boolean isMatchGroup(String group, String[] groups)
{
private boolean isActive(Activate activate, URL url) {
String[] keys = activate.value();
- if (keys == null || keys.length == 0) {
+ if (keys.length == 0) {
return true;
}
for (String key : keys) {
@@ -491,7 +491,7 @@ private T createExtension(String name) {
try {
T instance = (T) EXTENSION_INSTANCES.get(clazz);
if (instance == null) {
- EXTENSION_INSTANCES.putIfAbsent(clazz, (T)
clazz.newInstance());
+ EXTENSION_INSTANCES.putIfAbsent(clazz, clazz.newInstance());
instance = (T) EXTENSION_INSTANCES.get(clazz);
}
injectExtension(instance);
@@ -565,7 +565,7 @@ private T injectExtension(T instance) {
final SPI defaultAnnotation = type.getAnnotation(SPI.class);
if (defaultAnnotation != null) {
String value = defaultAnnotation.value();
- if (value != null && (value = value.trim()).length() > 0) {
+ if ((value = value.trim()).length() > 0) {
String[] names = NAME_SEPARATOR.split(value);
if (names.length > 1) {
throw new IllegalStateException("more than 1 default
extension name on extension " + type.getName()
@@ -576,13 +576,13 @@ private T injectExtension(T instance) {
}
Map<String, Class<?>> extensionClasses = new HashMap<String,
Class<?>>();
- loadFile(extensionClasses, DUBBO_INTERNAL_DIRECTORY);
- loadFile(extensionClasses, DUBBO_DIRECTORY);
- loadFile(extensionClasses, SERVICES_DIRECTORY);
+ loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY);
+ loadDirectory(extensionClasses, DUBBO_DIRECTORY);
+ loadDirectory(extensionClasses, SERVICES_DIRECTORY);
return extensionClasses;
}
- private void loadFile(Map<String, Class<?>> extensionClasses, String dir) {
+ private void loadDirectory(Map<String, Class<?>> extensionClasses, String
dir) {
String fileName = dir + type.getName();
try {
Enumeration<java.net.URL> urls;
@@ -594,99 +594,112 @@ private void loadFile(Map<String, Class<?>>
extensionClasses, String dir) {
}
if (urls != null) {
while (urls.hasMoreElements()) {
- java.net.URL url = urls.nextElement();
- try {
- BufferedReader reader = new BufferedReader(new
InputStreamReader(url.openStream(), "utf-8"));
+ java.net.URL resourceURL = urls.nextElement();
+ loadResource(extensionClasses, classLoader, resourceURL);
+ }
+ }
+ } catch (Throwable t) {
+ logger.error("Exception when load extension class(interface: " +
+ type + ", description file: " + fileName + ").", 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 {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ final int ci = line.indexOf('#');
+ if (ci >= 0) line = line.substring(0, ci);
+ line = line.trim();
+ if (line.length() > 0) {
try {
- String line = null;
- while ((line = reader.readLine()) != null) {
- final int ci = line.indexOf('#');
- if (ci >= 0) line = line.substring(0, ci);
- line = line.trim();
- if (line.length() > 0) {
- try {
- String name = null;
- int i = line.indexOf('=');
- if (i > 0) {
- name = line.substring(0, i).trim();
- line = line.substring(i +
1).trim();
- }
- if (line.length() > 0) {
- Class<?> clazz =
Class.forName(line, true, classLoader);
- if (!type.isAssignableFrom(clazz))
{
- throw new
IllegalStateException("Error when load extension class(interface: " +
- type + ", class line:
" + clazz.getName() + "), class "
- + clazz.getName() +
"is not subtype of interface.");
- }
- if
(clazz.isAnnotationPresent(Adaptive.class)) {
- if (cachedAdaptiveClass ==
null) {
- cachedAdaptiveClass =
clazz;
- } else if
(!cachedAdaptiveClass.equals(clazz)) {
- throw new
IllegalStateException("More than 1 adaptive class found: "
- +
cachedAdaptiveClass.getClass().getName()
- + ", " +
clazz.getClass().getName());
- }
- } else {
- try {
- clazz.getConstructor(type);
- Set<Class<?>> wrappers =
cachedWrapperClasses;
- if (wrappers == null) {
- cachedWrapperClasses =
new ConcurrentHashSet<Class<?>>();
- wrappers =
cachedWrapperClasses;
- }
- wrappers.add(clazz);
- } catch (NoSuchMethodException
e) {
- clazz.getConstructor();
- if (name == null ||
name.length() == 0) {
- name =
findAnnotationName(clazz);
- if (name == null ||
name.length() == 0) {
- if
(clazz.getSimpleName().length() > type.getSimpleName().length()
- &&
clazz.getSimpleName().endsWith(type.getSimpleName())) {
- name =
clazz.getSimpleName().substring(0, clazz.getSimpleName().length() -
type.getSimpleName().length()).toLowerCase();
- } else {
- throw new
IllegalStateException("No such extension name for the class " + clazz.getName()
+ " in the config " + url);
- }
- }
- }
- String[] names =
NAME_SEPARATOR.split(name);
- if (names != null &&
names.length > 0) {
- Activate activate =
clazz.getAnnotation(Activate.class);
- if (activate != null) {
-
cachedActivates.put(names[0], activate);
- }
- for (String n : names)
{
- if
(!cachedNames.containsKey(clazz)) {
-
cachedNames.put(clazz, n);
- }
- Class<?> c =
extensionClasses.get(n);
- if (c == null) {
-
extensionClasses.put(n, clazz);
- } else if (c !=
clazz) {
- throw new
IllegalStateException("Duplicate extension " + type.getName() + " name " + n +
" on " + c.getName() + " and " + clazz.getName());
- }
- }
- }
- }
- }
- }
- } catch (Throwable t) {
- IllegalStateException e = new
IllegalStateException("Failed to load extension class(interface: " + type + ",
class line: " + line + ") in " + url + ", cause: " + t.getMessage(), t);
- exceptions.put(line, e);
- }
- }
- } // end of while read lines
- } finally {
- reader.close();
+ String name = null;
+ int i = line.indexOf('=');
+ if (i > 0) {
+ name = line.substring(0, i).trim();
+ line = line.substring(i + 1).trim();
+ }
+ if (line.length() > 0) {
+ loadClass(extensionClasses, resourceURL,
Class.forName(line, true, classLoader), name);
+ }
+ } catch (Throwable t) {
+ IllegalStateException e = new
IllegalStateException("Failed to load extension class(interface: " + type + ",
class line: " + line + ") in " + resourceURL + ", cause: " + t.getMessage(), t);
+ exceptions.put(line, e);
}
- } catch (Throwable t) {
- logger.error("Exception when load extension
class(interface: " +
- type + ", class file: " + url + ") in " + url,
t);
}
- } // end of while urls
+ }
+ } finally {
+ reader.close();
}
} catch (Throwable t) {
logger.error("Exception when load extension class(interface: " +
- type + ", description file: " + fileName + ").", t);
+ type + ", class file: " + resourceURL + ") in " +
resourceURL, t);
+ }
+ }
+
+ private void loadClass(Map<String, Class<?>> extensionClasses,
java.net.URL resourceURL, Class<?> clazz, String name) throws
NoSuchMethodException {
+ if (!type.isAssignableFrom(clazz)) {
+ throw new IllegalStateException("Error when load extension
class(interface: " +
+ type + ", class line: " + clazz.getName() + "), class "
+ + clazz.getName() + "is not subtype of interface.");
+ }
+ if (clazz.isAnnotationPresent(Adaptive.class)) {
+ if (cachedAdaptiveClass == null) {
+ cachedAdaptiveClass = clazz;
+ } else if (!cachedAdaptiveClass.equals(clazz)) {
+ throw new IllegalStateException("More than 1 adaptive class
found: "
+ + cachedAdaptiveClass.getClass().getName()
+ + ", " + clazz.getClass().getName());
+ }
+ } else if (isWrapperClass(clazz)) {
+ Set<Class<?>> wrappers = cachedWrapperClasses;
+ if (wrappers == null) {
+ cachedWrapperClasses = new ConcurrentHashSet<Class<?>>();
+ wrappers = cachedWrapperClasses;
+ }
+ wrappers.add(clazz);
+ } else {
+ clazz.getConstructor();
+ if (name == null || name.length() == 0) {
+ name = findAnnotationName(clazz);
+ if (name == null || name.length() == 0) {
+ if (clazz.getSimpleName().length() >
type.getSimpleName().length()
+ &&
clazz.getSimpleName().endsWith(type.getSimpleName())) {
+ name = clazz.getSimpleName().substring(0,
clazz.getSimpleName().length() - type.getSimpleName().length()).toLowerCase();
+ } else {
+ throw new IllegalStateException("No such extension
name for the class " + clazz.getName() + " in the config " + resourceURL);
+ }
+ }
+ }
+ String[] names = NAME_SEPARATOR.split(name);
+ if (names != null && names.length > 0) {
+ Activate activate = clazz.getAnnotation(Activate.class);
+ if (activate != null) {
+ cachedActivates.put(names[0], activate);
+ }
+ for (String n : names) {
+ if (!cachedNames.containsKey(clazz)) {
+ cachedNames.put(clazz, n);
+ }
+ Class<?> c = extensionClasses.get(n);
+ if (c == null) {
+ extensionClasses.put(n, clazz);
+ } else if (c != clazz) {
+ throw new IllegalStateException("Duplicate extension "
+ type.getName() + " name " + n + " on " + c.getName() + " and " +
clazz.getName());
+ }
+ }
+ }
+ }
+ }
+
+ private boolean isWrapperClass(Class<?> clazz) {
+ try {
+ clazz.getConstructor(type);
+ return true;
+ } catch (NoSuchMethodException e) {
+ return false;
}
}
@@ -728,7 +741,7 @@ private T createAdaptiveExtension() {
}
private String createAdaptiveExtensionClassCode() {
- StringBuilder codeBuidler = new StringBuilder();
+ StringBuilder codeBuilder = new StringBuilder();
Method[] methods = type.getMethods();
boolean hasAdaptiveAnnotation = false;
for (Method m : methods) {
@@ -741,9 +754,9 @@ private String createAdaptiveExtensionClassCode() {
if (!hasAdaptiveAnnotation)
throw new IllegalStateException("No adaptive method on extension "
+ type.getName() + ", refuse to create the adaptive class!");
- codeBuidler.append("package " + type.getPackage().getName() + ";");
- codeBuidler.append("\nimport " + ExtensionLoader.class.getName() +
";");
- codeBuidler.append("\npublic class " + type.getSimpleName() +
"$Adaptive" + " implements " + type.getCanonicalName() + " {");
+ codeBuilder.append("package
").append(type.getPackage().getName()).append(";");
+ codeBuilder.append("\nimport
").append(ExtensionLoader.class.getName()).append(";");
+ codeBuilder.append("\npublic class
").append(type.getSimpleName()).append("$Adaptive").append(" implements
").append(type.getCanonicalName()).append(" {");
for (Method method : methods) {
Class<?> rt = method.getReturnType();
@@ -900,34 +913,34 @@ private String createAdaptiveExtensionClassCode() {
code.append(");");
}
- codeBuidler.append("\npublic " + rt.getCanonicalName() + " " +
method.getName() + "(");
+ codeBuilder.append("\npublic
").append(rt.getCanonicalName()).append("
").append(method.getName()).append("(");
for (int i = 0; i < pts.length; i++) {
if (i > 0) {
- codeBuidler.append(", ");
+ codeBuilder.append(", ");
}
- codeBuidler.append(pts[i].getCanonicalName());
- codeBuidler.append(" ");
- codeBuidler.append("arg" + i);
+ codeBuilder.append(pts[i].getCanonicalName());
+ codeBuilder.append(" ");
+ codeBuilder.append("arg").append(i);
}
- codeBuidler.append(")");
+ codeBuilder.append(")");
if (ets.length > 0) {
- codeBuidler.append(" throws ");
+ codeBuilder.append(" throws ");
for (int i = 0; i < ets.length; i++) {
if (i > 0) {
- codeBuidler.append(", ");
+ codeBuilder.append(", ");
}
- codeBuidler.append(ets[i].getCanonicalName());
+ codeBuilder.append(ets[i].getCanonicalName());
}
}
- codeBuidler.append(" {");
- codeBuidler.append(code.toString());
- codeBuidler.append("\n}");
+ codeBuilder.append(" {");
+ codeBuilder.append(code.toString());
+ codeBuilder.append("\n}");
}
- codeBuidler.append("\n}");
+ codeBuilder.append("\n}");
if (logger.isDebugEnabled()) {
- logger.debug(codeBuidler.toString());
+ logger.debug(codeBuilder.toString());
}
- return codeBuidler.toString();
+ return codeBuilder.toString();
}
@Override
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services