/*
* $Id$
*
* SARL is an general-purpose agent programming language.
* More details on http://www.sarl.io
*
* Copyright (C) 2014-2017 the original authors or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.sarl.lang.ui;
import com.google.inject.Binder;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provider;
import com.google.inject.name.Names;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.xtext.ui.editor.XtextEditor;
import org.eclipse.xtext.ui.editor.autoedit.AbstractEditStrategy;
import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
import org.eclipse.xtext.validation.IssueSeveritiesProvider;
import io.sarl.lang.bugfixes.Bug187SARLDispatchingEObjectTextHover;
import io.sarl.lang.ui.validation.UIConfigurableIssueSeveritiesProvider;
import io.sarl.lang.validation.IConfigurableIssueSeveritiesProvider;
/**
* Use this class to register components to be used within the IDE.
*
* <p>DOT NOT ADD BINDINGS IN THIS CLASS. PREFER TO UPDATE THE MWE2 SCRIPT.
*
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings({"static-method", "javadoc", "checkstyle:javadocmethod"})
public class SARLUiModule extends AbstractSARLUiModule {
//TODO private static final String AUTOMATIC_PROPOSAL_CHARACTERS = "."; //$NON-NLS-1$
/** Provider of {@link UIConfigurableIssueSeveritiesProvider}.
*
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
* @since 0.5
*/
private static class UIConfigurableIssueSeveritiesProviderProvider implements Provider<UIConfigurableIssueSeveritiesProvider> {
private UIConfigurableIssueSeveritiesProvider severityProvider;
@Inject
private Injector injector;
UIConfigurableIssueSeveritiesProviderProvider() {
//
}
@Override
public UIConfigurableIssueSeveritiesProvider get() {
if (this.severityProvider == null) {
this.severityProvider = new UIConfigurableIssueSeveritiesProvider();
this.injector.injectMembers(this.severityProvider);
}
return this.severityProvider;
}
}
public SARLUiModule(AbstractUIPlugin plugin) {
super(plugin);
}
@Override
public void configure(Binder binder) {
super.configure(binder);
// Configure the automatic auto-completion on specific characters: "." and ":"
//TODO binder.bind(String.class).annotatedWith(com.google.inject.name.Names.named(
// XtextContentAssistProcessor.COMPLETION_AUTO_ACTIVATION_CHARS))
// .toInstance(AUTOMATIC_PROPOSAL_CHARACTERS);
// Configure a system singleton for issue severities provider
final UIConfigurableIssueSeveritiesProviderProvider provider = new UIConfigurableIssueSeveritiesProviderProvider();
binder.bind(UIConfigurableIssueSeveritiesProvider.class).toProvider(provider);
binder.bind(IssueSeveritiesProvider.class).toProvider(provider);
binder.bind(IConfigurableIssueSeveritiesProvider.class).toProvider(provider);
}
public void configureDebugMode(Binder binder) {
if (Boolean.getBoolean("io.sarl.lang.debug") //$NON-NLS-1$
|| Boolean.getBoolean("org.eclipse.xtext.xtend.debug")) { //$NON-NLS-1$
binder.bindConstant().annotatedWith(Names.named(AbstractEditStrategy.DEBUG)).to(true);
}
// matches ID of org.eclipse.ui.contexts extension registered in plugin.xml
binder.bindConstant().annotatedWith(Names.named(XtextEditor.KEY_BINDING_SCOPE))
.to("io.sarl.lang.ui.scoping.SARLEditorScope"); //$NON-NLS-1$
}
// TODO: Remove when Xtext PR 187 is merged - https://github.com/eclipse/xtext-eclipse/pull/187
@Override
public Class<? extends IEObjectHover> bindIEObjectHover() {
return Bug187SARLDispatchingEObjectTextHover.class;
}
}