This is an automated email from the ASF dual-hosted git repository.

iluo pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/2.6.x by this push:
     new 342e814  Activate SPI sort (#3412)
342e814 is described below

commit 342e814296b08b3383bd0815978f3ad9389c0586
Author: 杜小东 <[email protected]>
AuthorDate: Fri Feb 1 15:42:14 2019 +0800

    Activate SPI sort (#3412)
    
    * 修正排序
    
    * Update 
dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/support/ActivateComparator.java
    
    code style
    
    Co-Authored-By: dongYES <[email protected]>
---
 .../extension/support/ActivateComparator.java      | 180 +++++++++++----------
 1 file changed, 94 insertions(+), 86 deletions(-)

diff --git 
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/support/ActivateComparator.java
 
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/support/ActivateComparator.java
index 7cf7a1b..1386efa 100644
--- 
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/support/ActivateComparator.java
+++ 
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/support/ActivateComparator.java
@@ -1,86 +1,94 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.common.extension.support;
-
-import com.alibaba.dubbo.common.extension.Activate;
-import com.alibaba.dubbo.common.extension.ExtensionLoader;
-import com.alibaba.dubbo.common.extension.SPI;
-
-import java.util.Comparator;
-
-/**
- * OrderComparetor
- */
-public class ActivateComparator implements Comparator<Object> {
-
-    public static final Comparator<Object> COMPARATOR = new 
ActivateComparator();
-
-    @Override
-    public int compare(Object o1, Object o2) {
-        if (o1 == null && o2 == null) {
-            return 0;
-        }
-        if (o1 == null) {
-            return -1;
-        }
-        if (o2 == null) {
-            return 1;
-        }
-        if (o1.equals(o2)) {
-            return 0;
-        }
-        Activate a1 = o1.getClass().getAnnotation(Activate.class);
-        Activate a2 = o2.getClass().getAnnotation(Activate.class);
-        if ((a1.before().length > 0 || a1.after().length > 0
-                || a2.before().length > 0 || a2.after().length > 0)
-                && o1.getClass().getInterfaces().length > 0
-                && 
o1.getClass().getInterfaces()[0].isAnnotationPresent(SPI.class)) {
-            ExtensionLoader<?> extensionLoader = 
ExtensionLoader.getExtensionLoader(o1.getClass().getInterfaces()[0]);
-            if (a1.before().length > 0 || a1.after().length > 0) {
-                String n2 = extensionLoader.getExtensionName(o2.getClass());
-                for (String before : a1.before()) {
-                    if (before.equals(n2)) {
-                        return -1;
-                    }
-                }
-                for (String after : a1.after()) {
-                    if (after.equals(n2)) {
-                        return 1;
-                    }
-                }
-            }
-            if (a2.before().length > 0 || a2.after().length > 0) {
-                String n1 = extensionLoader.getExtensionName(o1.getClass());
-                for (String before : a2.before()) {
-                    if (before.equals(n1)) {
-                        return 1;
-                    }
-                }
-                for (String after : a2.after()) {
-                    if (after.equals(n1)) {
-                        return -1;
-                    }
-                }
-            }
-        }
-        int n1 = a1 == null ? 0 : a1.order();
-        int n2 = a2 == null ? 0 : a2.order();
-        // never return 0 even if n1 equals n2, otherwise, o1 and o2 will 
override each other in collection like HashSet
-        return n1 > n2 ? 1 : -1;
-    }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.dubbo.common.extension.support;
+
+import com.alibaba.dubbo.common.extension.Activate;
+import com.alibaba.dubbo.common.extension.ExtensionLoader;
+import com.alibaba.dubbo.common.extension.SPI;
+
+import java.util.Comparator;
+
+/**
+ * OrderComparetor
+ */
+public class ActivateComparator implements Comparator<Object> {
+
+    public static final Comparator<Object> COMPARATOR = new 
ActivateComparator();
+
+    @Override
+    public int compare(Object o1, Object o2) {
+        if (o1 == null && o2 == null) {
+            return 0;
+        }
+        if (o1 == null) {
+            return -1;
+        }
+        if (o2 == null) {
+            return 1;
+        }
+        if (o1.equals(o2)) {
+            return 0;
+        }
+        Activate a1 = o1.getClass().getAnnotation(Activate.class);
+        Activate a2 = o2.getClass().getAnnotation(Activate.class);
+        Class<?> spiClass = null;
+        if (o1.getClass().getInterfaces().length > 0) {
+            for (Class<?> item : o1.getClass().getInterfaces()) {
+                if (item.isAnnotationPresent(SPI.class)) {
+                    spiClass = item;
+                    break;
+                }
+            }
+        }
+        if ((a1.before().length > 0 || a1.after().length > 0
+                || a2.before().length > 0 || a2.after().length > 0)
+                && spiClass != null) {
+            ExtensionLoader<?> extensionLoader = 
ExtensionLoader.getExtensionLoader(spiClass);
+            if (a1.before().length > 0 || a1.after().length > 0) {
+                String n2 = extensionLoader.getExtensionName(o2.getClass());
+                for (String before : a1.before()) {
+                    if (before.equals(n2)) {
+                        return -1;
+                    }
+                }
+                for (String after : a1.after()) {
+                    if (after.equals(n2)) {
+                        return 1;
+                    }
+                }
+            }
+            if (a2.before().length > 0 || a2.after().length > 0) {
+                String n1 = extensionLoader.getExtensionName(o1.getClass());
+                for (String before : a2.before()) {
+                    if (before.equals(n1)) {
+                        return 1;
+                    }
+                }
+                for (String after : a2.after()) {
+                    if (after.equals(n1)) {
+                        return -1;
+                    }
+                }
+            }
+        }
+        int n1 = a1 == null ? 0 : a1.order();
+        int n2 = a2 == null ? 0 : a2.order();
+        // never return 0 even if n1 equals n2, otherwise, o1 and o2 will 
override each other in collection like HashSet
+        return n1 > n2 ? 1 : -1;
+    }
+
+}

Reply via email to