Lines 15-20
Link Here
|
15 |
import java.util.ArrayList; |
15 |
import java.util.ArrayList; |
16 |
import java.util.Arrays; |
16 |
import java.util.Arrays; |
17 |
import java.util.Collections; |
17 |
import java.util.Collections; |
|
|
18 |
import java.util.Comparator; |
18 |
import java.util.List; |
19 |
import java.util.List; |
19 |
import java.util.concurrent.CopyOnWriteArrayList; |
20 |
import java.util.concurrent.CopyOnWriteArrayList; |
20 |
|
21 |
|
Lines 61-67
Link Here
|
61 |
{ |
62 |
{ |
62 |
if (isValidDelegate(delegate)) |
63 |
if (isValidDelegate(delegate)) |
63 |
{ |
64 |
{ |
64 |
_delegates.addIfAbsent(delegate); |
65 |
synchronized(_delegates) |
|
|
66 |
{ |
67 |
_delegates.addIfAbsent(delegate); |
68 |
if (_delegates.size() > 1) |
69 |
{ |
70 |
List<IAdaptable> delegates = new ArrayList<IAdaptable>(_delegates); |
71 |
|
72 |
Collections.sort(delegates, new Comparator() |
73 |
{ |
74 |
public int compare(Object delegate1, Object delegate2) |
75 |
{ |
76 |
final Class<?> clazz1 = delegate1.getClass(); |
77 |
final Class<?> clazz2 = delegate2.getClass(); |
78 |
|
79 |
Package package1 = clazz1.getPackage(); |
80 |
Package package2 = clazz2.getPackage(); |
81 |
boolean package1IsOSS = package1.getName().startsWith("org.eclipse.jst"); //$NON-NLS-1$ |
82 |
boolean package2IsOSS = package2.getName().startsWith("org.eclipse.jst"); //$NON-NLS-1$ |
83 |
|
84 |
if (package1IsOSS && !package2IsOSS) |
85 |
{ |
86 |
// sort the oss one after the non-oss one |
87 |
return 1; |
88 |
} |
89 |
else if (!package1IsOSS && package2IsOSS) |
90 |
{ |
91 |
return -1; |
92 |
} |
93 |
|
94 |
// otherwise they are either both oss or both non-oss, so just |
95 |
// sort canonically by name. |
96 |
return clazz1.getName().compareTo(clazz2.getName()); |
97 |
} |
98 |
}); |
99 |
_delegates.clear(); |
100 |
_delegates.addAll(delegates); |
101 |
} |
102 |
} |
65 |
} |
103 |
} |
66 |
} |
104 |
} |
67 |
|
105 |
|