spring-attic / spring-ide

Spring Development Environment for Eclipse
300 stars 126 forks source link

Opening any pom.xml gets CNFE for IElementChangedListener by org.springframework.ide.eclipse.xml.namespaces_3.9.9.201905211834-CI-B2250 #380

Closed davidmichaelkarr closed 5 years ago

davidmichaelkarr commented 5 years ago

I recently updated my Eclipse plugins, and I noticed that Spring IDE had some updates.

Today I'm finding that every time I try to open a pom.xml file, I get a "Multiple problems have occurred" dialog, with a detail of "An error has occurred. See error log for more details. org/eclipse/jdt/core/IElementChangedListener". Even worse, when I dismiss the dialog, it just displays again. I tried many times to dismiss it, and it just redisplays. My only option is killing Eclipse.

When restarting Eclipse, the pom.xml file is still displayed, and an error dialog comes up saying "'Loading referenced grammars' has encountered a problem", with a detail of "An internal error occurred during: "Loading referenced grammars". org/eclipse/jdt/core/IElementChangedListener".

When I dismiss this dialog, it does not reappear.

I've tested this sequence several times now.

In the error log, I see repeated instances of this stacktrace:

!ENTRY org.eclipse.jface 4 2 2019-05-28 15:11:48.411 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 java.lang.NoClassDefFoundError: org/eclipse/jdt/core/IElementChangedListener at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:279) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:716) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:639) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:607) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:587) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:566) at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:331) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:414) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:153) at java.lang.ClassLoader.loadClass(Unknown Source) at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:612) at org.eclipse.wst.common.uriresolver.internal.URIResolverExtensionDescriptor.getResolver(URIResolverExtensionDescriptor.java:81) at org.eclipse.wst.common.uriresolver.internal.URIResolverExtensionRegistry.getMatchingURIResolvers(URIResolverExtensionRegistry.java:166) at org.eclipse.wst.common.uriresolver.internal.ExtensibleURIResolver.resolve(ExtensibleURIResolver.java:83) at org.eclipse.wst.xml.core.internal.modelquery.XMLCatalogIdResolver.resolve(XMLCatalogIdResolver.java:94) at org.eclipse.wst.xml.core.internal.modelquery.XMLModelQueryAssociationProvider.resolveGrammarURI(XMLModelQueryAssociationProvider.java:60) at org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.XMLAssociationProvider.resolveGrammarURI(XMLAssociationProvider.java:170) at org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.CMDocumentManagerImpl.lookupOrCreateResolvedURI(CMDocumentManagerImpl.java:124) at org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.CMDocumentManagerImpl.addCMDocumentReference(CMDocumentManagerImpl.java:206) at org.eclipse.m2e.editor.xml.PomModelHandler$PomModelQueryAssociationProvider.getCMElementDeclaration(PomModelHandler.java:120) at org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.ModelQueryImpl.getCMElementDeclaration(ModelQueryImpl.java:118) at org.eclipse.wst.xml.ui.views.contentoutline.XMLContentOutlineConfiguration$AttributeShowingLabelProvider.getAttributeToShow(XMLContentOutlineConfiguration.java:75) at org.eclipse.wst.xml.ui.views.contentoutline.XMLContentOutlineConfiguration$AttributeShowingLabelProvider.getText(XMLContentOutlineConfiguration.java:142) at org.eclipse.m2e.editor.xml.PomContentOutlineConfiguration$PomLabelProvider.getText(PomContentOutlineConfiguration.java:231) at org.eclipse.jface.viewers.WrappedViewerLabelProvider.getText(WrappedViewerLabelProvider.java:99) at org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:148) at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:144) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:946) at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:120) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:176) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1025) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:478) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:176) at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2160) at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:840) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:818) at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:604) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:766) at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1586) at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:780) at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$1(AbstractTreeViewer.java:1571) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1448) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:363) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1409) at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1565) at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1686) at org.eclipse.wst.sse.ui.internal.contentoutline.ConfigurableContentOutlinePage.setInput(ConfigurableContentOutlinePage.java:696) at org.eclipse.wst.sse.ui.StructuredTextEditor.update(StructuredTextEditor.java:3199) at org.eclipse.m2e.editor.pom.MavenPomEditor$MavenPomActivationListener.handleActivation(MavenPomEditor.java:1019) at org.eclipse.m2e.editor.pom.MavenPomEditor$MavenPomActivationListener$1.run(MavenPomEditor.java:979) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3919) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3550) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1173) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:566) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:155) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:661) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) at org.eclipse.equinox.launcher.Main.run(Main.java:1476) Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.core.IElementChangedListener cannot be found by org.springframework.ide.eclipse.xml.namespaces_3.9.9.201905211834-CI-B2250 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:460) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:414) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:153) at java.lang.ClassLoader.loadClass(Unknown Source) ... 85 more

As you can see, this is coming from something in the Spring IDE.

I was able to "fix" this problem by simply setting to the Eclipse configuration before I updated these plugins. That's obviously just a temporary workaround

kdvolder commented 5 years ago

What version of Eclipse patform? And what version of JVM are you running it with?

kdvolder commented 5 years ago

I've quickly tried the latest STS 3.9 snapshot build on Eclipse 4.11, running with JDK 1.8. I used the 'distribution build' not an installation from update sites. Installation from update sites can be flaky and its hard to know what kind of old stuff may be lingering in an Eclipse install that's gone through repeated 'updates' over a long time.

My guess is that either there is some old version of JDT bundle around in your setup, or it has something to do with running on a newer JDK (10, 11 ?). So I'll try next what happens with a more modern JDK.

kdvolder commented 5 years ago

Seems to be fine on JDK 11.0.2.

davidmichaelkarr commented 5 years ago

I'm on java-2019-03, currently with jdk 12.0.1. I saw this first with "1.8.0_152".

davidmichaelkarr commented 5 years ago

I suppose a possible mitigation strategy would be uninstalling all the relevant plugins and reinstalling them. I see three plugins that match "spring" in the list:

kdvolder commented 5 years ago

The interesting bit would rather be what version of jdt plugin is in your setup because the CNF exception is related to a class from JDT.

java.lang.NoClassDefFoundError: org/eclipse/jdt/core/IElementChangedListener

This kind of error usually means that either there's an old version of the corresponding bundle (one where this class did not exist yet), or also... could be something messed up with installed bundles conflicting with one another somehow causing the corresponding bundle to fail to be activated (making all its classes going missing, this kind of thing can happen, for example when update sites for different versions of Eclipse platfom get mixed up together).

I suppose a possible mitigation strategy would be uninstalling all the relevant plugins and reinstalling them.

I think the easiest is to just download a 'full' distribution build rather than try to install bits and pieces from update sites. It would also be good to try the full distribution build even if just to verify that it actually works for you (this would help confirm the suspicion that it is some kind of packaging/installation issue that came about because of a combination of cumulative updates over time).

davidmichaelkarr commented 5 years ago

I don't know what "easiest" means, but having to reinstall all of the plugins I use and moving over all of my projects and settings does not seem "easy" to me.

davidmichaelkarr commented 5 years ago

Ok, well, I've confirmed that what I wanted as the easiest solution doesn't work. Uninstalling those three plugins and then installing Spring IDE from the marketplace results in the same error when I try to open a pom file. Any other info I could provide that would be useful?

davidmichaelkarr commented 5 years ago

Dunno whether it matters, but also note that I have the same Eclipse version and very similar plugin set installed on my Linux VM, looking at the same codebase. I don't see this problem.

kdvolder commented 5 years ago

Uninstalling those three plugins and then installing Spring IDE from the marketplace results in the same error when I try to open a pom file. Any other info I could provide that would be useful?

That makes sense, the problem is likely caused by something in the 'base' install being somehow incompatible or broken in combination with the STS plugins.

If you have steps that we can follow to setup this 'base install' and install the marketplace bundles into it... and then get something broken... that would be something we can investigate and try to fix.

About the Linux note. I also don't know if it matters, but its definitely good to know and keep in mind when trying to reproduce. So you on Windows or Mac then?

davidmichaelkarr commented 5 years ago

Windows 7.

I have no idea how I would set up a "base install" to demonstrate this.

How can I determine what version of the JDT I have? Searching for that in the plugins list doesn't result in an obvious answer.

kdvolder commented 5 years ago

I have no idea how I would set up a "base install" to demonstrate this.

How did you set it up before?

How can I determine what version of the JDT I have?

Every plugin and feature will have a version, JDT has many plugins though, but just knowing the version of the plugin that contains the class that can't be found would be interesting. That plugin is 'org.eclipse.jdt.core' and the version I have for example is 3.17.0.v20190306-2240.

What will give us all that information and more is if you go to: Help >> About Eclipse (or About Spring Tool Suite. Then click "Installation Details", then select "Configuration" Tab. The text that appears there is dump of everything you have installed their version and a lot more details. So copy and paste that text into this ticket will be useful (and we can find stuff like version of JDT, your OS, etc. etc. in there).

kdvolder commented 5 years ago

BTW: Be a little careful sharing the dump publically. It also contains a dump of environment variables. Sometime there are 'secret' information in their that you may not want to share. You should edit those out if you are going to share it publically.

kdvolder commented 5 years ago

Another thing you can try... open "Host OSGI Console" from the console view. Then type command like this "ss jdt.core" this will also give you the version of the jdt.core bundle as well as the bundle's activation state.

davidmichaelkarr commented 5 years ago

osgi> ss jdt.core "Framework is launched."

id State Bundle 215 ACTIVE org.eclipse.jdt.core.manipulation_1.11.100.v20190301-1946 565 RESOLVED org.jboss.tools.m2e.jdt.core_1.0.1.201209200903 1250 RESOLVED org.eclipse.jdt.core.compiler.batch_3.17.0.v20190306-2240 1298 ACTIVE org.eclipse.jdt.core_3.17.0.xx-201903291337-e1903 Fragments=213, 212

davidmichaelkarr commented 5 years ago

How did you set it up before?

When a new version of Eclipse comes out, I download the installer. I install it. I install the plugins I use from the marketplace. I do have one plugin that I currently have to build locally and put into dropins, the Emacs+ plugin, as the author isn't maintaining it right now.

kdvolder commented 5 years ago
1298    ACTIVE org.eclipse.jdt.core_3.17.0.xx-201903291337-e1903

I think that's a 'patched' jdt.core bundle, probably from groovy-eclipse. You have groovy support installed? I am guessing this may have something to do with the problem.

davidmichaelkarr commented 5 years ago

Ok. Let me test updating the plugins, then uninstalling groovy, and see what that does.

kdvolder commented 5 years ago

I installed greclipse myself and opened a pom. Things didn't blow up. I am on Linux though. So maybe its not a good test.

davidmichaelkarr commented 5 years ago

And I confirmed that this does not have an effect on the test case. I installed the latest spring ide plugins, removed groovy, and I still get the pom errors. I'm attaching the config in a sec.

davidmichaelkarr commented 5 years ago

eclipseconfig.txt

kdvolder commented 5 years ago

I installed the latest spring ide plugins, removed groovy

Did output of ss jdt.core change after this?

kdvolder commented 5 years ago

I'm still leaning towards this being connected to groovy somehow. My installation for some reason doesn't get the patched jdt.core. I get this even after installing greclipse:

osgi> ss jdt.core
"Framework is launched."

id  State       Bundle
117 ACTIVE      org.eclipse.ajdt.core_2.2.4.201905102027
305 ACTIVE      org.eclipse.jdt.core_3.17.0.v201906032019-e1903
                Fragments=303, 304
306 ACTIVE      org.eclipse.jdt.core.manipulation_1.11.100.v20190301-1946

If the problem is somehow because of the patched jdt.core, since I am not getting it (don't know why that is)... the problem wouldn't happen.

I really would like to see the 'ss' output after you uninstalled greclipse. Eclipse doesn't allways uninstall every bundle when you uninstall a feature, so its very well possible that the patched jdt is sticking around.

davidmichaelkarr commented 5 years ago

Note that the "ss jdt.core" output I provided earlier was from the config that I reverted to, before the latest spring ide plugin. After updating again to the latest spring ide plugins (showing the symptom), I see that the output of this does not change. I'll now uninstall groovy and see what I get.

davidmichaelkarr commented 5 years ago

Before uninstalling groovy:

215 ACTIVE      org.eclipse.jdt.core.manipulation_1.11.100.v20190301-1946
565 RESOLVED    org.jboss.tools.m2e.jdt.core_1.0.1.201209200903
1250    RESOLVED    org.eclipse.jdt.core.compiler.batch_3.17.0.v20190306-2240
1556    ACTIVE      org.eclipse.jdt.core_3.17.0.xx-201903291337-e1903
                Fragments=213, 212

After uninstalling groovy:

215 ACTIVE      org.eclipse.jdt.core.manipulation_1.11.100.v20190301-1946
565 RESOLVED    org.jboss.tools.m2e.jdt.core_1.0.1.201209200903
1250    RESOLVED    org.eclipse.jdt.core.compiler.batch_3.17.0.v20190306-2240
1616    ACTIVE      org.eclipse.jdt.core_3.17.0.v20190306-2240
                Fragments=212, 213
davidmichaelkarr commented 5 years ago

And if it matters, when I've reverted back to the working config and check for updates, this is the list that is offered to me: image

kdvolder commented 5 years ago

Okay so... something interesting... I opened up content.xml for the greclipse update site that I used (this one: https://dist.springsource.org/snapshot/GRECLIPSE/e4.11). And it shows it has a jdt.core bundle:

    name='org.eclipse.jdt.core' version='3.17.0.v201906032019-e1903'

So I think that is the patched jdt.core bundle... that I got.

What's interesting is... its not the version you got. Yours is org.eclipse.jdt.core_3.17.0.xx-201903291337-e1903.

Question is... where did you get it from?

Also, if you take a peek inside this bundle's jar. (You can find it somewhere inside your Eclipse install's plugin folder). If you open the jar, can you find the /org/eclipse/jdt/core/IElementChangedListener.class file inside? My current theory is still... something to do with this bundle (old?) and it doesn't have the class STS was looking for causing the problem. If the class isn't there... that would be pretty strong evidence/confirmation of my theory.

kdvolder commented 5 years ago

More theory / speculation. I think Greclipse may have changed their naming convention for the patched jdt.core version (no longer has the leading 'xx'). Now... as Eclipse/OSGI use more or less 'alphabetic' sorting to determine which version is more recent. The removal of this xx makes the newer patch bundles actually look older. And I think you somehow have gotten stuck with an old version of the jdt.patch (the new one is timestamped '0603' and the old one is '0329' which is almost 3 months older).

I'm not sure where you are getting this old bundle from, but could be it's just cached inside your eclipse installation and keeps popping back up whenever you install greclipse (it gets used instead of the actual bundle from the update site because Eclipse thinks it is newer).

davidmichaelkarr commented 5 years ago

But I already demonstrated that I can install the latest spring ide plugins, then REMOVE the groovy plugins, and the problem still happens.

kdvolder commented 5 years ago

But I already demonstrated that I can install the latest spring ide plugins, then REMOVE the groovy plugins, and the problem still happens.

Yes, I can't completely explain everything and have chosen to ignore that fact for now. Eclipse does have a knack of holding on to things based on their version numbers. Uninstalling things doesn't allways completely remove everything you installed.

So, if you could open up the xx jar, and please check if the class is there or not it could help to know if I'm on the right track or barking up the wrong tree (as the uninstall greclipse experiment would suggest).

davidmichaelkarr commented 5 years ago

I had already done some searching for that, but I can't seem to find it anywhere, either that class or even that jar.

In the Eclipse installation's "plugins" folder, there's only a single jar: "org.eclipse.equinox.launcher_1.5.300.v20190213-1655.jar".

In my workspace's ".plugins" folder, there is a directory called "org.eclipse.jdt.core" which has ~800 "*.index" files, but no jar files.

kdvolder commented 5 years ago

Oh... okay, maybe it's a Oomph thing. I have really no idea where Oomph keeps its installed plugins. I never use Oomph myself, I find it complicates things more than it helps me.

Never mind, I don't think even if the bundle is 3 months old... it will reveal much looking inside. THe git history shows its been a long time this class was even touched:

https://github.com/eclipse/eclipse.jdt.core/commits/master/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IElementChangedListener.java

So the reason it's not found probably isn't anything to do with whether its actually inside that bundle or not (almost sure if you'd find that jar and open it... the class is going to be there).

I'm a bit at a loss now to be honest. Maybe grasping at straws a little but my best guess its something to do with the 'xx' bundle being there when its really not supposed to be. If you installed greclipse from https://dist.springsource.org/snapshot/GRECLIPSE/e4.11 like I did, you shouldn't have that bundle. Yet you do, and that is definitely fishy. Not sure where you got the bundle from, could be you had it all along because you installed greclipse 3 or 4 months ago... and it just stuck around in some place where Eclipse/p2 caches osgi bundles.

kdvolder commented 5 years ago

More straw grasping... Try this:

Does it solve the problem?

kdvolder commented 5 years ago

Well, at least I am right that the 'xx' part of the qualifier was recently changed.

https://github.com/groovy/groovy-eclipse/commit/cd063be61f24d6e6b87e1636a531cefca8ab53e8

That's the commit were it happened, dated match 29th so about the timestamp of the jdt patched that seems to be sticking around in your Eclipse install. OSGI version order would consider all the 'v' qualifiers to be older than all the 'xx' ones.

If the sequence above with -clean doesn't get rid of the old bundle, I have no more ideas except... please rebuild your STS setup from a 'clean' slate and my guess is the problem will probably go away. I know it's a pain to do, but we have already spent a lot of effort on trying to avoid it as well.

kdvolder commented 5 years ago

Maybe @eric-milles has some thoughts about this as well since he was the one who got rid of the leading xx qualifier. Still not sure that this is really the problem, but it does seem a little ill-advised to change the qualifier naming in such a way that older things are considered newer than the latest builds.

davidmichaelkarr commented 5 years ago

Hah. I simplified what you asked me to do. Instead of uninstalling and reinstalling greclipse, I simply restarted with "-clean" with everything installed. Fixed it. Problem solved, whatever it was. Yay. I guess we can close this now.

kdvolder commented 5 years ago

I simply restarted with "-clean" with everything installed

Why didn't we think of trying this from the start :-)

I think yes, we can close this now. Just still curious... what does the ss jdt.core say now. I am betting the xx bundle is gone? I still think this was the culprit.

davidmichaelkarr commented 5 years ago
337 ACTIVE      org.eclipse.jdt.core_3.17.0.v201906032019-e1903
                Fragments=335, 336
338 RESOLVED    org.eclipse.jdt.core.compiler.batch_3.17.0.v20190306-2240
339 ACTIVE      org.eclipse.jdt.core.manipulation_1.11.100.v20190301-1946
1164    RESOLVED    org.jboss.tools.m2e.jdt.core_1.0.1.201209200903
eric-milles commented 5 years ago

Sorry for any problems caused. Indeed the "xx-" prefix was removed after much deliberation and testing. Part of the thought process is that developers would be moving through the quarterly releases much more quickly now, so updating an older release is a less likely event.

In addition to the "-clean" option, you can go to Help > About Eclipse Platform > Installation Details > Installation History. From there, you can remove older install states and eclipse will remove older plugins.

kdvolder commented 5 years ago

No problem, thanks for confirming my theories :-)

Help > About Eclipse Platform > Installation Details > Installation History. From there, you can remove older install states and eclipse will remove older plugins

Except... it doesn't seem to work. p2 is a stubborn beast and looks like it holds on the old plugins somehow. At least I think that's how David got stuck with the old 'xx' bundle.

Anyhow... you are right, the problem will sort itself out on next greclipse release.

Personally, I still think the old xx- convention was a better one, mostly because it's easier to spot that this is a 'patched' bundle. The new 'v' convention looks too similar to how the original Eclipse bundle's qualifier, so it's hard to look at output from commands like 'ss' and notice we are dealing with a patched rather than the original bundle. I think being able to see you are dealing with a patched bundle easily is valuable while trouble-shooting (like we had to do in this ticket). To be honest if it weren't for the 'xx' in the qualifier, I probably wouldn't have realised that David had installed greclipse and so his jdt.core was a patched one.

I also recall from my work on Greclipse in a past life that we needed the 'xx' so that p2 would know to pick the patched bundle over the original one, the xx was crucial to make this happen and the fact that 'xx' is alphabetically after the version convention used by the original bundle I beleave was the reason why it worked (this may have been a 'bug' in p2's handling of feature patches, so maybe that's no longer necessary).

davidmichaelkarr commented 5 years ago

On Wed, Jun 5, 2019 at 9:01 AM Kris De Volder notifications@github.com wrote:

No problem, thanks for confirming my theories :-)

Help > About Eclipse Platform > Installation Details > Installation History. From there, you can remove older install states and eclipse will remove older plugins

Except... it doesn't seem to work. p2 is a stubborn beast and looks like it holds on the old plugins somehow. At least I think that's how David got stuck with the old 'xx' bundle.

Eric is referring here to deleting old installation entries. I've never until now done that in any Eclipse installation.

Anyhow... you are right, the problem will sort itself out on next greclipse

release.

Personally, I still think the old xx- convention was a better one, mostly because it's easier to spot that this is a 'patched' bundle. The new 'v' convention looks too similar to how the original Eclipse bundle's qualifier, so it's hard to look at output from commands like 'ss' and notice we are dealing with a patched rather than the original bundle. I think being able to see you are dealing with a patched bundle easily is valuable while trouble-shooting (like we had to do in this ticket). To be honest if it weren't for the 'xx' in the qualifier, I probably wouldn't have realised that David had installed greclipse and so his jdt.core was a patched one.

I also recall from my work on Greclipse in a past life that we needed the 'xx' so that p2 would know to pick the patched bundle over the original one, the xx was crucial to make this happen and the fact that 'xx' is alphabetically after the version convention used by the original bundle I beleave was the reason why it worked (this may have been a 'bug' in p2's handling of feature patches, so maybe that's no longer necessary).

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/spring-projects/spring-ide/issues/380?email_source=notifications&email_token=ABKO7UY3U452V7KOGZR7VSTPY7PMVA5CNFSM4HS6WCV2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXAGAQA#issuecomment-499146816, or mute the thread https://github.com/notifications/unsubscribe-auth/ABKO7U2NHUOEJOYLOP6QHSLPY7PMVANCNFSM4HS6WCVQ .