mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug fixes for conversion functionality
This commit is contained in:
parent
6c54322782
commit
0c84b90020
1 changed files with 178 additions and 16 deletions
|
@ -2640,7 +2640,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
// If there is a converter element for toolChain, invoke it
|
// If there is a converter element for toolChain, invoke it
|
||||||
// toolChain converter should take care of invoking converters of it's children
|
// toolChain converter should take care of invoking converters of it's children
|
||||||
if ( invokeConverter(toolChain, buildInfo, element) != true ) {
|
if ( invokeConverter(toolChain, element) == null ) {
|
||||||
buildInfo.getManagedProject().setValid(false);
|
buildInfo.getManagedProject().setValid(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2655,7 +2655,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
||||||
element = ((Tool)tool).getPreviousMbsVersionConversionElement();
|
element = ((Tool)tool).getPreviousMbsVersionConversionElement();
|
||||||
}
|
}
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
if ( invokeConverter(tool, buildInfo, element) != true ) {
|
if ( invokeConverter(tool, element) == null ) {
|
||||||
buildInfo.getManagedProject().setValid(false);
|
buildInfo.getManagedProject().setValid(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2670,7 +2670,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
if ( invokeConverter(builder, buildInfo, element) != true ) {
|
if ( invokeConverter(builder, element) == null ) {
|
||||||
buildInfo.getManagedProject().setValid(false);
|
buildInfo.getManagedProject().setValid(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2683,15 +2683,12 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean invokeConverter(IBuildObject buildObject,
|
private static IBuildObject invokeConverter(IBuildObject buildObject, IConfigurationElement element) {
|
||||||
IManagedBuildInfo buildInfo, IConfigurationElement element) {
|
|
||||||
String toId = null;
|
|
||||||
String fromId = null;
|
|
||||||
IConvertManagedBuildObject convertBuildObject = null;
|
|
||||||
|
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
toId = element.getAttribute("toId"); //$NON-NLS-1$
|
IConvertManagedBuildObject convertBuildObject = null;
|
||||||
fromId = element.getAttribute("fromId"); //$NON-NLS-1$
|
String toId = element.getAttribute("toId"); //$NON-NLS-1$
|
||||||
|
String fromId = element.getAttribute("fromId"); //$NON-NLS-1$
|
||||||
|
|
||||||
try {
|
try {
|
||||||
convertBuildObject = (IConvertManagedBuildObject) element
|
convertBuildObject = (IConvertManagedBuildObject) element
|
||||||
|
@ -2703,16 +2700,181 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
||||||
|
|
||||||
if (convertBuildObject != null) {
|
if (convertBuildObject != null) {
|
||||||
// invoke the converter
|
// invoke the converter
|
||||||
if (convertBuildObject
|
return convertBuildObject.convert(buildObject, fromId, toId, false);
|
||||||
.convert(buildObject, fromId, toId, false) != null) {
|
|
||||||
// If it is successful, return 'true'
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if control comes here, it means that either 'convertBuildObject' is null or
|
// if control comes here, it means that either 'convertBuildObject' is null or
|
||||||
// converter did not convert the object successfully
|
// converter did not convert the object successfully
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic Converter function.
|
||||||
|
* If the converter is available for the given Build Object, it calls the corresponding converter.
|
||||||
|
* It returns null if there are no converters or if the conversion is not successful
|
||||||
|
* It returns 'IBuildObject' if the conversion is successful.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static IBuildObject convert(IBuildObject buildObj, String toId,
|
||||||
|
boolean userhasConfirmed) {
|
||||||
|
|
||||||
|
String tmpToId = null;
|
||||||
|
|
||||||
|
// Get the Converter Extension Point
|
||||||
|
IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
|
||||||
|
.getExtensionPoint("org.eclipse.cdt.managedbuilder.core", //$NON-NLS-1$
|
||||||
|
"projectConverter"); //$NON-NLS-1$
|
||||||
|
if (extensionPoint != null) {
|
||||||
|
// Get the extensions
|
||||||
|
IExtension[] extensions = extensionPoint.getExtensions();
|
||||||
|
for (int i = 0; i < extensions.length; i++) {
|
||||||
|
// Get the configuration elements of each extension
|
||||||
|
IConfigurationElement[] configElements = extensions[i]
|
||||||
|
.getConfigurationElements();
|
||||||
|
for (int j = 0; j < configElements.length; j++) {
|
||||||
|
|
||||||
|
IConfigurationElement element = configElements[j];
|
||||||
|
if (element.getName().equals("converter") && (isBuildObjectApplicableForConversion(buildObj, element) == true)) { //$NON-NLS-1$
|
||||||
|
tmpToId = element.getAttribute("toId"); //$NON-NLS-1$
|
||||||
|
if (tmpToId.equals(toId)) {
|
||||||
|
return invokeConverter(buildObj, element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic routine for checking the availability of converters for the given
|
||||||
|
* Build Object.
|
||||||
|
* @param IBuildObject, This function takes a 'IBuildObject' as an argument
|
||||||
|
* @return true if there are converters for the given Build Object
|
||||||
|
* @return false if there are no converters
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static boolean hasTargetConversionElements(IBuildObject buildObj) {
|
||||||
|
|
||||||
|
// Get the Converter Extension Point
|
||||||
|
IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
|
||||||
|
.getExtensionPoint("org.eclipse.cdt.managedbuilder.core", //$NON-NLS-1$
|
||||||
|
"projectConverter"); //$NON-NLS-1$
|
||||||
|
if (extensionPoint != null) {
|
||||||
|
// Get the extensions
|
||||||
|
IExtension[] extensions = extensionPoint.getExtensions();
|
||||||
|
for (int i = 0; i < extensions.length; i++) {
|
||||||
|
// Get the configuration elements of each extension
|
||||||
|
IConfigurationElement[] configElements = extensions[i]
|
||||||
|
.getConfigurationElements();
|
||||||
|
for (int j = 0; j < configElements.length; j++) {
|
||||||
|
|
||||||
|
IConfigurationElement element = configElements[j];
|
||||||
|
if (element.getName().equals("converter") && (isBuildObjectApplicableForConversion(buildObj, element) == true)) //$NON-NLS-1$
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic function for getting the list of converters for the given Build Object
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static Map getConversionElements(IBuildObject buildObj) {
|
||||||
|
|
||||||
|
Map conversionTargets = new HashMap();
|
||||||
|
|
||||||
|
// Get the Converter Extension Point
|
||||||
|
IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
|
||||||
|
.getExtensionPoint("org.eclipse.cdt.managedbuilder.core", //$NON-NLS-1$
|
||||||
|
"projectConverter"); //$NON-NLS-1$
|
||||||
|
if (extensionPoint != null) {
|
||||||
|
// Get the extensions
|
||||||
|
IExtension[] extensions = extensionPoint.getExtensions();
|
||||||
|
for (int i = 0; i < extensions.length; i++) {
|
||||||
|
// Get the configuration elements of each extension
|
||||||
|
IConfigurationElement[] configElements = extensions[i]
|
||||||
|
.getConfigurationElements();
|
||||||
|
for (int j = 0; j < configElements.length; j++) {
|
||||||
|
IConfigurationElement element = configElements[j];
|
||||||
|
if (element.getName().equals("converter") && (isBuildObjectApplicableForConversion(buildObj, element) == true)) { //$NON-NLS-1$
|
||||||
|
conversionTargets.put((String) element
|
||||||
|
.getAttribute("name"), element); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return conversionTargets;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic function that checks whether the given conversion element can be used to convert the given
|
||||||
|
* build object. It returns true if the given build object is convertable, otherwise it returns false.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static boolean isBuildObjectApplicableForConversion(
|
||||||
|
IBuildObject buildObj, IConfigurationElement element) {
|
||||||
|
|
||||||
|
String id = null;
|
||||||
|
String fromId = element.getAttribute("fromId"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
// Check whether the current converter can be used for conversion
|
||||||
|
|
||||||
|
if (buildObj instanceof IProjectType) {
|
||||||
|
IProjectType projType = (IProjectType) buildObj;
|
||||||
|
|
||||||
|
// Check whether the converter's 'fromId' and the
|
||||||
|
// given projType 'id' are equal
|
||||||
|
while (projType != null) {
|
||||||
|
id = projType.getId();
|
||||||
|
|
||||||
|
if (fromId.equals(id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
projType = projType.getSuperClass();
|
||||||
|
}
|
||||||
|
} else if (buildObj instanceof IToolChain) {
|
||||||
|
IToolChain toolChain = (IToolChain) buildObj;
|
||||||
|
|
||||||
|
// Check whether the converter's 'fromId' and the
|
||||||
|
// given toolChain 'id' are equal
|
||||||
|
while (toolChain != null) {
|
||||||
|
id = toolChain.getId();
|
||||||
|
|
||||||
|
if (fromId.equals(id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
toolChain = toolChain.getSuperClass();
|
||||||
|
}
|
||||||
|
} else if (buildObj instanceof ITool) {
|
||||||
|
ITool tool = (ITool) buildObj;
|
||||||
|
|
||||||
|
// Check whether the converter's 'fromId' and the
|
||||||
|
// given tool 'id' are equal
|
||||||
|
while (tool != null) {
|
||||||
|
id = tool.getId();
|
||||||
|
|
||||||
|
if (fromId.equals(id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
tool = tool.getSuperClass();
|
||||||
|
}
|
||||||
|
} else if (buildObj instanceof IBuilder) {
|
||||||
|
IBuilder builder = (IBuilder) buildObj;
|
||||||
|
|
||||||
|
// Check whether the converter's 'fromId' and the
|
||||||
|
// given builder 'id' are equal
|
||||||
|
while (builder != null) {
|
||||||
|
id = builder.getId();
|
||||||
|
|
||||||
|
if (fromId.equals(id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
builder = builder.getSuperClass();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue