Bug 480069 - [otdre] processing log-related classes during weaving
causes NoClassDefFoundError during logging
diff --git a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
index 0e31f42..dc1d912 100644
--- a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
+++ b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
@@ -219,6 +219,9 @@
|| bundleName.equals("org.objectweb.asm"))
return;
+ if (isEclipseLoggingClass(bundleName, className))
+ return;
+
if (BCELPatcher.BCEL_PLUGIN_ID.equals(bundleName)) {
BCELPatcher.fixBCEL(wovenClass);
return;
@@ -265,6 +268,22 @@
}
}
+ private boolean isEclipseLoggingClass(String bundleName, String className) {
+ if (bundleName.equals("org.eclipse.ui.workbench")) {
+ if (className.equals("org.eclipse.ui.statushandlers.StatusAdapter"))
+ return true;
+ else if (className.equals("org.eclipse.ui.internal.misc.StatusUtil"))
+ return true;
+ } else if (bundleName.equals("org.eclipse.ui.views.log")) {
+ if (className.startsWith("org.eclipse.ui.internal.views.log.LogView$"))
+ return true;
+ } else if (bundleName.equals("org.eclipse.equinox.common")) {
+ if (className.equals("org.eclipse.core.runtime.ILogListener"))
+ return true;
+ }
+ return false;
+ }
+
WeavingReason requiresWeaving(BundleWiring bundleWiring, String className, byte[] bytes) {
// 1. consult the aspect binding registry (for per-bundle info):
@@ -386,7 +405,7 @@
String teamName = record.team.teamName;
log(IStatus.INFO, "Consider for instantiation/activation: team "+teamName);
try {
- TeamLoader loader = new TeamLoader(deferredTeams, beingDefined, this.useDynamicWeaver);
+ TeamLoader loader = new TeamLoader(deferredTeams, beingDefined, USE_DYNAMIC_WEAVER);
// Instantiate (we only get here if activationKind != NONE)
loader.instantiateAndActivate(record.aspectBinding, record.team, record.activationKind); // may re-insert to deferredTeams
} catch (Exception e) {