From 3abb5693741ddff673a19523648b0201bd6775e4 Mon Sep 17 00:00:00 2001 From: Sean Evoy Date: Mon, 13 Dec 2004 17:37:51 +0000 Subject: [PATCH] Commit for Leo Treggiari -- Bug 80820 Two problems for converting 1.2 projects using 3rd party tool integrations If there is no match for an option in the project being converted, ignore the option and continue converting the configuration Patch tool lookup in converters to handle the case where the location of the definition fools the manifest reader and effectively hides the tool --- .../resources/oldTypeProjects/1.2/test12.zip | Bin 1862 -> 1844 bytes .../resources/oldTypeProjects/2.0/test20.zip | Bin 40872 -> 9016 bytes .../core/tests/ManagedProjectUpdateTests.java | 8 +- .../UpdateManagedProject12.java | 105 ++++++++---------- .../UpdateManagedProject20.java | 94 ++++++++-------- 5 files changed, 98 insertions(+), 109 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip index 8a12bbf6887eba20b3e4c947296c9b1a47a788a9..f1a0046625e8072a605bd06dd31dc33975b249f1 100644 GIT binary patch delta 488 zcmX@cw}o$l@#IEUap^{v3#)`B-}tZHx?JwIn2dg3bl=3z#>UQt4ULoUGwDs7n#MSH z;vZwi#>obZ`am*)QP!Z*KW;{GT8U~!^2*P1kIwsbHsVA0>P8tkdH+i~vt`P>%yScU z>)T(w-r^>uoWFpnfAU&Jb;jPwR~g$l`is}zw%cmbJ2{!jlNkF28QAa0r8?%zLvZbc zgOe4Qy(i}|+p=>BzUU|qpD=kNv#|^p69WSWLluKwK~a8IYH~@iODe-21|Z;INFc@< zLsV;eC!Wn?QWR;uKI;cx+P9`%MUBZx($nv5v15qK%0-u zdiTJuOtW{g6s!5xVvslH5apmMktiix2Fk^EEl67nrLJ)5Yf;`H=$e_Tmt#R^6 OHf5lZ%0LBz?8X2S!?~mY delta 459 zcmdnOcZ_d>u_P~-lU#C2LZ(1sLV`g;1B1LmS_-Riq^td8K^74Ok@`V;hHk@!H#VTTSdICo*{wZKW_51N$AhRL6XI2(Gn1$U9k@*_)ATavHNO2QQc4 zi;nVe`^l@AjTw0--({8|+GHa%lkF#-&0|s&X}vz{2VdH^rd>t$$w|`F?{2YUh|A-! zI>0hxnf>H07B^0NwJSY*%Uw?MPQJk+Cutw?T*x)g-Ti=-ije&?ah*3}TJIkCm1){f z=4Ukrxrj|-avZA|(XIme>k4ZyFvK+2+<{~Pn}skh7ZU>m2ZJC32rx1zFl@7*yo*g4 PY`8K|4I{fT6E7D4^%{x; diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip index 46411a915f8c9dd287fa514744d80dd4e0bc835a..e783c848ce4817a238a8eb57f3a6a4f070e84256 100644 GIT binary patch delta 3396 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 Wg%gOCj_oKi{1d?2*#@^zsQ&`|8DK&H literal 40872 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 diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java index e56e8d6120d..914c5f8e162 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java @@ -52,8 +52,10 @@ public class ManagedProjectUpdateTests extends TestCase { private IProject[] createVersionProjects(String version){ File file = getVersionProjectsDir(version); - if(file == null) + if(file == null) { + fail("Test project directory " + file.getName() + " is missing."); return null; + } File projectZips[] = file.listFiles(new FileFilter(){ public boolean accept(File pathname){ @@ -80,8 +82,10 @@ public class ManagedProjectUpdateTests extends TestCase { catch(Exception e){ } } - if(projectList.size() == 0) + if(projectList.size() == 0) { + fail("No projects found in test project directory " + file.getName() + ". The .zip file may be missing or corrupt."); return null; + } return (IProject[])projectList.toArray(new IProject[projectList.size()]); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java index 0b79a64b2c2..b1f1775737d 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java @@ -218,6 +218,7 @@ class UpdateManagedProject12 { convertToolRef(toolChain, (Element) toolRefNodes.item(refIndex), monitor); } catch(CoreException e){ + // TODO: Need error dialog! newProject.removeConfiguration(newConfigId); throw e; } @@ -233,7 +234,7 @@ class UpdateManagedProject12 { String optId = null; String[] idTokens = oldId.split(REGEXP_SEPARATOR); Vector oldIdVector = new Vector(Arrays.asList(idTokens)); - if (isBuiltInOption(oldIdVector)) { + if (isBuiltInOption(oldIdVector)) { // New ID will be in form gnu.[c|c++|both].[compiler|link|lib].option.{1.2_component} Vector newIdVector = new Vector(idTokens.length + 2); @@ -314,7 +315,6 @@ class UpdateManagedProject12 { // ignore this exception too } - // Construct the new ID optId = new String(); for (int rebuildIndex = 0; rebuildIndex < newIdVector.size(); ++ rebuildIndex) { @@ -350,8 +350,7 @@ class UpdateManagedProject12 { return curOption.getId(); } - throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, - ConverterMessages.getFormattedString("UpdateManagedProject12.3",optId), null)); //$NON-NLS-1$ + return optId; } protected static void convertOptionRef(IToolChain toolChain, ITool tool, Element optRef) @@ -362,51 +361,47 @@ class UpdateManagedProject12 { optId = getNewOptionId(toolChain, tool, optId); // Get the option from the new tool IOption newOpt = tool.getOptionById(optId); - if (newOpt == null) { - throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, - ConverterMessages.getFormattedString("UpdateManagedProject12.4",optId), null)); //$NON-NLS-1$ - } - - IConfiguration configuration = toolChain.getParent(); - - try { - switch (newOpt.getValueType()) { - case IOption.BOOLEAN: - Boolean bool = new Boolean(optRef.getAttribute(IOption.DEFAULT_VALUE)); - configuration.setOption(tool, newOpt, bool.booleanValue()); - break; - case IOption.STRING: - case IOption.ENUMERATED: - // This is going to be the human readable form of the enumerated value - String name = (String) optRef.getAttribute(IOption.DEFAULT_VALUE); - // Convert it to the ID - String idValue = newOpt.getEnumeratedId(name); - configuration.setOption(tool, newOpt, idValue != null ? idValue : name); - break; - case IOption.STRING_LIST: - case IOption.INCLUDE_PATH: - case IOption.PREPROCESSOR_SYMBOLS: - case IOption.LIBRARIES: - case IOption.OBJECTS: - Vector values = new Vector(); - NodeList nodes = optRef.getElementsByTagName(IOption.LIST_VALUE); - for (int i = 0; i < nodes.getLength(); ++i) { - Node node = nodes.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Boolean isBuiltIn = new Boolean(((Element)node).getAttribute(IOption.LIST_ITEM_BUILTIN)); - if (!isBuiltIn.booleanValue()) { - values.add(((Element)node).getAttribute(IOption.LIST_ITEM_VALUE)); + if (newOpt != null) { // Ignore options that don't have a match + IConfiguration configuration = toolChain.getParent(); + + try { + switch (newOpt.getValueType()) { + case IOption.BOOLEAN: + Boolean bool = new Boolean(optRef.getAttribute(IOption.DEFAULT_VALUE)); + configuration.setOption(tool, newOpt, bool.booleanValue()); + break; + case IOption.STRING: + case IOption.ENUMERATED: + // This is going to be the human readable form of the enumerated value + String name = (String) optRef.getAttribute(IOption.DEFAULT_VALUE); + // Convert it to the ID + String idValue = newOpt.getEnumeratedId(name); + configuration.setOption(tool, newOpt, idValue != null ? idValue : name); + break; + case IOption.STRING_LIST: + case IOption.INCLUDE_PATH: + case IOption.PREPROCESSOR_SYMBOLS: + case IOption.LIBRARIES: + case IOption.OBJECTS: + Vector values = new Vector(); + NodeList nodes = optRef.getElementsByTagName(IOption.LIST_VALUE); + for (int i = 0; i < nodes.getLength(); ++i) { + Node node = nodes.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + Boolean isBuiltIn = new Boolean(((Element)node).getAttribute(IOption.LIST_ITEM_BUILTIN)); + if (!isBuiltIn.booleanValue()) { + values.add(((Element)node).getAttribute(IOption.LIST_ITEM_VALUE)); + } } } - } - configuration.setOption(tool, newOpt, (String[])values.toArray(new String[values.size()])); - break; + configuration.setOption(tool, newOpt, (String[])values.toArray(new String[values.size()])); + break; + } + } catch (BuildException e) { + throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, + ConverterMessages.getFormattedString("UpdateManagedProject12.5",e.getMessage()), e)); //$NON-NLS-1$ } - } catch (BuildException e) { - throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, - ConverterMessages.getFormattedString("UpdateManagedProject12.5",e.getMessage()), e)); //$NON-NLS-1$ - } - + } } /* (non-Javadoc) @@ -582,17 +577,15 @@ class UpdateManagedProject12 { ITool parent = curTool.getSuperClass(); String curToolId = curTool.getId(); + while (parent != null) { + String parentId = parent.getId(); + if(parentId.equals(toolId)) + break; + parent = parent.getSuperClass(); + } if(parent == null) continue; - - parent = parent.getSuperClass(); - if(parent == null) - continue; - - String parentId = parent.getId(); - if(!parentId.equals(toolId)) - continue; - + try{ Integer.decode(curToolId.substring(curToolId.lastIndexOf('.')+1)); //$NON-NLS-1$ } @@ -611,9 +604,7 @@ class UpdateManagedProject12 { protected static void convertToolRef(IToolChain toolChain, Element oldToolRef, IProgressMonitor monitor) throws CoreException { String toolId = oldToolRef.getAttribute(IToolReference.ID); - toolId = getNewToolId(toolChain, toolId); - IConfiguration configuration = toolChain.getParent(); // Get the new tool out of the configuration diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java index a709537b4e2..2655667202f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java @@ -286,17 +286,15 @@ class UpdateManagedProject20 { ITool parent = curTool.getSuperClass(); String curToolId = curTool.getId(); - if(parent == null) - continue; - - parent = parent.getSuperClass(); + while (parent != null) { + String parentId = parent.getId(); + if(parentId.equals(toolId)) + break; + parent = parent.getSuperClass(); + } if(parent == null) continue; - String parentId = parent.getId(); - if(!parentId.equals(toolId)) - continue; - try{ Integer.decode(curToolId.substring(curToolId.lastIndexOf('.')+1)); //$NON-NLS-1$ } @@ -374,56 +372,52 @@ class UpdateManagedProject20 { if(option == null) option = tool.getOptionById(optId); - if(option == null){ - throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, - ConverterMessages.getFormattedString("UpdateManagedProject20.7",optId), null)); //$NON-NLS-1$ - } - - try{ - int type = option.getValueType(); - - switch(type){ - case IOption.BOOLEAN:{ - if(optRef.hasAttribute(IOption.DEFAULT_VALUE)){ - Boolean bool = new Boolean(optRef.getAttribute(IOption.DEFAULT_VALUE)); - configuration.setOption(tool,option,bool.booleanValue()); + if (option != null) { // Ignore options that don't have a match + try{ + int type = option.getValueType(); + + switch(type){ + case IOption.BOOLEAN:{ + if(optRef.hasAttribute(IOption.DEFAULT_VALUE)){ + Boolean bool = new Boolean(optRef.getAttribute(IOption.DEFAULT_VALUE)); + configuration.setOption(tool,option,bool.booleanValue()); + } + break; } - break; - } - case IOption.ENUMERATED: - case IOption.STRING:{ - if(optRef.hasAttribute(IOption.DEFAULT_VALUE)) - configuration.setOption(tool,option,optRef.getAttribute(IOption.DEFAULT_VALUE)); - break; - } - case IOption.STRING_LIST: - case IOption.INCLUDE_PATH: - case IOption.PREPROCESSOR_SYMBOLS: - case IOption.LIBRARIES: - case IOption.OBJECTS:{ - Vector values = new Vector(); - NodeList nodes = optRef.getElementsByTagName(IOption.LIST_VALUE); - for (int j = 0; j < nodes.getLength(); ++j) { - Node node = nodes.item(j); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Boolean isBuiltIn = new Boolean(((Element)node).getAttribute(IOption.LIST_ITEM_BUILTIN)); - if (!isBuiltIn.booleanValue()) { - values.add(((Element)node).getAttribute(IOption.LIST_ITEM_VALUE)); + case IOption.ENUMERATED: + case IOption.STRING:{ + if(optRef.hasAttribute(IOption.DEFAULT_VALUE)) + configuration.setOption(tool,option,optRef.getAttribute(IOption.DEFAULT_VALUE)); + break; + } + case IOption.STRING_LIST: + case IOption.INCLUDE_PATH: + case IOption.PREPROCESSOR_SYMBOLS: + case IOption.LIBRARIES: + case IOption.OBJECTS:{ + Vector values = new Vector(); + NodeList nodes = optRef.getElementsByTagName(IOption.LIST_VALUE); + for (int j = 0; j < nodes.getLength(); ++j) { + Node node = nodes.item(j); + if (node.getNodeType() == Node.ELEMENT_NODE) { + Boolean isBuiltIn = new Boolean(((Element)node).getAttribute(IOption.LIST_ITEM_BUILTIN)); + if (!isBuiltIn.booleanValue()) { + values.add(((Element)node).getAttribute(IOption.LIST_ITEM_VALUE)); + } } } + configuration.setOption(tool,option,(String[])values.toArray(new String[values.size()])); + break; } - configuration.setOption(tool,option,(String[])values.toArray(new String[values.size()])); + default: break; } - default: - break; + } + catch(BuildException e){ + throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, + ConverterMessages.getFormattedString("UpdateManagedProject20.8",e.getMessage()), e)); //$NON-NLS-1$ } } - catch(BuildException e){ - throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, - ConverterMessages.getFormattedString("UpdateManagedProject20.8",e.getMessage()), e)); //$NON-NLS-1$ - } - } }