diff options
author | Mickael Istria | 2019-10-10 08:11:07 +0000 |
---|---|---|
committer | Mickael Istria | 2019-10-14 08:21:08 +0000 |
commit | 8df6b9afc574d825dba07a5c9d1019c7cef88929 (patch) | |
tree | 70d74fd0f6d346794ba5fff1eb087608fc772e0c | |
parent | f284207a2380d3208ce8a7505e8a9d4dca0af59a (diff) | |
download | eclipse.platform.text-8df6b9afc574d825dba07a5c9d1019c7cef88929.tar.gz eclipse.platform.text-8df6b9afc574d825dba07a5c9d1019c7cef88929.tar.xz eclipse.platform.text-8df6b9afc574d825dba07a5c9d1019c7cef88929.zip |
Bug 551570 - Compose IContextInformationValidator
Change-Id: If0d01ead002636c95cbb4fa9754b37c3da9a799c
Signed-off-by: Mickael Istria <mistria@redhat.com>
2 files changed, 51 insertions, 6 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompositeContextInformationValidator.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompositeContextInformationValidator.java new file mode 100644 index 00000000000..1f2bd35cfd6 --- /dev/null +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompositeContextInformationValidator.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2019 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.jface.text.contentassist; + +import java.util.Arrays; + +import org.eclipse.jface.text.ITextViewer; + +class CompositeContextInformationValidator implements IContextInformationValidator { + + private final IContextInformationValidator[] children; + + public CompositeContextInformationValidator(IContextInformationValidator[] validators) { + this.children= validators; + } + + @Override + public void install(IContextInformation info, ITextViewer viewer, int offset) { + Arrays.stream(children).forEach(child -> child.install(info, viewer, offset)); + } + + @Override + public boolean isContextInformationValid(int offset) { + return Arrays.stream(children).anyMatch(child -> child.isContextInformationValid(offset)); + } + +} diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java index 1d707db8496..04c7e632a69 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java @@ -2114,9 +2114,14 @@ public class ContentAssistant implements IContentAssistant, IContentAssistantExt if (processors == null || processors.isEmpty()) { return null; } - // pick first one, arbitrary - IContentAssistProcessor p = processors.iterator().next(); - return p != null ? p.getContextInformationValidator() : null; + IContextInformationValidator[] validators= processors.stream() + .map(IContentAssistProcessor::getContextInformationValidator) + .filter(Objects::nonNull) + .toArray(IContextInformationValidator[]::new); + if (validators.length == 0) { + return null; + } + return new CompositeContextInformationValidator(validators); } /** @@ -2135,9 +2140,14 @@ public class ContentAssistant implements IContentAssistant, IContentAssistantExt if (processors == null || processors.isEmpty()) { return null; } - // pick first one, arbitrary - IContentAssistProcessor p = processors.iterator().next(); - return p != null ? p.getContextInformationValidator() : null; + IContextInformationValidator[] validators= processors.stream() + .map(IContentAssistProcessor::getContextInformationValidator) + .filter(Objects::nonNull) + .toArray(IContextInformationValidator[]::new); + if (validators.length == 0) { + return null; + } + return new CompositeContextInformationValidator(validators); } /** |