Skip to content
This repository has been archived by the owner on Apr 3, 2018. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
LANG: Pref refactor part 4 - fixes, coloring prefs.
  • Loading branch information
bruno-medeiros committed Oct 15, 2015
1 parent cc89745 commit d6a5fb9
Show file tree
Hide file tree
Showing 32 changed files with 239 additions and 237 deletions.
Expand Up @@ -39,10 +39,10 @@ public class GoProjectEnvironmentTest extends CommonGoCoreTest {
public void test() throws Exception { test$(); }
public void test$() throws Exception {

GoEnvironmentPrefs.GO_ROOT.asField().setValue(SAMPLE_GO_ROOT.asString());
GoEnvironmentPrefs.GO_ARCH.asField().setValue("386");
GoEnvironmentPrefs.GO_OS.asField().setValue("windows");
GoEnvironmentPrefs.GO_PATH.asField().setValue(SAMPLE_GOPATH_Entry.toString());
GoEnvironmentPrefs.GO_ROOT.setInstanceScopeValue(SAMPLE_GO_ROOT.asString());
GoEnvironmentPrefs.GO_ARCH.setInstanceScopeValue("386");
GoEnvironmentPrefs.GO_OS.setInstanceScopeValue("windows");
GoEnvironmentPrefs.GO_PATH.setInstanceScopeValue(SAMPLE_GOPATH_Entry.toString());
TestsWorkingDir.deleteDir(SAMPLE_GOPATH_Entry);

{
Expand All @@ -64,7 +64,7 @@ public class GoProjectEnvironmentTest extends CommonGoCoreTest {

String goPathEntryOther = location.append("other").toOSString();
String gopath = location.toOSString() + File.pathSeparator + goPathEntryOther;
GoEnvironmentPrefs.GO_PATH.asField().setValue(gopath);
GoEnvironmentPrefs.GO_PATH.setInstanceScopeValue(gopath);

// Test GOPATH which already has project location. Also nested GOPATH entry.
checkEnvGoPath(project, list(location.toOSString(), goPathEntryOther), false);
Expand All @@ -73,7 +73,7 @@ public class GoProjectEnvironmentTest extends CommonGoCoreTest {
try (SampleGoProject sampleProject = new SampleGoProject(getClass().getSimpleName())){
IProject project = sampleProject.getProject();

GoEnvironmentPrefs.GO_PATH.asField().setValue(SAMPLE_GO_PATH.asString());
GoEnvironmentPrefs.GO_PATH.setInstanceScopeValue(SAMPLE_GO_PATH.asString());

sampleProject.moveToLocation(SAMPLE_GOPATH_Entry.resolve_valid("src/github.com/foo"));
// Test that project location is not added, because project is in a Go source package
Expand Down
Expand Up @@ -20,6 +20,10 @@ public interface IGlobalPreference<T> {
IFieldView<T> asField();

default T get() {
return getValue();
}

default T getValue() {
return asField().getValue();
}

Expand Down
Expand Up @@ -8,12 +8,10 @@
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.text.coloring;
package melnorme.lang.ide.core.utils.prefs;

import melnorme.utilbox.fields.IFieldView;

public interface ITextStylingPref extends IFieldView<TextStyling> {
public interface IPreferenceIdentifier {

String getPrefId();

}
}
Expand Up @@ -26,6 +26,7 @@

import melnorme.lang.ide.core.LangCore;
import melnorme.utilbox.fields.DomainField;
import melnorme.utilbox.fields.IFieldView;

public abstract class PreferenceHelper<T> implements IGlobalPreference<T> {

Expand Down Expand Up @@ -86,7 +87,7 @@ public T getDefaultValue() {
}

@Override
public DomainField<T> asField() {
public IFieldView<T> asField() {
return field;
}

Expand All @@ -100,6 +101,9 @@ protected IPreferencesAccess prefScopes(IProject project) {
return new PreferencesLookupHelper(getQualifier(), project);
}

/**
* Note: can only be used before preference value is accessed.
*/
public void setPreferencesDefaultValue(T defaultValue) {
assertNotNull(defaultValue);
this.defaultValue = defaultValue;
Expand All @@ -123,37 +127,17 @@ public final T getFrom(IPreferenceStore prefStore) {
protected abstract void doSet(IEclipsePreferences preferences, T value);

protected void initializeListeners() {
field.addValueChangedListener(() -> handleFieldValueChanged());

InstanceScope.INSTANCE.getNode(qualifier).addPreferenceChangeListener(event -> handlePreferenceChange(event));
}

protected void handleFieldValueChanged() {
updatingInstancePreferences = true;
try {
try {
setInstanceScopeValue(field.getValue());
} catch(BackingStoreException e) {
/* FIXME: review */
}
} finally {
updatingInstancePreferences = false;
}
}

@Override
public final void setInstanceScopeValue(T value) throws BackingStoreException {
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(getQualifier());
doSet(prefs, value);
prefs.flush();
}

protected boolean updatingInstancePreferences;

protected void handlePreferenceChange(PreferenceChangeEvent event) {
if(updatingInstancePreferences) {
return;
}
if(event.getKey().equals(key)) {
field.setFieldValue(getFromPrefStore());
}
Expand Down
Expand Up @@ -26,4 +26,9 @@ public static String ERROR_SrcRootContainsGoFiles(Location sourceRootDir) {
return MessageFormat.format(pattern, sourceRootDir);
}

public static String ERROR_ProjectDoesNotHaveSrcFolder(Location location) {
return MessageFormat.format("Error, using location `{0}` as a Go workspace, "
+ "but location does not contain a `src` directory. ", location);
}

}
Expand Up @@ -25,6 +25,7 @@
import com.googlecode.goclipse.core.GoProjectEnvironment;
import com.googlecode.goclipse.tooling.GoBuildOutputProcessor;
import com.googlecode.goclipse.tooling.GoPackageName;
import com.googlecode.goclipse.tooling.env.CheckSrcFolderRootFilesWithNoPackage;
import com.googlecode.goclipse.tooling.env.GoEnvironment;
import com.googlecode.goclipse.tooling.env.GoWorkspaceLocation;

Expand Down Expand Up @@ -206,9 +207,13 @@ protected ProcessBuilder getProcessBuilder2(String[] toolArguments) throws Commo
return pb;
}

protected void checkGoFilesInSourceRoot() throws CoreException {
protected void checkGoFilesInSourceRoot() throws CommonException {
CheckSrcFolderRootFilesWithNoPackage srcCheck = new CheckSrcFolderRootFilesWithNoPackage();

if(!sourceRootDir.toFile().exists()) {
throw new CommonException(GoCoreMessages.ERROR_ProjectDoesNotHaveSrcFolder(sourceRootDir.getParent()));
}

srcCheck.checkDir(sourceRootDir);

if(srcCheck.containsGoSources) {
Expand Down
2 changes: 1 addition & 1 deletion plugin_ide.ui/plugin.xml
Expand Up @@ -313,7 +313,7 @@
</enabledWhen>
</page>
<page
class="com.googlecode.goclipse.ui.preferences.GoToolchainConfigurationPage"
class="com.googlecode.goclipse.ui.preferences.GoSDKProjectConfigPage"
id="com.googlecode.goclipse.ui.propertyPages.ToolchainConfiguration"
name="%LangToolchainPropertyPage.name">
<enabledWhen>
Expand Down
@@ -0,0 +1,37 @@
/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.preferences;


import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

import melnorme.lang.ide.ui.preferences.common.AbstractPreferencesEditorsPrefPage;

public abstract class AbstractPreferencesBlockPrefPage extends AbstractPreferencesEditorsPrefPage {

protected final ValidatedConfigBlock preferencesBlock;

public AbstractPreferencesBlockPrefPage() {
super();

this.preferencesBlock = init_createPreferencesBlock();
addValidationStatusField(preferencesBlock.validation);
}

protected abstract ValidatedConfigBlock init_createPreferencesBlock();

@Override
protected Control createContents(Composite parent) {
return preferencesBlock.createComponent(parent);
}

}
Expand Up @@ -42,7 +42,7 @@ public abstract class LangProjectBuildConfigurationComponent extends AbstractCom
protected final BuildTargetField buildTargetField = init_createBuildTargetField();
protected final BuildTargetSettingsComponent buildTargetSettings = init_createBuildTargetSettingsComponent();

protected final HashMap2<String, BuildTargetData> buildOptionsToChange2 = new HashMap2<>();
protected final HashMap2<String, BuildTargetData> buildOptionsToChange = new HashMap2<>();
protected BuildTargetData buildTargetData = new BuildTargetData();

public LangProjectBuildConfigurationComponent(IProject project) {
Expand Down Expand Up @@ -98,11 +98,11 @@ protected void initialize() {
return;
}

buildOptionsToChange2.clear();
buildOptionsToChange.clear();

Collection2<BuildTarget> buildTargets = buildInfo.getBuildTargets();
for(BuildTarget buildTarget : buildTargets) {
buildOptionsToChange2.put(buildTarget.getTargetName(), buildTarget.getDataCopy());
buildOptionsToChange.put(buildTarget.getTargetName(), buildTarget.getDataCopy());
}

initBindings();
Expand Down Expand Up @@ -154,7 +154,7 @@ protected void handleBuildTargetChanged() {
if(buildTargetName == null) {
return;
}
buildTargetData = buildOptionsToChange2.get(buildTargetName);
buildTargetData = buildOptionsToChange.get(buildTargetName);
buildTargetSettings.inputChanged(buildTargetData);
}

Expand Down Expand Up @@ -205,7 +205,7 @@ public boolean saveSettings() {
return false;
}

for(Entry<String, BuildTargetData> entry : buildOptionsToChange2.entrySet()) {
for(Entry<String, BuildTargetData> entry : buildOptionsToChange.entrySet()) {

try {
BuildTarget buildTarget =
Expand All @@ -228,7 +228,7 @@ public void loadDefaults() {
return;
}

for(BuildTargetData data : buildOptionsToChange2.values()) {
for(BuildTargetData data : buildOptionsToChange.values()) {
data.buildArguments = null;
data.executablePath = null;
}
Expand Down
Expand Up @@ -11,37 +11,23 @@
package melnorme.lang.ide.ui.preferences;


import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

import melnorme.lang.ide.core.operations.ToolchainPreferences;
import melnorme.lang.ide.ui.preferences.common.AbstractPreferencesEditorsPrefPage;

public abstract class LangRootPreferencePage extends AbstractPreferencesEditorsPrefPage {

protected final LangSDKConfigBlock langSDKConfigBlock;
public abstract class LangRootPreferencePage extends AbstractPreferencesBlockPrefPage {

public LangRootPreferencePage() {
super();

langSDKConfigBlock = init_createLangSDKConfigBlock2();
}

protected LangSDKConfigBlock init_createLangSDKConfigBlock2() {
LangSDKConfigBlock langSDKConfigBlock = doCreateLangSDKConfigBlock();

addValidationStatusField(langSDKConfigBlock.validation);
@Override
protected LangSDKConfigBlock init_createPreferencesBlock() {
LangSDKConfigBlock langSDKConfigBlock = init_createLangSDKConfigBlock();

bindToPreference(ToolchainPreferences.SDK_PATH, langSDKConfigBlock.getLocationField());
bindToPreference2(langSDKConfigBlock.getLocationField(), ToolchainPreferences.SDK_PATH);

return langSDKConfigBlock;
}

protected abstract LangSDKConfigBlock doCreateLangSDKConfigBlock();

@Override
protected Control createContents(Composite parent) {
return langSDKConfigBlock.createComponent(parent);
}
protected abstract LangSDKConfigBlock init_createLangSDKConfigBlock();

}
Expand Up @@ -24,6 +24,7 @@
import org.osgi.service.prefs.BackingStoreException;

import melnorme.lang.ide.core.utils.prefs.IProjectPreference;
import melnorme.lang.ide.core.utils.prefs.PreferenceHelper;
import melnorme.lang.ide.ui.LangUIPlugin;
import melnorme.lang.ide.ui.preferences.common.IPreferencesWidget;
import melnorme.util.swt.SWTFactoryUtil;
Expand All @@ -35,26 +36,33 @@

public abstract class ProjectAndPreferencesBlock extends AbstractComponent implements IPreferencesWidget {

protected final ArrayList2<PreferencePropertyBinding<?>> fieldBindings = new ArrayList2<>();

protected final IProject project;
protected final IProjectPreference<Boolean> useProjectSettingsPref;
protected final ArrayList2<PreferencePropertyBinding<?>> fieldBindings = new ArrayList2<>();

protected final CheckBoxField useProjectSettingsField = new CheckBoxField(LABEL_UseProjectSpecificSettings);
protected final AbstractComponentExt projectSettingsBlock;

public ProjectAndPreferencesBlock(IProject project, IProjectPreference<Boolean> useProjectSettingsPref) {
super();
this.project = project;
this.useProjectSettingsPref = useProjectSettingsPref;

this.projectSettingsBlock = init_createProjectSettingsBlock2();

useProjectSettingsField.addValueChangedListener2(
() -> getParentSettingsBlock().setEnabled(useProjectSettingsField.getFieldValue()));
() -> projectSettingsBlock.setEnabled(useProjectSettingsField.getFieldValue()));

addFieldBinding(useProjectSettingsField, useProjectSettingsPref);
bindToProjectPref(useProjectSettingsField, useProjectSettingsPref);
}

public abstract AbstractComponentExt getParentSettingsBlock();
protected abstract AbstractComponentExt init_createProjectSettingsBlock2();

public <T> void bindToProjectPref(IProperty<T> field, PreferenceHelper<T> preference) {
bindToProjectPref(field, preference.getProjectPreference());
}

public <T> void addFieldBinding(IProperty<T> field, IProjectPreference<T> preference) {
public <T> void bindToProjectPref(IProperty<T> field, IProjectPreference<T> preference) {
assertTrue(preference == useProjectSettingsPref ||
preference.getEnableProjectSettingPref() == useProjectSettingsPref);

Expand All @@ -78,7 +86,7 @@ protected void createContents(Composite topControl) {
SWTFactoryUtil.createLabel(topControl, SWT.SEPARATOR | SWT.HORIZONTAL, "",
GridDataFactory.fillDefaults().span(2, 1).create());

getParentSettingsBlock().createComponent(topControl, gdFillDefaults().span(2, 1).grab(true, false).create());
projectSettingsBlock.createComponent(topControl, gdFillDefaults().span(2, 1).grab(true, false).create());
}

protected String getWorkspacePrefPageId() {
Expand Down
Expand Up @@ -12,32 +12,22 @@

import org.eclipse.core.resources.IProject;

import melnorme.lang.ide.core.operations.ToolchainPreferences;
import melnorme.lang.ide.core.utils.prefs.IProjectPreference;
import melnorme.util.swt.components.AbstractComponentExt;
import melnorme.util.swt.components.fields.ButtonTextField;

public abstract class ProjectSDKSettingsBlock extends ProjectAndPreferencesBlock {

protected final LangSDKConfigBlock langSDKConfigBlock = init_createSDKLocationGroup();

protected final ButtonTextField sdkLocationField = langSDKConfigBlock.sdkLocationGroup.sdkLocationField;

protected final IProjectPreference<String> sdkLocationPref;

public ProjectSDKSettingsBlock(IProject project,
IProjectPreference<Boolean> useProjectSettingsPref,
IProjectPreference<String> sdkLocationPref) {
public ProjectSDKSettingsBlock(IProject project, IProjectPreference<Boolean> useProjectSettingsPref) {
super(project, useProjectSettingsPref);
this.sdkLocationPref = sdkLocationPref;

addFieldBinding(sdkLocationField, sdkLocationPref);
}

protected abstract LangSDKConfigBlock init_createSDKLocationGroup();

@Override
public AbstractComponentExt getParentSettingsBlock() {
protected LangSDKConfigBlock init_createProjectSettingsBlock2() {
LangSDKConfigBlock langSDKConfigBlock = init_createLangSDKBlock();
bindToProjectPref(langSDKConfigBlock.getLocationField(), ToolchainPreferences.SDK_PATH.getProjectPreference());
return langSDKConfigBlock;
}

protected abstract LangSDKConfigBlock init_createLangSDKBlock();

}

0 comments on commit d6a5fb9

Please sign in to comment.