Enable m2e-apt by default

Also a small bugfix related to enabling spring-boot validation builder
on new projects.

Both of these contribute to make a smoother experience working with
JDT APT.

See: https://github.com/spring-projects/sts4/issues/822
This commit is contained in:
Kris De Volder
2022-09-14 15:46:12 -07:00
parent ed9c0cde56
commit 92c6a1698f
5 changed files with 63 additions and 7 deletions

View File

@@ -10,6 +10,10 @@
*******************************************************************************/
package org.springsource.ide.eclipse.commons.frameworks.core.workspace;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
@@ -37,6 +41,8 @@ public class ClasspathListenerManager implements Disposable {
private class MyListener implements IElementChangedListener {
private Set<String> knownProjectNames = Collections.synchronizedSet(new HashSet<>());
//@Override
public void elementChanged(ElementChangedEvent event) {
visit(event.getDelta());
@@ -49,8 +55,9 @@ public class ClasspathListenerManager implements Disposable {
visitChildren(delta);
break;
case IJavaElement.JAVA_PROJECT:
if (isClasspathChanged(delta.getFlags())) {
listener.classpathChanged((IJavaProject)el);
IJavaProject jp = (IJavaProject) el;
if (isNewProject(jp) || isClasspathChanged(delta.getFlags())) {
listener.classpathChanged(jp);
}
break;
default:
@@ -58,6 +65,10 @@ public class ClasspathListenerManager implements Disposable {
}
}
private boolean isNewProject(IJavaProject jp) {
return knownProjectNames.add(jp.getElementName());
}
private boolean isClasspathChanged(int flags) {
return 0!= (flags & (
IJavaElementDelta.F_CLASSPATH_CHANGED |
@@ -70,6 +81,10 @@ public class ClasspathListenerManager implements Disposable {
visit(c);
}
}
public void addKnownProject(IJavaProject jp) {
this.knownProjectNames.add(jp.getElementName());
}
}
private ClasspathListener listener;
@@ -83,19 +98,21 @@ public class ClasspathListenerManager implements Disposable {
*/
public ClasspathListenerManager(ClasspathListener listener, boolean initialEvent) {
this.listener = listener;
myListener=new MyListener();
if (initialEvent) {
for (IProject p : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
try {
if (p.isAccessible() && p.hasNature(JavaCore.NATURE_ID)) {
IJavaProject jp = JavaCore.create(p);
listener.classpathChanged(jp);
myListener.addKnownProject(jp);
}
} catch (CoreException e) {
FrameworkCoreActivator.log(e);
}
}
}
JavaCore.addElementChangedListener(myListener=new MyListener(), ElementChangedEvent.POST_CHANGE);
JavaCore.addElementChangedListener(myListener, ElementChangedEvent.POST_CHANGE);
}
public ClasspathListenerManager(ClasspathListener listener) {