mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Update MBS to use project-specific content types when available
This commit is contained in:
parent
59725982d0
commit
cb24633d18
10 changed files with 179 additions and 51 deletions
|
@ -51,7 +51,7 @@ public class TestLinkerNameProvider implements IManagedOutputNameProvider {
|
||||||
fileName = fileName.substring(2,fileName.length()-1);
|
fileName = fileName.substring(2,fileName.length()-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String[] exts = tool.getPrimaryOutputType().getOutputExtensions();
|
String[] exts = tool.getPrimaryOutputType().getOutputExtensions(tool);
|
||||||
if (exts != null && exts[0].length() > 0) {
|
if (exts != null && exts[0].length() > 0) {
|
||||||
fileName += IManagedBuilderMakefileGenerator.DOT + exts[0];
|
fileName += IManagedBuilderMakefileGenerator.DOT + exts[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,18 +183,20 @@ public interface IInputType extends IBuildObject {
|
||||||
* is specified and registered with Eclipse. Otherwise the
|
* is specified and registered with Eclipse. Otherwise the
|
||||||
* sourceExtensions attribute will be used.
|
* sourceExtensions attribute will be used.
|
||||||
*
|
*
|
||||||
|
* @param tool the tool that contains the input-type
|
||||||
* @return String[]
|
* @return String[]
|
||||||
*/
|
*/
|
||||||
public String[] getSourceExtensions();
|
public String[] getSourceExtensions(ITool tool);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Answers <code>true</code> if the input type considers the file extension to be
|
* Answers <code>true</code> if the input type considers the file extension to be
|
||||||
* one associated with a source file.
|
* one associated with a source file.
|
||||||
*
|
*
|
||||||
* @param ext file extension of the source
|
* @param tool the tool that contains the input-type
|
||||||
|
* @param ext file extension of the source
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public boolean isSourceExtension(String ext);
|
public boolean isSourceExtension(ITool tool, String ext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Eclipse <code>IContentType</code> that describes the
|
* Returns the Eclipse <code>IContentType</code> that describes the
|
||||||
|
@ -242,18 +244,20 @@ public interface IInputType extends IBuildObject {
|
||||||
* is specified and registered with Eclipse. Otherwise the
|
* is specified and registered with Eclipse. Otherwise the
|
||||||
* dependencyExtensions attribute will be used.
|
* dependencyExtensions attribute will be used.
|
||||||
*
|
*
|
||||||
|
* @param tool the tool that contains the input-type
|
||||||
* @return String[]
|
* @return String[]
|
||||||
*/
|
*/
|
||||||
public String[] getDependencyExtensions();
|
public String[] getDependencyExtensions(ITool tool);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Answers <code>true</code> if the input type considers the file extension to be
|
* Answers <code>true</code> if the input type considers the file extension to be
|
||||||
* one associated with a dependency file.
|
* one associated with a dependency file.
|
||||||
*
|
*
|
||||||
* @param ext file extension of the source
|
* @param tool the tool that contains the input-type
|
||||||
|
* @param ext file extension of the source
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public boolean isDependencyExtension(String ext);
|
public boolean isDependencyExtension(ITool tool, String ext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the id of the option that is associated with this
|
* Returns the id of the option that is associated with this
|
||||||
|
|
|
@ -93,18 +93,20 @@ public interface IOutputType extends IBuildObject {
|
||||||
* is specified and registered with Eclipse. Otherwise the
|
* is specified and registered with Eclipse. Otherwise the
|
||||||
* outputs attribute will be used.
|
* outputs attribute will be used.
|
||||||
*
|
*
|
||||||
|
* @param tool the tool that contains the output-type
|
||||||
* @return String[]
|
* @return String[]
|
||||||
*/
|
*/
|
||||||
public String[] getOutputExtensions();
|
public String[] getOutputExtensions(ITool tool);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Answers <code>true</code> if the output type considers the file extension to be
|
* Answers <code>true</code> if the output type considers the file extension to be
|
||||||
* one associated with an output file.
|
* one associated with an output file.
|
||||||
*
|
*
|
||||||
* @param ext file extension
|
* @param tool the tool that contains the output-type
|
||||||
|
* @param ext file extension
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public boolean isOutputExtension(String ext);
|
public boolean isOutputExtension(ITool tool, String ext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the id of the option that is associated with this
|
* Returns the id of the option that is associated with this
|
||||||
|
|
|
@ -16,10 +16,15 @@ import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
import org.eclipse.core.runtime.content.*;
|
import org.eclipse.core.runtime.content.*;
|
||||||
|
import org.eclipse.core.runtime.preferences.IScopeContext;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
|
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IProjectType;
|
import org.eclipse.cdt.managedbuilder.core.IProjectType;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ITool;
|
import org.eclipse.cdt.managedbuilder.core.ITool;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IToolChain;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IInputType;
|
import org.eclipse.cdt.managedbuilder.core.IInputType;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IInputOrder;
|
import org.eclipse.cdt.managedbuilder.core.IInputOrder;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IAdditionalInput;
|
import org.eclipse.cdt.managedbuilder.core.IAdditionalInput;
|
||||||
|
@ -678,6 +683,22 @@ public class InputType extends BuildObject implements IInputType {
|
||||||
return (IPath[])ins.toArray(new IPath[ins.size()]);
|
return (IPath[])ins.toArray(new IPath[ins.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* Returns the project that uses this IInputType
|
||||||
|
*/
|
||||||
|
public IProject getProject(ITool tool) {
|
||||||
|
IProject project = null;
|
||||||
|
IBuildObject toolParent = tool.getParent();
|
||||||
|
if (toolParent != null) {
|
||||||
|
if (toolParent instanceof IToolChain) {
|
||||||
|
return (IProject)((IToolChain)toolParent).getParent().getOwner();
|
||||||
|
} else if (toolParent instanceof IResourceConfiguration) {
|
||||||
|
return (IProject)((IResourceConfiguration)toolParent).getOwner();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* Memory-safe way to access the list of input orders
|
* Memory-safe way to access the list of input orders
|
||||||
*/
|
*/
|
||||||
|
@ -806,10 +827,26 @@ public class InputType extends BuildObject implements IInputType {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IInputType#getDependencyExtensions()
|
* @see org.eclipse.cdt.core.build.managed.IInputType#getDependencyExtensions()
|
||||||
*/
|
*/
|
||||||
public String[] getDependencyExtensions() {
|
public String[] getDependencyExtensions(ITool tool) {
|
||||||
// Use content type if specified and registered with Eclipse
|
// Use content type if specified and registered with Eclipse
|
||||||
IContentType type = getDependencyContentType();
|
IContentType type = getDependencyContentType();
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
|
IContentTypeSettings settings = null;
|
||||||
|
IProject project = getProject(tool);
|
||||||
|
if (project != null) {
|
||||||
|
IScopeContext projectScope = new ProjectScope(project);
|
||||||
|
try {
|
||||||
|
settings = type.getSettings(projectScope);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
if (settings != null) {
|
||||||
|
String[] specs = settings.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
|
// TODO: There doesn't seem to be any way to distinguish between these 2 cases:
|
||||||
|
// 1. No project specific entries have been set so getFileSpecs returns an empty list
|
||||||
|
// 2. There are project specific entries and all of the "default" entries have been removed
|
||||||
|
// For now, we have to assume the first case.
|
||||||
|
if (specs.length > 0) return specs;
|
||||||
|
}
|
||||||
|
}
|
||||||
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
}
|
}
|
||||||
return getDependencyExtensionsAttribute();
|
return getDependencyExtensionsAttribute();
|
||||||
|
@ -818,8 +855,8 @@ public class InputType extends BuildObject implements IInputType {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IInputType#isDependencyExtension()
|
* @see org.eclipse.cdt.core.build.managed.IInputType#isDependencyExtension()
|
||||||
*/
|
*/
|
||||||
public boolean isDependencyExtension(String ext) {
|
public boolean isDependencyExtension(ITool tool, String ext) {
|
||||||
String[] exts = getDependencyExtensions();
|
String[] exts = getDependencyExtensions(tool);
|
||||||
for (int i=0; i<exts.length; i++) {
|
for (int i=0; i<exts.length; i++) {
|
||||||
if (ext.equals(exts[i])) return true;
|
if (ext.equals(exts[i])) return true;
|
||||||
}
|
}
|
||||||
|
@ -1006,20 +1043,36 @@ public class InputType extends BuildObject implements IInputType {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IInputType#getSourceExtensions()
|
* @see org.eclipse.cdt.core.build.managed.IInputType#getSourceExtensions()
|
||||||
*/
|
*/
|
||||||
public String[] getSourceExtensions() {
|
public String[] getSourceExtensions(ITool tool) {
|
||||||
// Use content type if specified and registered with Eclipse
|
// Use content type if specified and registered with Eclipse
|
||||||
IContentType type = getSourceContentType();
|
IContentType type = getSourceContentType();
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
|
IContentTypeSettings settings = null;
|
||||||
|
IProject project = getProject(tool);
|
||||||
|
if (project != null) {
|
||||||
|
IScopeContext projectScope = new ProjectScope(project);
|
||||||
|
try {
|
||||||
|
settings = type.getSettings(projectScope);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
if (settings != null) {
|
||||||
|
String[] specs = settings.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
|
// TODO: There doesn't seem to be any way to distinguish between these 2 cases:
|
||||||
|
// 1. No project specific entries have been set so getFileSpecs returns an empty list
|
||||||
|
// 2. There are project specific entries and all of the "default" entries have been removed
|
||||||
|
// For now, we have to assume the first case.
|
||||||
|
if (specs.length > 0) return specs;
|
||||||
|
}
|
||||||
|
}
|
||||||
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
}
|
}
|
||||||
return getSourceExtensionsAttribute();
|
return getSourceExtensionsAttribute();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IInputType#isDependencyExtension()
|
* @see org.eclipse.cdt.core.build.managed.IInputType#isSourceExtension()
|
||||||
*/
|
*/
|
||||||
public boolean isSourceExtension(String ext) {
|
public boolean isSourceExtension(ITool tool, String ext) {
|
||||||
String[] exts = getSourceExtensions();
|
String[] exts = getSourceExtensions(tool);
|
||||||
for (int i=0; i<exts.length; i++) {
|
for (int i=0; i<exts.length; i++) {
|
||||||
if (ext.equals(exts[i])) return true;
|
if (ext.equals(exts[i])) return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,14 +10,19 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.managedbuilder.internal.core;
|
package org.eclipse.cdt.managedbuilder.internal.core;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
import org.eclipse.core.runtime.content.*;
|
import org.eclipse.core.runtime.content.*;
|
||||||
|
import org.eclipse.core.runtime.preferences.IScopeContext;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
|
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IProjectType;
|
import org.eclipse.cdt.managedbuilder.core.IProjectType;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ITool;
|
import org.eclipse.cdt.managedbuilder.core.ITool;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IInputType;
|
import org.eclipse.cdt.managedbuilder.core.IInputType;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IOutputType;
|
import org.eclipse.cdt.managedbuilder.core.IOutputType;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedOutputNameProvider;
|
import org.eclipse.cdt.managedbuilder.core.IManagedOutputNameProvider;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
|
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IToolChain;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
@ -414,6 +419,22 @@ public class OutputType extends BuildObject implements IOutputType {
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* Returns the project that uses this IOutputType
|
||||||
|
*/
|
||||||
|
public IProject getProject(ITool tool) {
|
||||||
|
IProject project = null;
|
||||||
|
IBuildObject toolParent = tool.getParent();
|
||||||
|
if (toolParent != null) {
|
||||||
|
if (toolParent instanceof IToolChain) {
|
||||||
|
return (IProject)((IToolChain)toolParent).getParent().getOwner();
|
||||||
|
} else if (toolParent instanceof IResourceConfiguration) {
|
||||||
|
return (IProject)((IResourceConfiguration)toolParent).getOwner();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* M O D E L A T T R I B U T E A C C E S S O R S
|
* M O D E L A T T R I B U T E A C C E S S O R S
|
||||||
*/
|
*/
|
||||||
|
@ -637,10 +658,26 @@ public class OutputType extends BuildObject implements IOutputType {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IOuputType#getOutputExtensions()
|
* @see org.eclipse.cdt.core.build.managed.IOuputType#getOutputExtensions()
|
||||||
*/
|
*/
|
||||||
public String[] getOutputExtensions() {
|
public String[] getOutputExtensions(ITool tool) {
|
||||||
// Use content type if specified and registered with Eclipse
|
// Use content type if specified and registered with Eclipse
|
||||||
IContentType type = getOutputContentType();
|
IContentType type = getOutputContentType();
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
|
IContentTypeSettings settings = null;
|
||||||
|
IProject project = getProject(tool);
|
||||||
|
if (project != null) {
|
||||||
|
IScopeContext projectScope = new ProjectScope(project);
|
||||||
|
try {
|
||||||
|
settings = type.getSettings(projectScope);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
if (settings != null) {
|
||||||
|
String[] specs = settings.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
|
// TODO: There doesn't seem to be any way to distinguish between these 2 cases:
|
||||||
|
// 1. No project specific entries have been set so getFileSpecs returns an empty list
|
||||||
|
// 2. There are project specific entries and all of the "default" entries have been removed
|
||||||
|
// For now, we have to assume the first case.
|
||||||
|
if (specs.length > 0) return specs;
|
||||||
|
}
|
||||||
|
}
|
||||||
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
return type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
}
|
}
|
||||||
return getOutputExtensionsAttribute();
|
return getOutputExtensionsAttribute();
|
||||||
|
@ -649,8 +686,8 @@ public class OutputType extends BuildObject implements IOutputType {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.build.managed.IOutputType#isOutputExtension()
|
* @see org.eclipse.cdt.core.build.managed.IOutputType#isOutputExtension()
|
||||||
*/
|
*/
|
||||||
public boolean isOutputExtension(String ext) {
|
public boolean isOutputExtension(ITool tool, String ext) {
|
||||||
String[] exts = getOutputExtensions();
|
String[] exts = getOutputExtensions(tool);
|
||||||
if (exts != null) {
|
if (exts != null) {
|
||||||
for (int i=0; i<exts.length; i++) {
|
for (int i=0; i<exts.length; i++) {
|
||||||
if (ext.equals(exts[i])) return true;
|
if (ext.equals(exts[i])) return true;
|
||||||
|
|
|
@ -70,8 +70,8 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
public static final String DEFAULT_CBS_PATTERN = "${COMMAND}"; //$NON-NLS-1$
|
public static final String DEFAULT_CBS_PATTERN = "${COMMAND}"; //$NON-NLS-1$
|
||||||
|
|
||||||
private static final String DEFAULT_SEPARATOR = ","; //$NON-NLS-1$
|
private static final String DEFAULT_SEPARATOR = ","; //$NON-NLS-1$
|
||||||
private static final IOptionCategory[] EMPTY_CATEGORIES = new IOptionCategory[0];
|
//private static final IOptionCategory[] EMPTY_CATEGORIES = new IOptionCategory[0];
|
||||||
private static final IOption[] EMPTY_OPTIONS = new IOption[0];
|
//private static final IOption[] EMPTY_OPTIONS = new IOption[0];
|
||||||
private static final String EMPTY_STRING = new String();
|
private static final String EMPTY_STRING = new String();
|
||||||
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
||||||
private static final String DEFAULT_ANNOUNCEMENT_PREFIX = "Tool.default.announcement"; //$NON-NLS-1$
|
private static final String DEFAULT_ANNOUNCEMENT_PREFIX = "Tool.default.announcement"; //$NON-NLS-1$
|
||||||
|
@ -1341,7 +1341,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
// Find the primary input type
|
// Find the primary input type
|
||||||
IInputType type = getPrimaryInputType();
|
IInputType type = getPrimaryInputType();
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
String[] exts = type.getSourceExtensions();
|
String[] exts = type.getSourceExtensions(this);
|
||||||
// Use the first entry in the list
|
// Use the first entry in the list
|
||||||
if (exts.length > 0) return exts[0];
|
if (exts.length > 0) return exts[0];
|
||||||
}
|
}
|
||||||
|
@ -1358,7 +1358,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
public String[] getPrimaryInputExtensions() {
|
public String[] getPrimaryInputExtensions() {
|
||||||
IInputType type = getPrimaryInputType();
|
IInputType type = getPrimaryInputType();
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
String[] exts = type.getSourceExtensions();
|
String[] exts = type.getSourceExtensions(this);
|
||||||
// Use the first entry in the list
|
// Use the first entry in the list
|
||||||
if (exts.length > 0) return exts;
|
if (exts.length > 0) return exts;
|
||||||
}
|
}
|
||||||
|
@ -1379,7 +1379,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
if (types != null && types.length > 0) {
|
if (types != null && types.length > 0) {
|
||||||
List allExts = new ArrayList();
|
List allExts = new ArrayList();
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
String[] exts = types[i].getSourceExtensions();
|
String[] exts = types[i].getSourceExtensions(this);
|
||||||
for (int j=0; j<exts.length; j++) {
|
for (int j=0; j<exts.length; j++) {
|
||||||
allExts.add(exts[j]);
|
allExts.add(exts[j]);
|
||||||
}
|
}
|
||||||
|
@ -1419,7 +1419,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
IInputType[] types = getInputTypes();
|
IInputType[] types = getInputTypes();
|
||||||
if (types != null && types.length > 0) {
|
if (types != null && types.length > 0) {
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
if (types[i].isSourceExtension(inputExtension)) {
|
if (types[i].isSourceExtension(this, inputExtension)) {
|
||||||
type = types[i];
|
type = types[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1506,7 +1506,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
if (types != null && types.length > 0) {
|
if (types != null && types.length > 0) {
|
||||||
List allExts = new ArrayList();
|
List allExts = new ArrayList();
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
String[] exts = types[i].getDependencyExtensions();
|
String[] exts = types[i].getDependencyExtensions(this);
|
||||||
for (int j=0; j<exts.length; j++) {
|
for (int j=0; j<exts.length; j++) {
|
||||||
allExts.add(exts[j]);
|
allExts.add(exts[j]);
|
||||||
}
|
}
|
||||||
|
@ -1740,7 +1740,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
IInputType[] types = getInputTypes();
|
IInputType[] types = getInputTypes();
|
||||||
if (types != null) {
|
if (types != null) {
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
if (types[i].isSourceExtension(sourceExt)) {
|
if (types[i].isSourceExtension(this, sourceExt)) {
|
||||||
return ((InputType)types[i]).getDependencyGeneratorElement();
|
return ((InputType)types[i]).getDependencyGeneratorElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1830,7 +1830,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
if (types != null && types.length > 0) {
|
if (types != null && types.length > 0) {
|
||||||
List allExts = new ArrayList();
|
List allExts = new ArrayList();
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
String[] exts = types[i].getOutputExtensions();
|
String[] exts = types[i].getOutputExtensions(this);
|
||||||
if (exts != null) {
|
if (exts != null) {
|
||||||
for (int j=0; j<exts.length; j++) {
|
for (int j=0; j<exts.length; j++) {
|
||||||
allExts.add(exts[j]);
|
allExts.add(exts[j]);
|
||||||
|
@ -1882,8 +1882,8 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
if (types != null) {
|
if (types != null) {
|
||||||
for (i=0; i<types.length; i++) {
|
for (i=0; i<types.length; i++) {
|
||||||
IInputType inputType = types[i].getPrimaryInputType();
|
IInputType inputType = types[i].getPrimaryInputType();
|
||||||
if (inputType != null && inputType.isSourceExtension(inputExtension)) {
|
if (inputType != null && inputType.isSourceExtension(this, inputExtension)) {
|
||||||
String[] exts = types[i].getOutputExtensions();
|
String[] exts = types[i].getOutputExtensions(this);
|
||||||
if (exts != null && exts.length > 0) {
|
if (exts != null && exts.length > 0) {
|
||||||
return exts[0];
|
return exts[0];
|
||||||
}
|
}
|
||||||
|
@ -1893,7 +1893,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
if (getInputType(inputExtension) != null) {
|
if (getInputType(inputExtension) != null) {
|
||||||
// Return the first extension of the primary output type
|
// Return the first extension of the primary output type
|
||||||
IOutputType outType = getPrimaryOutputType();
|
IOutputType outType = getPrimaryOutputType();
|
||||||
String[] exts = outType.getOutputExtensions();
|
String[] exts = outType.getOutputExtensions(this);
|
||||||
if (exts != null && exts.length > 0) {
|
if (exts != null && exts.length > 0) {
|
||||||
return exts[0];
|
return exts[0];
|
||||||
}
|
}
|
||||||
|
@ -1924,7 +1924,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
IOutputType[] types = getOutputTypes();
|
IOutputType[] types = getOutputTypes();
|
||||||
if (types != null && types.length > 0) {
|
if (types != null && types.length > 0) {
|
||||||
for (int i=0; i<types.length; i++) {
|
for (int i=0; i<types.length; i++) {
|
||||||
if (types[i].isOutputExtension(outputExtension)) {
|
if (types[i].isOutputExtension(this, outputExtension)) {
|
||||||
type = types[i];
|
type = types[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2425,7 +2425,6 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
|
||||||
|
|
||||||
private void checkForMigrationSupport() {
|
private void checkForMigrationSupport() {
|
||||||
|
|
||||||
String tmpId = null;
|
|
||||||
boolean isExists = false;
|
boolean isExists = false;
|
||||||
|
|
||||||
if ( getSuperClass() == null) {
|
if ( getSuperClass() == null) {
|
||||||
|
|
|
@ -83,7 +83,7 @@ public class GnuLinkOutputNameProvider implements IManagedOutputNameProvider {
|
||||||
fileName = outputPrefix + fileName;
|
fileName = outputPrefix + fileName;
|
||||||
}
|
}
|
||||||
// Add the primary output type extension
|
// Add the primary output type extension
|
||||||
String[] exts = tool.getPrimaryOutputType().getOutputExtensions();
|
String[] exts = tool.getPrimaryOutputType().getOutputExtensions(tool);
|
||||||
if (exts != null && exts[0].length() > 0) {
|
if (exts != null && exts[0].length() > 0) {
|
||||||
fileName += IManagedBuilderMakefileGenerator.DOT + exts[0];
|
fileName += IManagedBuilderMakefileGenerator.DOT + exts[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,6 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
// What kind of resource change has occurred
|
// What kind of resource change has occurred
|
||||||
if (resource.getType() == IResource.FILE) {
|
if (resource.getType() == IResource.FILE) {
|
||||||
String ext = resource.getFileExtension();
|
String ext = resource.getFileExtension();
|
||||||
boolean moved = false;
|
|
||||||
switch (delta.getKind()) {
|
switch (delta.getKind()) {
|
||||||
case IResourceDelta.ADDED:
|
case IResourceDelta.ADDED:
|
||||||
if (!generator.isGeneratedResource(resource)) {
|
if (!generator.isGeneratedResource(resource)) {
|
||||||
|
@ -232,11 +231,11 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
|
|
||||||
// String constants for makefile contents and messages
|
// String constants for makefile contents and messages
|
||||||
private static final String COMMENT = "MakefileGenerator.comment"; //$NON-NLS-1$
|
private static final String COMMENT = "MakefileGenerator.comment"; //$NON-NLS-1$
|
||||||
private static final String AUTO_DEP = COMMENT + ".autodeps"; //$NON-NLS-1$
|
//private static final String AUTO_DEP = COMMENT + ".autodeps"; //$NON-NLS-1$
|
||||||
private static final String MESSAGE = "ManagedMakeBuilder.message"; //$NON-NLS-1$
|
//private static final String MESSAGE = "ManagedMakeBuilder.message"; //$NON-NLS-1$
|
||||||
private static final String BUILD_ERROR = MESSAGE + ".error"; //$NON-NLS-1$
|
//private static final String BUILD_ERROR = MESSAGE + ".error"; //$NON-NLS-1$
|
||||||
|
|
||||||
private static final String DEP_INCL = COMMENT + ".module.dep.includes"; //$NON-NLS-1$
|
//private static final String DEP_INCL = COMMENT + ".module.dep.includes"; //$NON-NLS-1$
|
||||||
private static final String HEADER = COMMENT + ".header"; //$NON-NLS-1$
|
private static final String HEADER = COMMENT + ".header"; //$NON-NLS-1$
|
||||||
|
|
||||||
protected static final String MESSAGE_FINISH_BUILD = ManagedMakeMessages.getResourceString("MakefileGenerator.message.finish.build"); //$NON-NLS-1$
|
protected static final String MESSAGE_FINISH_BUILD = ManagedMakeMessages.getResourceString("MakefileGenerator.message.finish.build"); //$NON-NLS-1$
|
||||||
|
@ -244,7 +243,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
protected static final String MESSAGE_START_BUILD = ManagedMakeMessages.getResourceString("MakefileGenerator.message.start.build"); //$NON-NLS-1$
|
protected static final String MESSAGE_START_BUILD = ManagedMakeMessages.getResourceString("MakefileGenerator.message.start.build"); //$NON-NLS-1$
|
||||||
protected static final String MESSAGE_START_FILE = ManagedMakeMessages.getResourceString("MakefileGenerator.message.start.file"); //$NON-NLS-1$
|
protected static final String MESSAGE_START_FILE = ManagedMakeMessages.getResourceString("MakefileGenerator.message.start.file"); //$NON-NLS-1$
|
||||||
protected static final String MESSAGE_NO_TARGET_TOOL = ManagedMakeMessages.getResourceString("MakefileGenerator.message.no.target"); //$NON-NLS-1$
|
protected static final String MESSAGE_NO_TARGET_TOOL = ManagedMakeMessages.getResourceString("MakefileGenerator.message.no.target"); //$NON-NLS-1$
|
||||||
private static final String MOD_INCL = COMMENT + ".module.make.includes"; //$NON-NLS-1$
|
//private static final String MOD_INCL = COMMENT + ".module.make.includes"; //$NON-NLS-1$
|
||||||
private static final String MOD_LIST = COMMENT + ".module.list"; //$NON-NLS-1$
|
private static final String MOD_LIST = COMMENT + ".module.list"; //$NON-NLS-1$
|
||||||
private static final String MOD_VARS = COMMENT + ".module.variables"; //$NON-NLS-1$
|
private static final String MOD_VARS = COMMENT + ".module.variables"; //$NON-NLS-1$
|
||||||
private static final String MOD_RULES = COMMENT + ".build.rule"; //$NON-NLS-1$
|
private static final String MOD_RULES = COMMENT + ".build.rule"; //$NON-NLS-1$
|
||||||
|
@ -1601,7 +1600,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
// Generate a build rule for any tool that consumes the output of this tool
|
// Generate a build rule for any tool that consumes the output of this tool
|
||||||
IOutputType[] outTypes = generatingTool.getOutputTypes();
|
IOutputType[] outTypes = generatingTool.getOutputTypes();
|
||||||
for (int i=0; i<outTypes.length; i++) {
|
for (int i=0; i<outTypes.length; i++) {
|
||||||
String[] outExts = outTypes[i].getOutputExtensions();
|
String[] outExts = outTypes[i].getOutputExtensions(generatingTool);
|
||||||
String outVariable = outTypes[i].getBuildVariable();
|
String outVariable = outTypes[i].getBuildVariable();
|
||||||
if (outExts != null) {
|
if (outExts != null) {
|
||||||
for (int j=0; j<outExts.length; j++) {
|
for (int j=0; j<outExts.length; j++) {
|
||||||
|
@ -1863,7 +1862,6 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
tool = buildTools[j];
|
tool = buildTools[j];
|
||||||
}
|
}
|
||||||
// look for the extension in the map
|
// look for the extension in the map
|
||||||
StringBuffer bufferForExtension = new StringBuffer();
|
|
||||||
if (varName == null) {
|
if (varName == null) {
|
||||||
varName = getSourceMacroName(ext).toString();
|
varName = getSourceMacroName(ext).toString();
|
||||||
// Add the resource to the list of all resources associated with a variable.
|
// Add the resource to the list of all resources associated with a variable.
|
||||||
|
@ -2347,7 +2345,6 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
|
||||||
boolean primaryOutput = (type == tool.getPrimaryOutputType());
|
boolean primaryOutput = (type == tool.getPrimaryOutputType());
|
||||||
//if (primaryOutput && ignorePrimary) continue;
|
//if (primaryOutput && ignorePrimary) continue;
|
||||||
String outputPrefix = type.getOutputPrefix();
|
String outputPrefix = type.getOutputPrefix();
|
||||||
String variable = type.getBuildVariable();
|
|
||||||
boolean multOfType = type.getMultipleOfType();
|
boolean multOfType = type.getMultipleOfType();
|
||||||
IOption option = tool.getOptionBySuperClassId(type.getOptionId());
|
IOption option = tool.getOptionBySuperClassId(type.getOptionId());
|
||||||
IManagedOutputNameProvider nameProvider = type.getNameProvider();
|
IManagedOutputNameProvider nameProvider = type.getNameProvider();
|
||||||
|
|
|
@ -42,8 +42,8 @@ import org.eclipse.core.runtime.Path;
|
||||||
*/
|
*/
|
||||||
public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
||||||
|
|
||||||
private static final String EMPTY_STRING = new String();
|
//private static final String EMPTY_STRING = new String();
|
||||||
private static final String OBJS_MACRO = "OBJS"; //$NON-NLS-1$
|
//private static final String OBJS_MACRO = "OBJS"; //$NON-NLS-1$
|
||||||
private static final String DEPS_MACRO = "DEPS"; //$NON-NLS-1$
|
private static final String DEPS_MACRO = "DEPS"; //$NON-NLS-1$
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -223,7 +223,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
||||||
// it gives us an input resource for generating default names
|
// it gives us an input resource for generating default names
|
||||||
// Determine the set of source input macros to use
|
// Determine the set of source input macros to use
|
||||||
HashSet handledInputExtensions = new HashSet();
|
HashSet handledInputExtensions = new HashSet();
|
||||||
String[] exts = type.getSourceExtensions();
|
String[] exts = type.getSourceExtensions(tool);
|
||||||
if (projResources != null) {
|
if (projResources != null) {
|
||||||
for (int j=0; j<projResources.length; j++) {
|
for (int j=0; j<projResources.length; j++) {
|
||||||
if (projResources[j].getType() == IResource.FILE) {
|
if (projResources[j].getType() == IResource.FILE) {
|
||||||
|
@ -232,7 +232,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
||||||
// fix for NPE, bugzilla 99483
|
// fix for NPE, bugzilla 99483
|
||||||
if(fileExt == null)
|
if(fileExt == null)
|
||||||
{
|
{
|
||||||
fileExt = "";
|
fileExt = ""; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int k=0; k<exts.length; k++) {
|
for (int k=0; k<exts.length; k++) {
|
||||||
|
@ -475,7 +475,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
||||||
String namePattern = type.getNamePattern();
|
String namePattern = type.getNamePattern();
|
||||||
if (namePattern == null || namePattern.length() == 0) {
|
if (namePattern == null || namePattern.length() == 0) {
|
||||||
namePattern = outputPrefix + IManagedBuilderMakefileGenerator.WILDCARD;
|
namePattern = outputPrefix + IManagedBuilderMakefileGenerator.WILDCARD;
|
||||||
String outExt = (type.getOutputExtensions())[0];
|
String outExt = (type.getOutputExtensions(tool))[0];
|
||||||
if (outExt != null && outExt.length() > 0) {
|
if (outExt != null && outExt.length() > 0) {
|
||||||
namePattern += DOT + outExt;
|
namePattern += DOT + outExt;
|
||||||
}
|
}
|
||||||
|
@ -597,7 +597,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
|
||||||
switch (calcType) {
|
switch (calcType) {
|
||||||
case IManagedDependencyGenerator.TYPE_COMMAND:
|
case IManagedDependencyGenerator.TYPE_COMMAND:
|
||||||
// iterate over all extensions that the tool knows how to handle
|
// iterate over all extensions that the tool knows how to handle
|
||||||
String[] extensionsList = type.getSourceExtensions();
|
String[] extensionsList = type.getSourceExtensions(tool);
|
||||||
for (int j=0; j<extensionsList.length; j++) {
|
for (int j=0; j<extensionsList.length; j++) {
|
||||||
String extensionName = extensionsList[j];
|
String extensionName = extensionsList[j];
|
||||||
|
|
||||||
|
|
|
@ -13,18 +13,26 @@ package org.eclipse.cdt.managedbuilder.projectconverter;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
|
import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
import org.eclipse.core.resources.WorkspaceJob;
|
import org.eclipse.core.resources.WorkspaceJob;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
|
import org.eclipse.core.runtime.content.IContentTypeManager;
|
||||||
|
import org.eclipse.core.runtime.content.IContentTypeSettings;
|
||||||
|
import org.eclipse.core.runtime.preferences.IScopeContext;
|
||||||
|
|
||||||
class UpdateManagedProject21 {
|
class UpdateManagedProject21 {
|
||||||
|
|
||||||
|
@ -46,10 +54,38 @@ class UpdateManagedProject21 {
|
||||||
monitor.beginTask(ConverterMessages.getFormattedString("UpdateManagedProject20.0", projectName), 1); //$NON-NLS-1$
|
monitor.beginTask(ConverterMessages.getFormattedString("UpdateManagedProject20.0", projectName), 1); //$NON-NLS-1$
|
||||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||||
UpdateManagedProjectManager.backupFile(file, "_21backup", monitor, project); //$NON-NLS-1$
|
UpdateManagedProjectManager.backupFile(file, "_21backup", monitor, project); //$NON-NLS-1$
|
||||||
|
|
||||||
// No physical conversion is need since the 3.0 model is a superset of the 2.1 model
|
// No physical conversion is need since the 3.0 model is a superset of the 2.1 model
|
||||||
// Just upgrade the version
|
// We need to upgrade the version
|
||||||
((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString());
|
((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString());
|
||||||
info.setValid(true);
|
info.setValid(true);
|
||||||
|
// Also we check for this special case. If the project is a C++ project, and it contains .c files, we add
|
||||||
|
// the .c extension to the project-specific list of C++ file extensions so that these projects build as they
|
||||||
|
// did in CDT 2.*. Otherwise the .c files will not be compiled by default since CDT 3.0 switched to using
|
||||||
|
// Eclipse content types.
|
||||||
|
if (CoreModel.hasCCNature(project)) {
|
||||||
|
IResource[] files = project.members();
|
||||||
|
for (int i=0; i<files.length; i++) {
|
||||||
|
String ext = files[i].getFileExtension();
|
||||||
|
if (ext != null && ext.equals("c")) { //$NON-NLS-1$
|
||||||
|
/*
|
||||||
|
* What to do here is not yet decided
|
||||||
|
try {
|
||||||
|
IContentTypeManager manager = Platform.getContentTypeManager();
|
||||||
|
IContentType contentType = manager.getContentType("org.eclipse.cdt.core.cxxSource"); //$NON-NLS-1$
|
||||||
|
IScopeContext projectScope = new ProjectScope(project);
|
||||||
|
IContentTypeSettings settings = contentType.getSettings(projectScope);
|
||||||
|
// TODO: we need to add the default extensions too...
|
||||||
|
settings.addFileSpec("c", IContentType.FILE_EXTENSION_SPEC); //$NON-NLS-1$
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// TODO: Issue message??
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save the updated file
|
// Save the updated file
|
||||||
// If the tree is locked spawn a job to this.
|
// If the tree is locked spawn a job to this.
|
||||||
|
|
Loading…
Add table
Reference in a new issue