Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-dev] IProjectEnvironmentVariableSupplier problem

Hi,

I have added an IProjectEnvironmentVariableSupplier to my plugin. I am adding directories to the PATH and to the C_INCLUDE_PATH. My directories are being added succesfully, but there are a couple of strange additions that I can't explain. For project TEST, I end up with two additional 'paths' called:
TEST/[Ljava.lang.String;@1a1f05f and
TEST/[Ljava.lang.String;@ac087b

These look like string arrays that are being displayed as Strings. Any ideas what I might be doing wrong?

Here's my code:
package com.crt.advproject.custom;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
import org.eclipse.cdt.managedbuilder.envvar.IProjectEnvironmentVariableSupplier;

import com.crt.advproject.Activator;
import com.crt.utils.general.Utils;

public class CRTEnvironmentSupplier implements
		IProjectEnvironmentVariableSupplier {

	private Map<String, IBuildEnvironmentVariable> envvars = null;

	private static final String DELIMITER = ";";

	private static class CRTBuildEnvironmentVariable implements
			IBuildEnvironmentVariable {

		private final String name;
		private final String value;
		private final int operation;

		public CRTBuildEnvironmentVariable(String name, String value,
				int operation) {
			this.name = name;
			this.value = value;
			this.operation = operation;
		}

		public String getDelimiter() {
			return DELIMITER;
		}

		public String getName() {
			return name;
		}

		public String getValue() {
			return value;
		}

		public int getOperation() {
			return operation;
		}

	}

	public IBuildEnvironmentVariable getVariable(String variableName,
			IManagedProject project, IEnvironmentVariableProvider provider) {
		return getVars().get(variableName);
	}

	public IBuildEnvironmentVariable[] getVariables(IManagedProject project,
			IEnvironmentVariableProvider provider) {
		Map<String, IBuildEnvironmentVariable> envvars = getVars();
		return envvars.values().toArray(
				new IBuildEnvironmentVariable[envvars.size()]);
	}

	private void addvar(Map<String, IBuildEnvironmentVariable> envvars,
			IBuildEnvironmentVariable var) {
		envvars.put(var.getName(), var);
	}

	private StringBuffer addPath(StringBuffer buf, String[] dirs, String sep) {
		for (int i = 0; i < dirs.length; i++) {
			buf.append(dirs[i]);
			if (i != dirs.length-1)
				buf.append(sep);
		}
		return buf;
	}

	private Map<String, IBuildEnvironmentVariable> getVars() {
		if (envvars == null) {
			envvars = new HashMap<String, IBuildEnvironmentVariable>();
			StringBuffer buff = new StringBuffer();

			String[] dirs = Utils.getDirectories(Utils.PATH_DIRECTORIES);
			addPath(buff, dirs, DELIMITER);
			addvar(envvars, new CRTBuildEnvironmentVariable("PATH", buff
					.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));

			buff = new StringBuffer();
			dirs = Utils.getDirectories(Utils.INCLUDE_DIRECTORIES);
			addPath(buff, dirs, DELIMITER);
			addvar(envvars, new CRTBuildEnvironmentVariable("C_INCLUDE_PATH",
					buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));

		}
		return envvars;
	}

}

--
Derek


Back to the top