From a8abea0cb0dc66f38eeb7af7c49f589b3f1d16d6 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Thu, 6 May 2021 13:45:11 -0400 Subject: [PATCH] Move search for main method off the ui thread --- .../.project | 6 --- .../.project | 6 --- .../dash/model/BootProjectDashElement.java | 49 ++++++++++++++++++- .../boot/dash/model/LocalBootDashModel.java | 1 + .../boot/dash/model/ToggleFiltersModel.java | 27 +--------- .../.project | 6 --- .../.project | 5 ++ .../.project | 6 --- .../.project | 6 --- .../.project | 6 --- .../.project | 6 --- .../.project | 6 --- .../.project | 6 --- .../.project | 6 --- 14 files changed, 55 insertions(+), 87 deletions(-) diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.azure/.project b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.azure/.project index 1d2412dac..fe9882a67 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.azure/.project +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.azure/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.test/.project b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.test/.project index 1d5c36788..2e7108723 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.test/.project +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash.test/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/BootProjectDashElement.java b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/BootProjectDashElement.java index b37595789..98d403d44 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/BootProjectDashElement.java +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/BootProjectDashElement.java @@ -11,8 +11,16 @@ package org.springframework.ide.eclipse.boot.dash.model; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.search.IJavaSearchScope; +import org.eclipse.jdt.core.search.SearchEngine; +import org.eclipse.jdt.internal.debug.ui.launcher.MainMethodSearchEngine; import org.eclipse.swt.graphics.Image; import org.springframework.ide.eclipse.boot.dash.BootDashActivator; import org.springframework.ide.eclipse.boot.dash.liveprocess.LiveDataCapableElement; @@ -21,16 +29,17 @@ import org.springframework.ide.eclipse.boot.dash.model.BootDashModel.ElementStat import org.springframework.ide.eclipse.boot.dash.util.CollectionUtils; import org.springframework.ide.eclipse.boot.dash.util.DebugUtil; import org.springframework.ide.eclipse.boot.launch.util.BootLaunchUtils; -import org.springframework.ide.eclipse.boot.util.Log; import org.springsource.ide.eclipse.commons.core.pstore.IPropertyStore; import org.springsource.ide.eclipse.commons.core.pstore.IScopedPropertyStore; import org.springsource.ide.eclipse.commons.core.pstore.PropertyStores; +import org.springsource.ide.eclipse.commons.livexp.core.AsyncLiveExpression; import org.springsource.ide.eclipse.commons.livexp.core.DisposeListener; import org.springsource.ide.eclipse.commons.livexp.core.LiveExpression; import org.springsource.ide.eclipse.commons.livexp.core.LiveSets; import org.springsource.ide.eclipse.commons.livexp.core.ObservableSet; import org.springsource.ide.eclipse.commons.livexp.core.ValueListener; import org.springsource.ide.eclipse.commons.livexp.ui.Disposable; +import org.springsource.ide.eclipse.commons.livexp.util.Log; import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; @@ -41,6 +50,7 @@ import com.google.common.collect.ImmutableSortedSet; * * @author Kris De Volder */ +@SuppressWarnings("restriction") public class BootProjectDashElement extends AbstractLaunchConfigurationsDashElement implements BootDashElement, LiveDataCapableElement { private static final boolean DEBUG = DebugUtil.isDevelopment(); @@ -57,11 +67,41 @@ public class BootProjectDashElement extends AbstractLaunchConfigurationsDashElem private ObservableSet children; private ObservableSet ports; + private LiveExpression hasMainMethod = new AsyncLiveExpression(false) { + + @Override + protected Boolean compute() { + IProject p = getProject(); + Log.info("Has main method computation for project '" + p.getName() + "'"); + if (p != null && p.exists()) { + IJavaProject jp = JavaCore.create(p); + if (jp != null) { + IJavaSearchScope searchScope = SearchEngine.createJavaSearchScope(new IJavaElement[]{jp}, IJavaSearchScope.SOURCES); + MainMethodSearchEngine engine = new MainMethodSearchEngine(); + IType[] types = null; + try { + types = engine.searchMainMethods(new NullProgressMonitor(), searchScope, false); + return types != null && types.length > 0; + } + catch (Exception e) { + Log.log(e); + } + } + } + return false; + } + + }; + public BootProjectDashElement(IProject project, LocalBootDashModel context, IScopedPropertyStore projectProperties, BootProjectDashElementFactory factory, LaunchConfDashElementFactory childFactory) { super(context, project); this.projectProperties = projectProperties; this.childFactory = childFactory; + + hasMainMethod.refresh(); + addElementState(hasMainMethod); + addDisposableChild(hasMainMethod); // if (DEBUG) { // onDispose((e) -> { // debug("disposed: "+this); @@ -69,6 +109,9 @@ public class BootProjectDashElement extends AbstractLaunchConfigurationsDashElem // } } + public boolean hasMainMethod() { + return hasMainMethod.getValue(); + } @Override public IProject getProject() { @@ -220,4 +263,8 @@ public class BootProjectDashElement extends AbstractLaunchConfigurationsDashElem public Image getPropertiesTitleIconImage() { return BootDashActivator.getDefault().getImageRegistry().get(BootDashActivator.BOOT_ICON); } + + public void refreshHasMainMethod() { + hasMainMethod.refresh(); + } } diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/LocalBootDashModel.java b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/LocalBootDashModel.java index 8040b2d36..1c1fa5f4e 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/LocalBootDashModel.java +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/LocalBootDashModel.java @@ -229,6 +229,7 @@ public class LocalBootDashModel extends AbstractBootDashModel implements Deletio .map(projectElementFactory::createOrGet) .filter(Objects::nonNull) .collect(Collectors.toSet()); + newElements.stream().forEach(e -> e.refreshHasMainMethod()); apps.replaceAll(newElements); projectElementFactory.disposeAllExcept(newElements); } diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/ToggleFiltersModel.java b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/ToggleFiltersModel.java index 0a377b504..dbb99584e 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/ToggleFiltersModel.java +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/model/ToggleFiltersModel.java @@ -14,14 +14,6 @@ import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchEngine; -import org.eclipse.jdt.internal.debug.ui.launcher.MainMethodSearchEngine; import org.springsource.ide.eclipse.commons.core.pstore.IPropertyStore; import org.springsource.ide.eclipse.commons.core.pstore.PropertyStoreApi; import org.springsource.ide.eclipse.commons.core.pstore.PropertyStores; @@ -43,7 +35,6 @@ import com.google.common.collect.ImmutableSet; * * @author Kris De Volder */ -@SuppressWarnings("restriction") public class ToggleFiltersModel { private static final Filter HIDE_SOLITARY_CONFS = new Filter() { @@ -80,23 +71,7 @@ public class ToggleFiltersModel { if (!t.getCurrentChildren().isEmpty()) { return true; } - IProject p = t.getProject(); - if (p != null && p.exists()) { - IJavaProject jp = JavaCore.create(p); - if (jp != null) { - IJavaSearchScope searchScope = SearchEngine.createJavaSearchScope(new IJavaElement[]{jp}, IJavaSearchScope.SOURCES); - MainMethodSearchEngine engine = new MainMethodSearchEngine(); - IType[] types = null; - try { - types = engine.searchMainMethods(new NullProgressMonitor(), searchScope, false); - return types != null && types.length > 0; - } - catch (Exception e) { - Log.log(e); - } - } - } - return false; + return ((BootProjectDashElement)t).hasMainMethod(); } return true; } diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.launch.test/.project b/eclipse-extensions/org.springframework.ide.eclipse.boot.launch.test/.project index c0ee89160..ffac8dea4 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.launch.test/.project +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.launch.test/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.refactoring/.project b/eclipse-extensions/org.springframework.ide.eclipse.boot.refactoring/.project index 0a2612801..65638f87b 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.refactoring/.project +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.refactoring/.project @@ -20,6 +20,11 @@ + + org.eclipse.m2e.core.maven2Builder + + + org.eclipse.m2e.core.maven2Nature diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.test/.project b/eclipse-extensions/org.springframework.ide.eclipse.boot.test/.project index fa251cf66..2b35f78a9 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.test/.project +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.test/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.core/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.core/.project index ffbcc467f..bc025c92c 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.core/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.core/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.test.util/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.test.util/.project index d19422399..6ae437451 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.test.util/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.test.util/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.ui/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.ui/.project index 90cea2d8b..94b719709 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.ui/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.frameworks.ui/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.jdk_tools/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.jdk_tools/.project index 52bd52db7..b433bfc3f 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.jdk_tools/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.jdk_tools/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.livexp/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.livexp/.project index 63e05b6d7..1248931a4 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.livexp/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.livexp/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/eclipse-language-servers/org.springsource.ide.eclipse.commons.tests.util/.project b/eclipse-language-servers/org.springsource.ide.eclipse.commons.tests.util/.project index 52257641c..58ed06920 100644 --- a/eclipse-language-servers/org.springsource.ide.eclipse.commons.tests.util/.project +++ b/eclipse-language-servers/org.springsource.ide.eclipse.commons.tests.util/.project @@ -20,14 +20,8 @@ - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature