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

Reply via email to