Community
Participate
Working Groups
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)
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.
Created attachment 67515 [details] Patch to manifest
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.
Fixed in HEAD