Bug 186582 - intro content detection causes plug-in activation
Summary: intro content detection causes plug-in activation
Status: RESOLVED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: User Assistance (show other bugs)
Version: 3.3   Edit
Hardware: PC Windows XP
: P2 normal (vote)
Target Milestone: 3.2 RC1   Edit
Assignee: platform-ua-inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2007-05-11 11:38 EDT by Boris Bokowski CLA
Modified: 2007-05-16 20:21 EDT (History)
0 users

See Also:
curtispd: review+


Attachments
Patch to manifest (870 bytes, patch)
2007-05-16 16:26 EDT, Chris Goldthorpe CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Boris Bokowski CLA 2007-05-11 11:38:47 EDT
Didn't we say that the check for new intro content should avoid plug-in activation?

I can see that org.eclipse.ui.intro.universal is activated when we create the executable extension. The fix would be to add an exceptions clause to the manifest for org.eclipse.ui.intro.universal (all on one line I believe):

Eclipse-LazyStart: true; exceptions="org.eclipse.ui.internal.intro.universal.contentdetect"

Also, you should make sure that the class ContentDetector only accesses classes from its own package.  If it calls other code in the universal intro plug-in, this will cause plug-in activation.

Activation stack trace as obtained using [1] to follow.

[1] http://borisoneclipse.blogspot.com/2007/03/who-is-to-blame.html

org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:332)
org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)
org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)
org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:417)
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)
org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340)
org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:408)
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:357)
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)
java.lang.ClassLoader.loadClass(ClassLoader.java:563)
org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass(BundleLoader.java:289)
org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:227)
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1269)
org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:160)
org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:787)
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
org.eclipse.ui.internal.intro.IntroDescriptor.getIntroContentDetector(IntroDescriptor.java:62)
org.eclipse.ui.internal.WorkbenchIntroManager.isNewContentAvailable(WorkbenchIntroManager.java:290)
org.eclipse.ui.application.WorkbenchWindowAdvisor.openIntro(WorkbenchWindowAdvisor.java:169)
org.eclipse.ui.internal.ide.application.IDEWorkbenchWindowAdvisor.openIntro(IDEWorkbenchWindowAdvisor.java:456)
org.eclipse.ui.internal.WorkbenchWindow.open(WorkbenchWindow.java:746)
org.eclipse.ui.internal.Workbench$59.runWithException(Workbench.java:3353)
org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2288)
org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2204)
org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
Comment 1 Chris Goldthorpe CLA 2007-05-11 13:04:21 EDT
Yes we did say that. To be more precise if there is no new intro content the intro content detection should not cause plugin activation. I will work on getting this fixed, probably in RC2.
Comment 2 Chris Goldthorpe CLA 2007-05-16 16:26:37 EDT
Created attachment 67515 [details]
Patch to manifest
Comment 3 Chris Goldthorpe CLA 2007-05-16 16:31:51 EDT
The fix suggested did indeed work. With the patch above a breakpoint in the constructor UniversalIntroPlugin() is not hit if the Welcome screen is closed and Eclipse is restarted, new content detection still works. Requesting approval for RC1.
Comment 4 Chris Goldthorpe CLA 2007-05-16 20:21:20 EDT
Fixed in HEAD