diff --git a/data/resources/filetypes/Filetypes.xml b/data/resources/filetypes/Filetypes.xml deleted file mode 100644 index 2738936b8c..0000000000 --- a/data/resources/filetypes/Filetypes.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - ${res:ICSharpCode.FiletypeRegisterer.SharpDevelopCombineFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.SharpDevelopProjectFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.CSharpSourceFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.VBNetSourceFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.JavaSourceFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.XMLFormFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.ResXResourceFilesFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.BinaryResourceFilesFileAssozisation} - ${res:ICSharpCode.FiletypeRegisterer.XmlFileAssozisation} - diff --git a/data/resources/filetypes/c.ico b/data/resources/filetypes/c.ico deleted file mode 100644 index 2389e7bd2f..0000000000 Binary files a/data/resources/filetypes/c.ico and /dev/null differ diff --git a/data/resources/filetypes/xml.ico b/data/resources/filetypes/xml.ico deleted file mode 100644 index e5d84f07d1..0000000000 Binary files a/data/resources/filetypes/xml.ico and /dev/null differ diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs index f5faa49017..fcc54d9561 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs @@ -122,7 +122,7 @@ namespace CSharpBinding parameterTypes[i] = rr.ResolvedType; } } - dp.DefaultIndex = TypeVisitor.FindOverload(new ArrayList(methods), parameterTypes, false, out overloadIsSure); + dp.DefaultIndex = TypeVisitor.FindOverload(methods, parameterTypes, false, out overloadIsSure); } editor.ShowInsightWindow(dp); if (overloadIsSure) { diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs index 0866d17bf5..502ed41ef8 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs @@ -146,7 +146,7 @@ namespace VBNetBinding parameterTypes[i] = rr.ResolvedType; } } - dp.DefaultIndex = TypeVisitor.FindOverload(new ArrayList(methods), parameterTypes, false, out overloadIsSure); + dp.DefaultIndex = TypeVisitor.FindOverload(methods, parameterTypes, false, out overloadIsSure); } editor.ShowInsightWindow(dp); if (overloadIsSure) { diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.addin b/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.addin index d01d299c13..62fa7ce273 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.addin +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.addin @@ -6,18 +6,20 @@ version = "1.0.0"> - + - + - + + + - + + class = "ICSharpCode.FiletypeRegisterer.RegisterFiletypesPanel"/> diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.csproj b/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.csproj index daaf3e5373..150447767d 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.csproj +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/FiletypeRegisterer.csproj @@ -12,6 +12,7 @@ False OnSuccessfulBuild Library + ICSharpCode.FiletypeRegisterer True @@ -36,7 +37,36 @@ UserControl - + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + @@ -49,16 +79,7 @@ ICSharpCode.Core False - - - - - - - - - - + \ No newline at end of file diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesCommand.cs b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesCommand.cs index d329aac7ab..4d8f04d064 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesCommand.cs +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesCommand.cs @@ -24,21 +24,14 @@ namespace ICSharpCode.FiletypeRegisterer { public class RegisterFiletypesCommand : AbstractCommand { readonly public static string uiFiletypesProperty = "SharpDevelop.Filetypes"; + + // used in .addin file readonly public static string uiRegisterStartupProperty = "SharpDevelop.FiletypesRegisterStartup"; const int SHCNE_ASSOCCHANGED = 0x08000000; const int SHCNF_IDLIST = 0x0; - readonly public static string[,] FileTypes_err = new string[,] - {{"${res:ICSharpCode.FiletypeRegisterer.SharpDevelopCombineFileAssozisation}", "cmbx", "cmbx.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.SharpDevelopProjectFileAssozisation}", "prjx", "prjx.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.CSharpSourceFileAssozisation}" , "cs" , "cs.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.VBNetSourceFileAssozisation}" , "vb" , "vb.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.JavaSourceFileAssozisation}" , "java", "java.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.XMLFormFileAssozisation}" , "xfrm", "xfrm.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.ResXResourceFilesFileAssozisation}" , "resx", "resx.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.BinaryResourceFilesFileAssozisation}", "resources", "resx.ico"}, - {"${res:ICSharpCode.FiletypeRegisterer.XmlFileAssozisation}" , "xml", "xml.ico"}}; + public static string DefaultExtensions = "sln|csproj|vbproj"; public static string[,] GetFileTypes() { @@ -46,10 +39,8 @@ namespace ICSharpCode.FiletypeRegisterer { XmlDocument doc = new XmlDocument(); - doc.Load(System.IO.Path.Combine(PropertyService.DataDirectory, "resources") + - Path.DirectorySeparatorChar + "filetypes" + - Path.DirectorySeparatorChar + "Filetypes.xml"); - + doc.Load(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "filetypes\\Filetypes.xml")); + XmlNodeList nodes = doc.DocumentElement.ChildNodes; string[,] ret = new string[doc.DocumentElement.ChildNodes.Count, 3]; @@ -60,19 +51,18 @@ namespace ICSharpCode.FiletypeRegisterer { ret[i, 2] = el.Attributes["icon"].InnerText; } return ret; - } catch (Exception) { - return FileTypes_err; + } catch (Exception ex) { + MessageService.ShowError(ex); + return new string[0, 0]; } } public override void Run() { + // register Combine and Project by default + RegisterFiletypes(PropertyService.Get(uiFiletypesProperty, DefaultExtensions)); - - if (PropertyService.Get(uiRegisterStartupProperty, true)) { - // register Combine and Project by default - RegisterFiletypes(PropertyService.Get(uiFiletypesProperty, "cmbx|prjx")); - } + RegisterUnknownFiletypes(); } public static void RegisterFiletypes(string types) @@ -81,7 +71,7 @@ namespace ICSharpCode.FiletypeRegisterer { string mainExe = Assembly.GetEntryAssembly().Location; string[,] FileTypes = GetFileTypes(); - string resPath = System.IO.Path.Combine(PropertyService.DataDirectory, "resources") + Path.DirectorySeparatorChar + "filetypes" + Path.DirectorySeparatorChar; + string resPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "filetypes") + Path.DirectorySeparatorChar; foreach(string type in singleTypes) { for(int i = 0; i < FileTypes.GetLength(0); ++i) { if(FileTypes[i, 1] == type) { @@ -91,6 +81,27 @@ namespace ICSharpCode.FiletypeRegisterer { } } + public static void RegisterUnknownFiletypes() + { + string mainExe = Assembly.GetEntryAssembly().Location; + string[,] FileTypes = GetFileTypes(); + string resPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "filetypes") + Path.DirectorySeparatorChar; + for(int i = 0; i < FileTypes.GetLength(0); ++i) { + if (!IsRegisteredFileType(FileTypes[i, 1])) { + RegisterFiletype(FileTypes[i, 1], FileTypes[i, 0], '"' + Path.GetFullPath(mainExe) + '"' + " \"%1\"", Path.GetFullPath(resPath + FileTypes[i, 2])); + } + } + } + + public static bool IsRegisteredFileType(string extension) + { + RegistryKey key = Registry.ClassesRoot.OpenSubKey("." + extension); + if (key == null) + return false; + key.Close(); + return true; + } + public static void RegisterFiletype(string extension, string description, string command, string icon) { try { @@ -100,7 +111,7 @@ namespace ICSharpCode.FiletypeRegisterer { // save previous association string prev = (string)extKey.GetValue("", ""); if (prev != "" && prev != ("SD." + extension + "file")) { - extKey.SetValue("PreSD", extKey.GetValue("")); + extKey.SetValue("PreSD", extKey.GetValue("")); } extKey.SetValue("", "SD." + extension + "file"); extKey.Close(); @@ -136,7 +147,7 @@ namespace ICSharpCode.FiletypeRegisterer { // restore previous association string prev = (string)extKey.GetValue("PreSD", ""); if(prev != "") { - extKey.SetValue("", prev); + extKey.SetValue("", prev); } extKey.Close(); diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs index c742c29ccf..495e27dee2 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs @@ -15,8 +15,10 @@ using System.Collections; using ICSharpCode.SharpDevelop.Internal.ExternalTool; using ICSharpCode.Core; using ICSharpCode.FiletypeRegisterer; +using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.Gui.OptionPanels; -namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +namespace ICSharpCode.FiletypeRegisterer { class RegisterFiletypesPanel : AbstractOptionPanel { @@ -24,10 +26,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels Label capLbl = new Label(); CheckBox regChk = new CheckBox(); - - - - Hashtable wasChecked = new Hashtable(); public RegisterFiletypesPanel() @@ -36,7 +34,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels InitializeComponent(); // Set previous values - SelectFiletypes(PropertyService.Get(RegisterFiletypesCommand.uiFiletypesProperty, "cmbx|prjx")); + SelectFiletypes(PropertyService.Get(RegisterFiletypesCommand.uiFiletypesProperty, RegisterFiletypesCommand.DefaultExtensions)); regChk.Checked = PropertyService.Get(RegisterFiletypesCommand.uiRegisterStartupProperty, true); } diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cmbx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cmbx.ico deleted file mode 100644 index 1b5063739f..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cmbx.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cs.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cs.ico deleted file mode 100644 index 2389e7bd2f..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/cs.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/java.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/java.ico deleted file mode 100644 index 3873181b3c..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/java.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/prjx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/prjx.ico deleted file mode 100644 index 7b3b17293f..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/prjx.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/resx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/resx.ico deleted file mode 100644 index 1bc198b033..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/resx.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/vb.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/vb.ico deleted file mode 100644 index b95d71ebc2..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/vb.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xfrm.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xfrm.ico deleted file mode 100644 index 340f9f7a7d..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xfrm.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xml.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xml.ico deleted file mode 100644 index e5d84f07d1..0000000000 Binary files a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/xml.ico and /dev/null differ diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/Filetypes.xml b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/Filetypes.xml similarity index 57% rename from src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/Filetypes.xml rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/Filetypes.xml index 6f6f6464ce..188a7d912a 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/filetypes/Filetypes.xml +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/Filetypes.xml @@ -1,7 +1,10 @@ - SharpDevelop Combine - SharpDevelop Project + SharpDevelop 1.x Combine + SharpDevelop 1.x Project + SharpDevelop Solution + SharpDevelop C# Project + SharpDevelop VB Project C# Source File VB.NET Source File Java Source File @@ -9,4 +12,4 @@ .NET Resource File .NET Resource File (Binary) XML Document - \ No newline at end of file + diff --git a/data/resources/filetypes/cmbx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/cmbx.ico similarity index 100% rename from data/resources/filetypes/cmbx.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/cmbx.ico diff --git a/data/resources/filetypes/cs.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/cs.ico similarity index 100% rename from data/resources/filetypes/cs.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/cs.ico diff --git a/data/resources/filetypes/java.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/java.ico similarity index 100% rename from data/resources/filetypes/java.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/java.ico diff --git a/data/resources/filetypes/prjx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/prjx.ico similarity index 100% rename from data/resources/filetypes/prjx.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/prjx.ico diff --git a/data/resources/filetypes/resx.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/resx.ico similarity index 100% rename from data/resources/filetypes/resx.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/resx.ico diff --git a/data/resources/filetypes/vb.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/vb.ico similarity index 100% rename from data/resources/filetypes/vb.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/vb.ico diff --git a/data/resources/filetypes/xfrm.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/xfrm.ico similarity index 100% rename from data/resources/filetypes/xfrm.ico rename to src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/xfrm.ico diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/xml.ico b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/xml.ico new file mode 100644 index 0000000000..7fab3e1e37 Binary files /dev/null and b/src/AddIns/Misc/FiletypeRegisterer/Project/filetypes/xml.ico differ diff --git a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/GlobalReferenceExpression.cs b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/GlobalReferenceExpression.cs index a5f25bc62e..94cedb8a92 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/GlobalReferenceExpression.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/GlobalReferenceExpression.cs @@ -1,7 +1,7 @@ // // 2002-2005 AlphaSierraPapa // GNU General Public License -// +// // $Revision$ // @@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.Parser.AST public override string ToString() { - return String.Format("[ThisReferenceExpression]"); + return String.Format("[GlobalReferenceExpression]"); } } } diff --git a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs index f14f55e972..4012ca74de 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs @@ -21,8 +21,8 @@ namespace ICSharpCode.NRefactory.Parser.AST int[] rankSpecifier = null; List genericTypes = new List(1); - static Hashtable types = new Hashtable(); - static Hashtable vbtypes = new Hashtable(); + static Dictionary types = new Dictionary(); + static Dictionary vbtypes = new Dictionary(); static TypeReference() { @@ -47,6 +47,7 @@ namespace ICSharpCode.NRefactory.Parser.AST // VB.NET types vbtypes.Add("boolean", "System.Boolean"); vbtypes.Add("byte", "System.Byte"); + vbtypes.Add("sbyte", "System.SByte"); vbtypes.Add("date", "System.DateTime"); vbtypes.Add("char", "System.Char"); vbtypes.Add("decimal", "System.Decimal"); @@ -54,19 +55,22 @@ namespace ICSharpCode.NRefactory.Parser.AST vbtypes.Add("single", "System.Single"); vbtypes.Add("integer", "System.Int32"); vbtypes.Add("long", "System.Int64"); + vbtypes.Add("uinteger","System.UInt32"); + vbtypes.Add("ulong", "System.UInt64"); vbtypes.Add("object", "System.Object"); vbtypes.Add("short", "System.Int16"); + vbtypes.Add("ushort", "System.UInt16"); vbtypes.Add("string", "System.String"); } - public static ICollection GetPrimitiveTypes() + public static IEnumerable> GetPrimitiveTypesCSharp() { - return types.Keys; + return types; } - public static ICollection GetPrimitiveTypesVB() + public static IEnumerable> GetPrimitiveTypesVB() { - return vbtypes.Keys; + return vbtypes; } public string Type { @@ -134,12 +138,12 @@ namespace ICSharpCode.NRefactory.Parser.AST string GetSystemType(string type) { - if (types.Contains(type)) { - return (string)types[type]; + if (types.ContainsKey(type)) { + return types[type]; } string lowerType = type.ToLower(); - if (vbtypes.Contains(lowerType)) { - return (string)vbtypes[lowerType]; + if (vbtypes.ContainsKey(lowerType)) { + return vbtypes[lowerType]; } return type; } diff --git a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj index 57adab4816..619e622935 100644 --- a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj +++ b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj @@ -126,6 +126,7 @@ + diff --git a/src/Libraries/NRefactory/Test/Parser/Expressions/GlobalReferenceExpressionTests.cs b/src/Libraries/NRefactory/Test/Parser/Expressions/GlobalReferenceExpressionTests.cs new file mode 100644 index 0000000000..3a49ea3700 --- /dev/null +++ b/src/Libraries/NRefactory/Test/Parser/Expressions/GlobalReferenceExpressionTests.cs @@ -0,0 +1,37 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using System.IO; +using NUnit.Framework; +using ICSharpCode.NRefactory.Parser; +using ICSharpCode.NRefactory.Parser.AST; + +namespace ICSharpCode.NRefactory.Tests.AST +{ + [TestFixture] + public class GlobalReferenceExpressionTests + { + #region C# + [Test] + public void CSharpGlobalReferenceExpressionTest() + { + FieldReferenceExpression fre = (FieldReferenceExpression)ParseUtilCSharp.ParseExpression("global::System", typeof(FieldReferenceExpression)); + Assert.IsTrue(fre.TargetObject is GlobalReferenceExpression); + } + #endregion + + #region VB.NET + [Test] + public void VBNetGlobalReferenceExpressionTest() + { + FieldReferenceExpression fre = (FieldReferenceExpression)ParseUtilVBNet.ParseExpression("Global.System", typeof(FieldReferenceExpression)); + Assert.IsTrue(fre.TargetObject is GlobalReferenceExpression); + } + #endregion + } +} diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs index 0e61a9294b..31f3bdaaa8 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs @@ -214,7 +214,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver attributeName = GetAttributeName(ie.TargetObject); c = GetAttribute(attributeName); if (c != null) { - ArrayList ctors = new ArrayList(); + List ctors = new List(); foreach (IMethod m in c.Methods) { if (m.IsConstructor && !m.IsStatic) ctors.Add(m); @@ -296,7 +296,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver return null; } if (expr is ObjectCreateExpression) { - ArrayList constructors = new ArrayList(); + List constructors = new List(); foreach (IMethod m in type.GetMethods()) { if (m.IsConstructor && !m.IsStatic) constructors.Add(m); @@ -319,7 +319,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver IClass c; IMember member; if (type is TypeVisitor.NamespaceReturnType) { - string combinedName = type.FullyQualifiedName + "." + fieldReferenceExpression.FieldName; + string combinedName; + if (type.FullyQualifiedName == "") + combinedName = fieldReferenceExpression.FieldName; + else + combinedName = type.FullyQualifiedName + "." + fieldReferenceExpression.FieldName; if (projectContent.NamespaceExists(combinedName)) { return new NamespaceResolveResult(callingClass, callingMember, combinedName); } @@ -331,8 +335,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver // go through the members of the modules foreach (object o in projectContent.GetNamespaceContents(type.FullyQualifiedName)) { member = o as IMember; - if (member != null && IsSameName(member.Name, fieldReferenceExpression.FieldName)) + if (member != null && IsSameName(member.Name, fieldReferenceExpression.FieldName)) { return CreateMemberResolveResult(member); + } } } return null; @@ -429,12 +434,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver #region Resolve Identifier ResolveResult ResolveIdentifier(string identifier) { - string name = SearchNamespace(identifier); - if (name != null && name != "") { - return new NamespaceResolveResult(callingClass, callingMember, name); - } - ResolveResult result = ResolveIdentifierInternal(identifier); + if (result is TypeResolveResult) + return result; + ResolveResult result2 = null; IClass c = SearchType(identifier); @@ -489,12 +492,37 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver // try if there exists a static member in outer classes named typeName List classes = cu.GetOuterClasses(caretLine, caretColumn); - foreach (IClass c2 in classes) { - IMember member = GetMember(c2.DefaultReturnType, identifier); + foreach (IClass c in classes) { + IMember member = GetMember(c.DefaultReturnType, identifier); if (member != null && member.IsStatic) { return new MemberResolveResult(callingClass, callingMember, member); } } + + string namespaceName = SearchNamespace(identifier); + if (namespaceName != null && namespaceName.Length > 0) { + return new NamespaceResolveResult(callingClass, callingMember, namespaceName); + } + + if (languageProperties.ImportModules) { + ArrayList list = new ArrayList(); + AddImportedNamespaceContents(list); + foreach (object o in list) { + IClass c = o as IClass; + if (c != null && IsSameName(identifier, c.Name)) { + return new TypeResolveResult(callingClass, callingMember, c); + } + IMember member = o as IMember; + if (member != null && IsSameName(identifier, member.Name)) { + if (member is IMethod) { + return new MethodResolveResult(callingClass, callingMember, member.DeclaringType.DefaultReturnType, member.Name); + } else { + return CreateMemberResolveResult(member); + } + } + } + } + return null; } #endregion @@ -622,12 +650,31 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver #region Helper for TypeVisitor #region SearchMethod + + public List SearchMethod(string memberName) + { + List methods = SearchMethod(callingClass.DefaultReturnType, memberName); + if (methods.Count > 0) + return methods; + if (languageProperties.ImportModules) { + ArrayList list = new ArrayList(); + AddImportedNamespaceContents(list); + foreach (object o in list) { + IMethod m = o as IMethod; + if (m != null && IsSameName(m.Name, memberName)) { + methods.Add(m); + } + } + } + return methods; + } + /// /// Gets the list of methods on the return type that have the specified name. /// - public ArrayList SearchMethod(IReturnType type, string memberName) + public List SearchMethod(IReturnType type, string memberName) { - ArrayList methods = new ArrayList(); + List methods = new List(); if (type == null) return methods; @@ -642,16 +689,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver methods.Add(m); } } -// if (methods.Count == 0) { -// foreach (IEvent m in type.GetEvents()) { -// if (IsSameName(m.Name, memberName) -// && m.IsAccessible(callingClass, isClassInInheritanceTree) -// ) { -// methods.Add(m); -// break; -// } -// } -// } return methods; } #endregion @@ -783,16 +820,36 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver #endregion #endregion + IClass GetPrimitiveClass(string systemType, string newName) + { + IClass c = ProjectContentRegistry.Mscorlib.GetClass(systemType); + DefaultClass c2 = new DefaultClass(c.CompilationUnit, newName); + c2.ClassType = c.ClassType; + c2.Modifiers = c.Modifiers; + c2.Documentation = c.Documentation; + c2.BaseTypes.AddRange(c.BaseTypes); + c2.Methods.AddRange(c.Methods); + c2.Fields.AddRange(c.Fields); + c2.Properties.AddRange(c.Properties); + c2.Indexer.AddRange(c.Indexer); + c2.Events.AddRange(c.Events); + return c2; + } + public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent) { - ArrayList result; + ArrayList result = new ArrayList(); if (language == SupportedLanguages.VBNet) { - result = new ArrayList(); - foreach (string primitive in TypeReference.GetPrimitiveTypesVB()) { - result.Add(Char.ToUpper(primitive[0]) + primitive.Substring(1)); + foreach (KeyValuePair pair in TypeReference.GetPrimitiveTypesVB()) { + string primitive = Char.ToUpper(pair.Key[0]) + pair.Key.Substring(1); + if ("System." + primitive != pair.Value) { + result.Add(GetPrimitiveClass(pair.Value, primitive)); + } } } else { - result = new ArrayList(TypeReference.GetPrimitiveTypes()); + foreach (KeyValuePair pair in TypeReference.GetPrimitiveTypesCSharp()) { + result.Add(GetPrimitiveClass(pair.Value, pair.Key)); + } } ParseInformation parseInfo = ParserService.GetParseInformation(fileName); if (parseInfo == null) { @@ -827,9 +884,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver result.Add(new DefaultField(p.ReturnType, p.Name, ModifierEnum.None, method.Region, callingClass)); } } - if (callingClass != null) { - result.AddRange(projectContent.GetNamespaceContents(callingClass.Namespace)); - } bool inStatic = true; if (callingMember != null) @@ -840,7 +894,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver result.AddRange(callingClass.GetAccessibleMembers(callingClass, false)); } result.AddRange(callingClass.GetAccessibleMembers(callingClass, true)); - result.AddRange(callingClass.GetAccessibleTypes(callingClass)); } foreach (KeyValuePair> pair in lookupTableVisitor.Variables) { if (pair.Value != null && pair.Value.Count > 0) { @@ -853,21 +906,42 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver } } } + AddImportedNamespaceContents(result); + return result; + } + + void AddImportedNamespaceContents(ArrayList result) + { + if (callingClass != null) { + result.AddRange(callingClass.GetAccessibleTypes(callingClass)); + result.AddRange(projectContent.GetNamespaceContents(callingClass.Namespace)); + } projectContent.AddNamespaceContents(result, "", languageProperties, true); foreach (IUsing u in cu.Usings) { - if (u != null) { - foreach (string name in u.Usings) { - foreach (object o in projectContent.GetNamespaceContents(name)) { - if (!(o is string)) - result.Add(o); - } - } - foreach (string alias in u.Aliases.Keys) { - result.Add(alias); + AddUsing(result, u); + } + AddUsing(result, projectContent.DefaultImports); + } + + void AddUsing(ArrayList result, IUsing u) + { + if (u == null) { + return; + } + bool importNamespaces = languageProperties.ImportNamespaces; + foreach (string name in u.Usings) { + if (importNamespaces) { + projectContent.AddNamespaceContents(result, name, languageProperties, true); + } else { + foreach (object o in projectContent.GetNamespaceContents(name)) { + if (!(o is string)) + result.Add(o); } } } - return result; + foreach (string alias in u.Aliases.Keys) { + result.Add(alias); + } } } } diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs index cd0970ef4c..81952bc200 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs @@ -88,7 +88,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver return null; } - public IMethod FindOverload(ArrayList methods, ArrayList arguments, object data) + public IMethod FindOverload(List methods, ArrayList arguments, object data) { if (methods.Count <= 0) { return null; @@ -101,7 +101,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver types[i] = ((Expression)arguments[i]).AcceptVisitor(this, data) as IReturnType; } bool tmp; - return (IMethod)methods[FindOverload(methods, types, true, out tmp)]; + List methodList = methods.ConvertAll(delegate (IMethod m) { return m; }); + return (IMethod)methods[FindOverload(methodList, types, true, out tmp)]; } /// @@ -115,18 +116,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver /// Returns true when the overload returned is /// the only overload that had the highest score or false when there were /// multiple overloads with an equal score. - public static int FindOverload(ArrayList methods, IReturnType[] types, bool forceParameterCount, out bool singleBestOverload) + public static int FindOverload(List methods, IReturnType[] types, bool forceParameterCount, out bool singleBestOverload) { singleBestOverload = true; if (methods.Count == 1) return 0; - IMethodOrIndexer bestMethod = (IMethodOrIndexer)methods[0]; + IMethodOrIndexer bestMethod = methods[0]; int bestIndex = 0; int bestScore = ScoreOverload(bestMethod, types, forceParameterCount); for (int i = 1; i < methods.Count; ++i) { - IMethodOrIndexer method = (IMethodOrIndexer)methods[i]; + IMethodOrIndexer method = methods[i]; int score = ScoreOverload(method, types, forceParameterCount); if (score > bestScore) { bestScore = score; @@ -185,7 +186,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver if (invocationExpression.TargetObject is FieldReferenceExpression) { FieldReferenceExpression field = (FieldReferenceExpression)invocationExpression.TargetObject; IReturnType type = field.TargetObject.AcceptVisitor(this, data) as IReturnType; - ArrayList methods = resolver.SearchMethod(type, field.FieldName); + List methods = resolver.SearchMethod(type, field.FieldName); InjectMethodTypeParameters(methods, invocationExpression); return FindOverload(methods, invocationExpression.Parameters, data); } else if (invocationExpression.TargetObject is IdentifierExpression) { @@ -193,14 +194,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver if (resolver.CallingClass == null) { return null; } - ArrayList methods = resolver.SearchMethod(resolver.CallingClass.DefaultReturnType, id); + List methods = resolver.SearchMethod(id); InjectMethodTypeParameters(methods, invocationExpression); return FindOverload(methods, invocationExpression.Parameters, data); } return null; } - void InjectMethodTypeParameters(ArrayList methods, InvocationExpression invocationExpression) + void InjectMethodTypeParameters(List methods, InvocationExpression invocationExpression) { if (invocationExpression.TypeParameters == null) return; if (invocationExpression.TypeParameters.Count == 0) return; @@ -234,10 +235,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver } IReturnType returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(this, data) as IReturnType; if (returnType != null) { - NamespaceReturnType namespaceRT = returnType as NamespaceReturnType; - if (namespaceRT != null) { - string name = namespaceRT.FullyQualifiedName; - string combinedName = name + "." + fieldReferenceExpression.FieldName; + if (returnType is NamespaceReturnType) { + string name = returnType.FullyQualifiedName; + string combinedName; + if (name.Length == 0) + combinedName = fieldReferenceExpression.FieldName; + else + combinedName = name + "." + fieldReferenceExpression.FieldName; if (resolver.ProjectContent.NamespaceExists(combinedName)) { return new NamespaceReturnType(combinedName); } @@ -412,6 +416,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver return baseClass.DefaultReturnType; } + public override object Visit(GlobalReferenceExpression globalReferenceExpression, object data) + { + return new NamespaceReturnType(""); + } + public override object Visit(ObjectCreateExpression objectCreateExpression, object data) { return CreateReturnType(objectCreateExpression.CreateType); diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs index c096d1f05f..3c909ee74e 100644 --- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs +++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs @@ -51,6 +51,16 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding public class SchemeExtensionErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { return new SchemeExtensionDescriptor(codon); diff --git a/src/Main/Base/Project/Src/Internal/Erbauer/DialogPanelErbauer.cs b/src/Main/Base/Project/Src/Internal/Erbauer/DialogPanelErbauer.cs index 2afe83c646..5132127991 100644 --- a/src/Main/Base/Project/Src/Internal/Erbauer/DialogPanelErbauer.cs +++ b/src/Main/Base/Project/Src/Internal/Erbauer/DialogPanelErbauer.cs @@ -13,6 +13,16 @@ namespace ICSharpCode.Core { public class DialogPanelErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + /// /// Creates an item with the specified sub items. And the current /// Condition status for this item. @@ -21,7 +31,7 @@ namespace ICSharpCode.Core { string label = codon.Properties["label"]; - if (subItems == null || subItems.Count == 0) { + if (subItems == null || subItems.Count == 0) { if (codon.Properties.Contains("class")) { return new DefaultDialogPanelDescriptor(codon.Id, StringParser.Parse(label), (IDialogPanel)codon.AddIn.CreateObject(codon.Properties["class"])); } else { diff --git a/src/Main/Base/Project/Src/Internal/Erbauer/PadErbauer.cs b/src/Main/Base/Project/Src/Internal/Erbauer/PadErbauer.cs index 30a3567218..ddee6c4c35 100644 --- a/src/Main/Base/Project/Src/Internal/Erbauer/PadErbauer.cs +++ b/src/Main/Base/Project/Src/Internal/Erbauer/PadErbauer.cs @@ -14,6 +14,16 @@ namespace ICSharpCode.Core { public class PadErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { return new PadDescriptor(codon); diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingErbauer.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingErbauer.cs index 58cf7ed9c6..8897cbb076 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingErbauer.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingErbauer.cs @@ -15,6 +15,16 @@ namespace ICSharpCode.Core { public class DisplayBindingErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + /// /// Creates an item with the specified sub items. And the current /// Condition status for this item. diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingErbauer.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingErbauer.cs index 93d0533ed7..24aba58b0e 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingErbauer.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingErbauer.cs @@ -16,6 +16,16 @@ namespace ICSharpCode.Core { public class LanguageBindingErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + /// /// Creates an item with the specified sub items. And the current /// Condition status for this item. diff --git a/src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs index 99ef98115f..269c52bf33 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs @@ -36,12 +36,15 @@ namespace ICSharpCode.Core List> classLists = new List>(); List> namespaces = new List>(); protected XmlDoc xmlDoc = new XmlDoc(); - List defaultImports = new List(); + IUsing defaultImports; - public List DefaultImports { + public IUsing DefaultImports { get { return defaultImports; } + set { + defaultImports = value; + } } public List> ClassLists { @@ -502,8 +505,8 @@ namespace ICSharpCode.Core } } } - foreach (IUsing u in defaultImports) { - string nameSpace = u.SearchNamespace(name); + if (defaultImports != null) { + string nameSpace = defaultImports.SearchNamespace(name); if (nameSpace != null) { return nameSpace; } @@ -589,8 +592,8 @@ namespace ICSharpCode.Core } } } - foreach (IUsing u in defaultImports) { - c = u.SearchType(name); + if (defaultImports != null) { + c = defaultImports.SearchType(name); if (c != null) { return c; } diff --git a/src/Main/Base/Project/Src/Services/ParserService/Erbauer/ParserErbauer.cs b/src/Main/Base/Project/Src/Services/ParserService/Erbauer/ParserErbauer.cs index 16b2561f52..2ab7914451 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/Erbauer/ParserErbauer.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/Erbauer/ParserErbauer.cs @@ -16,6 +16,16 @@ namespace ICSharpCode.Core { public class ParserErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + /// /// Creates an item with the specified sub items. And the current /// Condition status for this item. diff --git a/src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs index cc01d50217..0e17e3e082 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs @@ -48,6 +48,13 @@ namespace ICSharpCode.Core get; } + /// + /// Gets the default imports of the project content. Can return null. + /// + IUsing DefaultImports { + get; + } + string GetXmlDocumentation(string memberTag); void AddClassToNamespaceList(IClass addClass); diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs index 77756141ce..eed946f3f0 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs @@ -104,15 +104,13 @@ namespace ICSharpCode.Core void UpdateDefaultImports(ProjectItem[] items) { - DefaultImports.Clear(); - DefaultUsing u = null; + DefaultImports = null; foreach (ProjectItem item in items) { if (item.ItemType == ItemType.Import) { - if (u == null) { - u = new DefaultUsing(this); - DefaultImports.Add(u); + if (DefaultImports == null) { + DefaultImports = new DefaultUsing(this); } - u.Usings.Add(item.Include); + DefaultImports.Usings.Add(item.Include); } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Codons/EditActionErbauer.cs b/src/Main/Base/Project/Src/TextEditor/Codons/EditActionErbauer.cs index 9e4324b5fc..18f2a94c66 100644 --- a/src/Main/Base/Project/Src/TextEditor/Codons/EditActionErbauer.cs +++ b/src/Main/Base/Project/Src/TextEditor/Codons/EditActionErbauer.cs @@ -20,6 +20,16 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Codons // [CodonNameAttribute("EditAction")] public class EditActionErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { IEditAction editAction = (IEditAction)codon.AddIn.CreateObject(codon.Properties["class"]); diff --git a/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeErbauer.cs b/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeErbauer.cs index 1167d82ae3..d05343ce62 100644 --- a/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeErbauer.cs +++ b/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeErbauer.cs @@ -45,6 +45,16 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Codons // [CodonNameAttribute("SyntaxMode")] public class SyntaxModeErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { string highlightingName = codon.Properties["name"]; diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/Codon.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/Codon.cs index 8e44e4dc09..8b38b15f41 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/Codon.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/Codon.cs @@ -120,16 +120,24 @@ namespace ICSharpCode.Core public object BuildItem(object owner, ArrayList subItems) { try { - return AddInTree.Erbauer[Name].BuildItem(owner, this, subItems); + IErbauer erbauer = AddInTree.Erbauer[Name]; + if (!erbauer.HandleConditions && conditions.Length > 0) { + ConditionFailedAction action = GetFailedAction(owner); + if (action != ConditionFailedAction.Nothing) { + return null; + } + } + return erbauer.BuildItem(owner, this, subItems); } catch (KeyNotFoundException) { throw new CoreException("Erbauer " + Name + " not found!"); } } - public override string ToString() { + + public override string ToString() + { return String.Format("[Codon: name = {0}, addIn={1}]", name, addIn.FileName); } - } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/IErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/IErbauer.cs index 8a4c50beb5..756f87723c 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/IErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/IErbauer.cs @@ -10,11 +10,14 @@ using System.Collections; namespace ICSharpCode.Core { - /// - /// Description of Erbauer. - /// public interface IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + bool HandleConditions { get; } + object BuildItem(object caller, Codon codon, ArrayList subItems); } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ClassErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ClassErbauer.cs index 2b27e729a7..5f26b00cc9 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ClassErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ClassErbauer.cs @@ -15,6 +15,16 @@ namespace ICSharpCode.Core /// public class ClassErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { return codon.AddIn.CreateObject(codon.Properties["class"]); diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/FileFilterErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/FileFilterErbauer.cs index 0bdddc675e..350d396ad3 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/FileFilterErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/FileFilterErbauer.cs @@ -15,6 +15,16 @@ namespace ICSharpCode.Core /// public class FileFilterErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { return StringParser.Parse(codon.Properties["name"]) + "|" + codon.Properties["extensions"]; diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/Icon/IconErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/Icon/IconErbauer.cs index 5488555e29..cf02cecdf0 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/Icon/IconErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/Icon/IconErbauer.cs @@ -14,6 +14,16 @@ namespace ICSharpCode.Core { public class IconErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { return new IconDescriptor(codon); diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/IncludeErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/IncludeErbauer.cs index ce6512bc25..fd91edd01d 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/IncludeErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/IncludeErbauer.cs @@ -15,6 +15,16 @@ namespace ICSharpCode.Core /// public class IncludeErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { string item = codon.Properties["item"]; diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/LazyLoaderErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/LazyLoaderErbauer.cs index 45c3c1b18e..7fc27da3ba 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/LazyLoaderErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/LazyLoaderErbauer.cs @@ -39,6 +39,16 @@ namespace ICSharpCode.Core } + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return false; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { IErbauer erbauer = (IErbauer)addIn.CreateObject(className); @@ -46,7 +56,7 @@ namespace ICSharpCode.Core return erbauer.BuildItem(caller, codon, subItems); } - public override string ToString() + public override string ToString() { return String.Format("[LazyLoadErbauer: className = {0}, name = {1}]", className, diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/MenuItemErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/MenuItemErbauer.cs index b780f0cefa..a808fad7e8 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/MenuItemErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/MenuItemErbauer.cs @@ -16,6 +16,16 @@ namespace ICSharpCode.Core /// public class MenuItemErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return true; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command"; diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ToolBarItem/ToolBarItemErbauer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ToolBarItem/ToolBarItemErbauer.cs index fc7602fd59..d50e839930 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ToolBarItem/ToolBarItemErbauer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/ToolBarItem/ToolBarItemErbauer.cs @@ -16,6 +16,16 @@ namespace ICSharpCode.Core /// public class ToolbarItemErbauer : IErbauer { + /// + /// Gets if the erbauer handles codon conditions on its own. + /// If this property return false, the item is excluded when the condition is not met. + /// + public bool HandleConditions { + get { + return true; + } + } + public object BuildItem(object caller, Codon codon, ArrayList subItems) { string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Item";