diff options
author | Wim Jongman | 2018-05-31 21:46:06 +0000 |
---|---|---|
committer | Lars Vogel | 2018-06-01 07:37:37 +0000 |
commit | 5f27cfac56c91fea26086a4407deebb9026e758f (patch) | |
tree | f0a7815a39d08e4346731c6346ca98ae0b08e085 | |
parent | 111beba2e64ca82a171a007df7804a82ba10849d (diff) | |
download | eclipse.platform.ua-5f27cfac56c91fea26086a4407deebb9026e758f.tar.gz eclipse.platform.ua-5f27cfac56c91fea26086a4407deebb9026e758f.tar.xz eclipse.platform.ua-5f27cfac56c91fea26086a4407deebb9026e758f.zip |
Bug 535391 - [Tips] Do not open tips on startup if there are no new tipsI20180601-0915I20180601-0900
* Tip Dialog is not shown on startup if there or no new tips
* Improved logging/tracing
* Load check method had a timing problem
Change-Id: Ic7df5eb0649f73857b7c42c6b36f3f7210f8af4d
Signed-off-by: Wim Jongman <wim.jongman@remainsoftware.com>
5 files changed, 46 insertions, 16 deletions
diff --git a/org.eclipse.tips.core/src/org/eclipse/tips/core/ITipManager.java b/org.eclipse.tips.core/src/org/eclipse/tips/core/ITipManager.java index 16007f3fc..8e2e64983 100644 --- a/org.eclipse.tips.core/src/org/eclipse/tips/core/ITipManager.java +++ b/org.eclipse.tips.core/src/org/eclipse/tips/core/ITipManager.java @@ -84,10 +84,10 @@ public interface ITipManager { public boolean isOpen(); /** - * Indicates if this manager has providers with tips (based on the read or - * unread requirement). Be aware that subsequent calls to this method may return - * different results based on the async nature of loading providers. - * + * Indicates if this manager has providers with unread tips. Be aware that + * subsequent calls to this method may return different results based on the + * async nature of loading providers. + * * @return true if this {@link TipManager} has providers with tips. * @see TipProvider#getTips() */ diff --git a/org.eclipse.tips.core/src/org/eclipse/tips/core/internal/TipManager.java b/org.eclipse.tips.core/src/org/eclipse/tips/core/internal/TipManager.java index f8bb83f7e..f466dd330 100644 --- a/org.eclipse.tips.core/src/org/eclipse/tips/core/internal/TipManager.java +++ b/org.eclipse.tips.core/src/org/eclipse/tips/core/internal/TipManager.java @@ -275,7 +275,7 @@ public abstract class TipManager implements ITipManager { @Override public boolean hasContent() { for (TipProvider provider : getProviders()) { - if (provider.isReady() && !provider.getTips().isEmpty()) { + if (provider.isReady() && !provider.getTips(tip -> !isRead(tip)).isEmpty()) { return true; } } diff --git a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/IDETipManager.java b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/IDETipManager.java index 9a5cdbbcd..8e10c2567 100644 --- a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/IDETipManager.java +++ b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/IDETipManager.java @@ -16,7 +16,6 @@ import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -52,7 +51,7 @@ public class IDETipManager extends DefaultTipManager { private TipSourceProvider fSourceProvider = new TipSourceProvider(this); - private Map<String, List<Integer>> fReadTips = new HashMap<>(); + private Map<String, List<Integer>> fReadTips = TipsPreferences.getReadState(); private boolean fNewTips; @@ -104,7 +103,6 @@ public class IDETipManager extends DefaultTipManager { evaluationService.addSourceProvider(fSourceProvider); fSourceProviderAdded = true; } - fReadTips = TipsPreferences.getReadState(); return super.open(startUp, Plugin.getInstance().getDialogSettings()); } @@ -135,7 +133,7 @@ public class IDETipManager extends DefaultTipManager { * @param newTips */ private void refreshUI() { - boolean newTips = getProviders().stream().filter(p -> !p.getTips().isEmpty()).count() > 0; + boolean newTips = hasNewTips(); Job job = new Job(Messages.IDETipManager_5) { @Override protected IStatus run(IProgressMonitor monitor) { @@ -146,6 +144,16 @@ public class IDETipManager extends DefaultTipManager { job.schedule(); } + private boolean hasNewTips() { + log(LogUtil.info("START: Query all providers for new tips."));//$NON-NLS-1$ + int newTipCount = 0; + for (TipProvider provider : getProviders()) { + newTipCount += provider.getTips(tip -> !isRead(tip)).size(); + } + log(LogUtil.info("END: Query all providers for new tips: " + (newTipCount > 0)));//$NON-NLS-1$ + return newTipCount > 0; + } + @Override public int getStartupBehavior() { return TipsPreferences.getStartupBehavior(); diff --git a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/ProviderLoadJobChangeListener.java b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/ProviderLoadJobChangeListener.java index 52cd60362..56894010e 100644 --- a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/ProviderLoadJobChangeListener.java +++ b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/ProviderLoadJobChangeListener.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.tips.ide.internal; +import java.util.List; + import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.tips.core.Tip; @@ -40,11 +42,7 @@ public class ProviderLoadJobChangeListener extends JobChangeAdapter { */ @Override public void done(IJobChangeEvent event) { - for (Tip tip : fProvider.getTips(null)) { - if (!fManager.isRead(tip)) { - fManager.setNewTips(true); - return; - } - } + List<Tip> unreadTips = fProvider.getTips(tip -> !fManager.isRead(tip)); + fManager.setNewTips(!unreadTips.isEmpty()); } }
\ No newline at end of file diff --git a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/TipsPreferences.java b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/TipsPreferences.java index 175180eb7..73fd3bc1e 100644 --- a/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/TipsPreferences.java +++ b/org.eclipse.tips.ide/src/org/eclipse/tips/ide/internal/TipsPreferences.java @@ -144,10 +144,34 @@ public class TipsPreferences extends AbstractPreferenceInitializer { } if (isConsoleLog()) { System.out.println( - String.format("%1$tR:%1$tS:%1$tN - %2$s", Calendar.getInstance().getTime(), status.toString())); //$NON-NLS-1$ + String.format("%1$tR:%1$tS:%1$tN - %2$s", Calendar.getInstance().getTime(), format(status))); //$NON-NLS-1$ } } + /** + * Converts the passed status object to a readable string and tries to get the + * location where the log method was called. + * + * @param pStatus the status to format + * @return the formatted status to string. + */ + private static Object format(IStatus pStatus) { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + String origin = "<unknown>"; //$NON-NLS-1$ + if (stackTrace.length > 3) { + StackTraceElement ste = stackTrace[4]; + String[] fqcn = ste.getClassName().split("\\."); + String clazz = fqcn[fqcn.length - 1]; + origin = clazz + "#" + ste.getMethodName() + "(" + ste.getLineNumber() + ")"; + } + + String statusLine = pStatus.toString(); + if (statusLine.endsWith(" null")) { + statusLine = statusLine.substring(0, statusLine.length() - " null".length()); + } + return statusLine + " : " + origin; + } + public static int getStartupBehavior() { return getPreferences().getInt(PREF_STARTUP_BEHAVIOR, getDefaultStartupBehavior()); } |