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";