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