1
/*******************************************************************************
2
* Copyright (c) 2007, 2009 Intel Corporation and others.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Intel Corporation - Initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.cdt.internal.core.settings.model;
13
import org.eclipse.cdt.core.envvar.IEnvironmentContributor;
14
import org.eclipse.cdt.core.settings.model.ICBuildSetting;
15
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
16
import org.eclipse.cdt.core.settings.model.ICOutputEntry;
17
import org.eclipse.cdt.core.settings.model.ICSettingContainer;
18
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
19
import org.eclipse.cdt.core.settings.model.extension.impl.CDefaultBuildData;
20
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
21
import org.eclipse.cdt.internal.core.envvar.EnvironmentVariableManager;
22
import org.eclipse.cdt.utils.envvar.StorableEnvironment;
23
import org.eclipse.core.resources.IProject;
24
import org.eclipse.core.runtime.IPath;
26
public class CBuildSettingCache extends CDefaultBuildData implements
27
ICBuildSetting, ICachedData {
28
private CConfigurationDescriptionCache fCfgCache;
29
private StorableEnvironment fEnvironment;
30
private StorableEnvironment fResolvedEnvironment;
31
private ICOutputEntry[] fProjOutputEntries;
32
private ICOutputEntry[] fResolvedOutputEntries;
34
CBuildSettingCache(CBuildData base, CConfigurationDescriptionCache cfgCache){
35
super(/*base.getId(), base*/);
41
fCfgCache.addBuildSetting(this);
43
copySettingsFrom(base);
46
void initEnvironmentCache(){
47
fEnvironment = new StorableEnvironment(
48
EnvironmentVariableManager.getDefault().getVariables(fCfgCache, false),
52
public StorableEnvironment getCachedEnvironment(){
56
public StorableEnvironment getResolvedEnvironment(){
57
if(fResolvedEnvironment == null){
58
fResolvedEnvironment = new StorableEnvironment(
59
EnvironmentVariableManager.getDefault().getVariables(fCfgCache, true),
62
return fResolvedEnvironment;
65
public ICConfigurationDescription getConfiguration() {
69
public ICSettingContainer getParent() {
73
public boolean isReadOnly() {
78
public void setBuilderCWD(IPath path) {
79
throw ExceptionFactory.createIsReadOnlyException();
83
public void setErrorParserIDs(String[] ids) {
84
throw ExceptionFactory.createIsReadOnlyException();
87
public void setName(String name) {
88
throw ExceptionFactory.createIsReadOnlyException();
92
public void setOutputDirectories(ICOutputEntry[] entries) {
93
throw ExceptionFactory.createIsReadOnlyException();
97
public IEnvironmentContributor getBuildEnvironmentContributor() {
98
return fCfgCache.getConfigurationData().getBuildData().getBuildEnvironmentContributor();
101
public ICOutputEntry[] getResolvedOutputDirectories() {
102
if(fResolvedOutputEntries == null){
103
ICOutputEntry[] entries = getOutputDirectories();
104
return CDataUtil.resolveEntries(entries, getConfiguration());
106
return fResolvedOutputEntries;
110
public ICOutputEntry[] getOutputDirectories() {
112
return fProjOutputEntries.clone();
115
private void initOutputEntries(){
116
if(fProjOutputEntries == null){
117
IProject project = getProject();
118
fProjOutputEntries = CDataUtil.adjustEntries(fOutputEntries, true, project);
122
private IProject getProject(){
123
ICConfigurationDescription cfg = getConfiguration();
124
return cfg.isPreferenceConfiguration() ? null : cfg.getProjectDescription().getProject();