Bug 508852: [otre] Team causes ClassNotFoundException if roles bind to
different base plugins
diff --git a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBinding.java b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBinding.java
index 81c5b2b..164e67b 100644
--- a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBinding.java
+++ b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBinding.java
@@ -108,6 +108,15 @@
}
}
+ void connectEquivalent(TeamBinding equivalent) {
+ this.equivalenceSet.add(equivalent);
+ boolean locallyHaveBases = !this.baseClassNames.isEmpty();
+ if (!equivalent.baseClassNames.isEmpty())
+ this.baseClassNames.addAll(equivalent.baseClassNames);
+ if (locallyHaveBases)
+ equivalent.baseClassNames.addAll(this.baseClassNames);
+ }
+
@SuppressWarnings("unchecked")
public @Nullable Class<? extends Team> loadTeamClass() {
if (teamClass != null) return teamClass;
@@ -296,8 +305,10 @@
// do we have TeamBindings representing the same team class (from different aspect bindings)?
Set<TeamBinding> equivalenceSet = teamLookup.get(team.teamName);
- if (equivalenceSet != null)
- team.equivalenceSet.addAll(equivalenceSet);
+ if (equivalenceSet != null) {
+ for (TeamBinding equivalent : equivalenceSet)
+ team.connectEquivalent(equivalent); // TODO: nullness will be handled from Set<@NonNull TeamBinding>
+ }
if (team.equivalenceSet.size() > 1)
log(IStatus.INFO, "team "+team.teamName+" participates in "+team.equivalenceSet.size()+" aspect bindings.");
diff --git a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBindingRegistry.java b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBindingRegistry.java
index 58c6ea8..a4d2d49 100644
--- a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBindingRegistry.java
+++ b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/AspectBindingRegistry.java
@@ -328,11 +328,13 @@
}
public BaseBundle getBaseBundle(String bundleName) {
- BaseBundle bundle = baseBundleLookup.get(bundleName);
- if (bundle == null) {
- bundle = new BaseBundle(bundleName);
- baseBundleLookup.put(bundleName, bundle);
+ synchronized (baseBundleLookup) {
+ BaseBundle bundle = baseBundleLookup.get(bundleName);
+ if (bundle == null) {
+ bundle = new BaseBundle(bundleName);
+ baseBundleLookup.put(bundleName, bundle);
+ }
+ return bundle;
}
- return bundle;
}
}