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;
+ }
+
+}