diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
index 47ffeea755..68efb1bf1f 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
@@ -8,6 +8,7 @@
+
@@ -321,4 +322,11 @@
+
+
+
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
index 7d56122673..413773e546 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
@@ -54,6 +54,7 @@
+
@@ -77,6 +78,11 @@
+
+
+
+
+
@@ -197,6 +203,11 @@
ICSharpCode.SharpDevelop.Widgets
False
+
+ {9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}
+ FormsDesigner
+ False
+
@@ -206,5 +217,8 @@
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/ExtensionMethods.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/ExtensionMethods.cs
index 03a478223e..c43732370f 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/ExtensionMethods.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/ExtensionMethods.cs
@@ -3,6 +3,9 @@
using System;
using System.Threading.Tasks;
+using ICSharpCode.Core;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
using CSharpBinding.Parser;
using CSharpBinding.Refactoring;
using ICSharpCode.NRefactory.CSharp;
@@ -51,5 +54,23 @@ namespace CSharpBinding
return new CSharpAstResolver(compilation, new SyntaxTree(), new CSharpUnresolvedFile { FileName = ec.FileName });
});
}
+
+ ///
+ /// Retrieves the declaration for the specified entity.
+ /// Returns null if the entity is not defined in C# source code.
+ ///
+ public static EntityDeclaration GetDeclaration(this IEntity entity, out CSharpFullParseInformation parseInfo)
+ {
+ if (entity == null || string.IsNullOrEmpty(entity.Region.FileName)) {
+ parseInfo = null;
+ return null;
+ }
+ parseInfo = SD.ParserService.Parse(FileName.Create(entity.Region.FileName),
+ parentProject: entity.ParentAssembly.GetProject())
+ as CSharpFullParseInformation;
+ if (parseInfo == null)
+ return null;
+ return parseInfo.SyntaxTree.GetNodeAt(entity.Region.Begin);
+ }
}
}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs
new file mode 100644
index 0000000000..5f660efec4
--- /dev/null
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs
@@ -0,0 +1,139 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using ICSharpCode.Core;
+using ICSharpCode.FormsDesigner;
+using ICSharpCode.NRefactory.CSharp;
+using ICSharpCode.NRefactory.CSharp.Resolver;
+using ICSharpCode.NRefactory.Editor;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
+using Microsoft.CSharp;
+using CSharpBinding.Parser;
+
+namespace CSharpBinding.FormsDesigner
+{
+ public class CSharpDesignerLoader : AbstractCodeDomDesignerLoader
+ {
+ readonly CodeDomProvider codeDomProvider = new CSharpCodeProvider();
+ readonly ICSharpDesignerLoaderContext context;
+
+ public CSharpDesignerLoader(ICSharpDesignerLoaderContext context)
+ {
+ this.context = context;
+ }
+
+ protected override void Write(CodeCompileUnit unit)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override CodeDomProvider CodeDomProvider {
+ get {
+ return codeDomProvider;
+ }
+ }
+
+ ITextSourceVersion lastTextContentVersion;
+
+ protected override bool IsReloadNeeded()
+ {
+ return base.IsReloadNeeded() || context.DesignerCodeFileDocument.Version.Equals(lastTextContentVersion);
+ }
+
+ IUnresolvedTypeDefinition primaryPart;
+
+ // Steps to load the designer:
+ // - Parse main file
+ // - Find other files containing parts of the form
+ // - Parse all files and look for fields (for controls) and InitializeComponents method
+ // - Create CodeDom objects for fields and InitializeComponents statements
+ // - If debug build and Ctrl pressed, output CodeDom to console
+ // - Return CodeDom objects to the .NET designer
+ protected override CodeCompileUnit Parse()
+ {
+ SD.Log.Debug("CSharpDesignerLoader.Parse()");
+
+ lastTextContentVersion = context.DesignerCodeFileDocument.Version;
+ var primaryParseInfo = context.GetPrimaryFileParseInformation();
+ var compilation = context.GetCompilation();
+
+ // Find designer class
+ ITypeDefinition designerClass = null;
+ IMethod initializeComponents = null;
+ foreach (var utd in primaryParseInfo.UnresolvedFile.TopLevelTypeDefinitions) {
+ var td = utd.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)).GetDefinition();
+ if (td != null && FormsDesignerSecondaryDisplayBinding.IsDesignable(td)) {
+ primaryPart = utd;
+ designerClass = td;
+ initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(td);
+ break;
+ }
+ }
+
+ if (initializeComponents == null) {
+ throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded.");
+ }
+ Debug.Assert(primaryPart != null);
+ Debug.Assert(designerClass != null);
+
+ bool isFirstClassInFile = primaryParseInfo.UnresolvedFile.TopLevelTypeDefinitions[0] == primaryPart;
+
+ // TODO: translate
+ const string missingReferenceMessage = "Your project is missing a reference to '${Name}' - please add it using 'Project > Add Reference'.";
+ if (compilation.FindType(typeof(System.Drawing.Point)).Kind == TypeKind.Unknown) {
+ throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name", "System.Drawing")));
+ }
+ if (compilation.FindType(typeof(System.Windows.Forms.Form)).Kind == TypeKind.Unknown) {
+ throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name" , "System.Windows.Forms")));
+ }
+
+ CodeDomConvertVisitor cv = new CodeDomConvertVisitor();
+ cv.UseFullyQualifiedTypeNames = true;
+
+ CSharpFullParseInformation designerParseInfo;
+ MethodDeclaration initializeComponentsDeclaration = initializeComponents.GetDeclaration(out designerParseInfo) as MethodDeclaration;
+ if (initializeComponentsDeclaration == null)
+ throw new FormsDesignerLoadException("Could not find source code for InitializeComponents");
+ var resolver = designerParseInfo.GetResolver(compilation);
+ var codeMethod = (CodeMemberMethod) cv.Convert(initializeComponentsDeclaration, resolver);
+ var codeClass = new CodeTypeDeclaration(designerClass.Name);
+ codeClass.Attributes = MemberAttributes.Public;
+ codeClass.BaseTypes.AddRange(designerClass.DirectBaseTypes.Select(cv.Convert).ToArray());
+ codeClass.Members.Add(codeMethod);
+
+ foreach (var field in designerClass.Fields) {
+ var codeField = new CodeMemberField(cv.Convert(field.Type), field.Name);
+ codeClass.Members.Add(codeField);
+ }
+ var codeNamespace = new CodeNamespace(designerClass.Namespace);
+ codeNamespace.Types.Add(codeClass);
+ var codeUnit = new CodeCompileUnit();
+ codeUnit.Namespaces.Add(codeNamespace);
+
+ // output generated CodeDOM to the console :
+ #if DEBUG
+ if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
+ CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
+ outputGenerator.GenerateCodeFromMember(codeMethod, Console.Out, null);
+ this.CodeDomProvider.GenerateCodeFromCompileUnit(codeUnit, Console.Out, null);
+ }
+ #endif
+
+ LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished");
+
+ if (!isFirstClassInFile) {
+ MessageService.ShowWarning("The form must be the first class in the file in order for form resources be compiled correctly.\n" +
+ "Please move other classes below the form class definition or move them to other files.");
+ }
+
+ return codeUnit;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoaderProvider.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoaderProvider.cs
new file mode 100644
index 0000000000..f270565d44
--- /dev/null
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoaderProvider.cs
@@ -0,0 +1,47 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.Design.Serialization;
+using System.Linq;
+using ICSharpCode.FormsDesigner;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
+using ICSharpCode.SharpDevelop.Workbench;
+using CSharpBinding.Parser;
+
+namespace CSharpBinding.FormsDesigner
+{
+ public class CSharpDesignerLoaderProvider : IDesignerLoaderProvider
+ {
+ public DesignerLoader CreateLoader(FormsDesignerViewContent viewContent)
+ {
+ return new CSharpDesignerLoader(new CSharpFormsDesignerLoaderContext(viewContent));
+ }
+
+ public IReadOnlyList GetSourceFiles(FormsDesignerViewContent viewContent, out OpenedFile designerCodeFile)
+ {
+ // get new initialize components
+ var parsedFile = SD.ParserService.ParseFile(viewContent.PrimaryFileName, viewContent.PrimaryFileContent);
+ var compilation = SD.ParserService.GetCompilationForFile(viewContent.PrimaryFileName);
+ foreach (var utd in parsedFile.TopLevelTypeDefinitions) {
+ var td = utd.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)).GetDefinition();
+ if (FormsDesignerSecondaryDisplayBinding.IsDesignable(td)) {
+ var initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(td);
+ if (initializeComponents != null) {
+ string designerFileName = initializeComponents.Region.FileName;
+ if (designerFileName != null) {
+ designerCodeFile = SD.FileService.GetOrCreateOpenedFile(designerFileName);
+ return td.Parts
+ .Select(p => SD.FileService.GetOrCreateOpenedFile(p.UnresolvedFile.FileName))
+ .Distinct().ToList();
+ }
+ }
+ }
+ }
+
+ throw new FormsDesignerLoadException("Could not find InitializeComponent method in any part of the open class.");
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpFormsDesignerLoaderContext.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpFormsDesignerLoaderContext.cs
new file mode 100644
index 0000000000..f09f4c56c9
--- /dev/null
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpFormsDesignerLoaderContext.cs
@@ -0,0 +1,47 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.FormsDesigner;
+using ICSharpCode.NRefactory.Editor;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
+using CSharpBinding.Parser;
+
+namespace CSharpBinding.FormsDesigner
+{
+ class CSharpFormsDesignerLoaderContext : ICSharpDesignerLoaderContext
+ {
+ readonly FormsDesignerViewContent viewContent;
+
+ public CSharpFormsDesignerLoaderContext(FormsDesignerViewContent viewContent)
+ {
+ this.viewContent = viewContent;
+ }
+
+ public IDocument PrimaryFileDocument {
+ get {
+ return viewContent.PrimaryFileDocument;
+ }
+ }
+
+ public IDocument DesignerCodeFileDocument {
+ get {
+ return viewContent.DesignerCodeFileDocument;
+ }
+ }
+
+ public CSharpFullParseInformation GetPrimaryFileParseInformation()
+ {
+ return SD.ParserService.Parse(viewContent.PrimaryFileName, viewContent.PrimaryFileDocument)
+ as CSharpFullParseInformation;
+ }
+
+ public ICompilation GetCompilation()
+ {
+ return SD.ParserService.GetCompilationForFile(viewContent.PrimaryFileName);
+ }
+ }
+}
+
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/ICSharpDesignerLoaderContext.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/ICSharpDesignerLoaderContext.cs
new file mode 100644
index 0000000000..e92fd99d44
--- /dev/null
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/ICSharpDesignerLoaderContext.cs
@@ -0,0 +1,21 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.NRefactory.Editor;
+using ICSharpCode.NRefactory.TypeSystem;
+using CSharpBinding.Parser;
+
+namespace CSharpBinding.FormsDesigner
+{
+ ///
+ /// Description of ICSharpDesignerLoaderContext.
+ ///
+ public interface ICSharpDesignerLoaderContext
+ {
+ //IDocument PrimaryFileDocument { get; }
+ IDocument DesignerCodeFileDocument { get; }
+ CSharpFullParseInformation GetPrimaryFileParseInformation();
+ ICompilation GetCompilation();
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/SecondaryDisplayBinding.cs
similarity index 53%
rename from src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs
rename to src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/SecondaryDisplayBinding.cs
index 9503dac922..423cd1fdee 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/SecondaryDisplayBinding.cs
@@ -2,19 +2,15 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
-using System.IO;
using System.Linq;
using ICSharpCode.Core;
-using ICSharpCode.NRefactory;
+using ICSharpCode.FormsDesigner;
using ICSharpCode.NRefactory.TypeSystem;
-using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
-using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Workbench;
-namespace ICSharpCode.FormsDesigner
+namespace CSharpBinding.FormsDesigner
{
public class FormsDesignerSecondaryDisplayBinding : ISecondaryDisplayBinding
{
@@ -59,17 +55,19 @@ namespace ICSharpCode.FormsDesigner
return false;
}
+ public static bool IsDesignable(ITypeDefinition td)
+ {
+ return GetInitializeComponents(td) != null && BaseClassIsFormOrControl(td);
+ }
+
public static bool IsDesignable(IUnresolvedFile parsedFile, ICompilation compilation)
{
if (parsedFile == null)
return false;
foreach (var utd in parsedFile.TopLevelTypeDefinitions) {
var td = utd.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)).GetDefinition();
- if (td != null) {
- IMethod method = GetInitializeComponents(td);
- if (method != null) {
- return BaseClassIsFormOrControl(td);
- }
+ if (IsDesignable(td)) {
+ return true;
}
}
return false;
@@ -77,58 +75,27 @@ namespace ICSharpCode.FormsDesigner
public bool CanAttachTo(IViewContent viewContent)
{
- if (viewContent is ITextEditorProvider) {
- FileName fileName = viewContent.PrimaryFileName;
- if (fileName == null)
- return false;
-
- ITextEditor textEditor = viewContent.GetService();
- string fileExtension = Path.GetExtension(fileName).ToLowerInvariant();
-
- switch (fileExtension) {
- case ".cs":
-// case ".vb":
- var parsedFile = SD.ParserService.ParseFile(fileName, textEditor.Document);
- var compilation = SD.ParserService.GetCompilationForFile(fileName);
- if (IsDesignable(parsedFile, compilation))
- return true;
- break;
- }
- }
- return false;
+ ITextEditor textEditor = viewContent.GetService();
+ if (textEditor == null)
+ return false;
+ FileName fileName = viewContent.PrimaryFileName;
+ if (fileName == null)
+ return false;
+
+ var parsedFile = SD.ParserService.ParseFile(fileName, textEditor.Document);
+ var compilation = SD.ParserService.GetCompilationForFile(fileName);
+ return IsDesignable(parsedFile, compilation);
}
public IViewContent[] CreateSecondaryViewContent(IViewContent viewContent)
{
- return new IViewContent[0];
- /*
if (viewContent.SecondaryViewContents.Any(c => c is FormsDesignerViewContent)) {
return new IViewContent[0];
}
- string fileExtension = String.Empty;
- string fileName = viewContent.PrimaryFileName;
-
- fileExtension = Path.GetExtension(fileName).ToLowerInvariant();
-
- IDesignerLoaderProvider loader;
- IDesignerGenerator generator;
-
- switch (fileExtension) {
- case ".cs":
-// loader = new NRefactoryDesignerLoaderProvider(SupportedLanguage.CSharp);
-// generator = new CSharpDesignerGenerator();
- throw new NotImplementedException();
- break;
- case ".vb":
- //loader = new NRefactoryDesignerLoaderProvider(SupportedLanguage.VBNet);
- //generator = new VBNetDesignerGenerator();
- throw new NotImplementedException();
- break;
- default:
- throw new ApplicationException("Cannot create content for " + fileExtension);
- }
- return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) }; */
+ return new IViewContent[] {
+ new FormsDesignerViewContent(viewContent, new CSharpDesignerLoaderProvider())
+ };
}
}
}
diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerLoaderProvider.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerLoaderProvider.cs
index f47a85a2ae..bf65f22795 100644
--- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerLoaderProvider.cs
+++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerLoaderProvider.cs
@@ -17,8 +17,9 @@ namespace ICSharpCode.WixBinding
return new WixDialogDesignerLoader((IWixDialogDesigner)viewContent);
}
- public IReadOnlyList GetSourceFiles(FormsDesignerViewContent viewContent)
+ public IReadOnlyList GetSourceFiles(FormsDesignerViewContent viewContent, out OpenedFile designerCodeFile)
{
+ designerCodeFile = viewContent.PrimaryFile;
return new[] { viewContent.PrimaryFile };
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.addin b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.addin
index 06608bef24..f8cc5ba5a5 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.addin
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.addin
@@ -13,13 +13,6 @@
-
-
-
-
+
@@ -96,7 +97,6 @@
LocalizationModelOptionsPanel.xaml
Code
-
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/AbstractCodeDomDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/AbstractCodeDomDesignerLoader.cs
index cd8d657318..1968aef182 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/AbstractCodeDomDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/AbstractCodeDomDesignerLoader.cs
@@ -14,7 +14,6 @@ using ICSharpCode.FormsDesigner.Services;
namespace ICSharpCode.FormsDesigner
{
- /*
///
/// An abstract base class for CodeDOM designer loaders.
///
@@ -23,7 +22,6 @@ namespace ICSharpCode.FormsDesigner
bool loading;
IDesignerLoaderHost designerLoaderHost = null;
ITypeResolutionService typeResolutionService = null;
- readonly IDesignerGenerator generator;
public override bool Loading {
get { return base.Loading || loading; }
@@ -37,22 +35,6 @@ namespace ICSharpCode.FormsDesigner
get { return this.designerLoaderHost; }
}
- protected override CodeDomProvider CodeDomProvider {
- get { return this.generator.CodeDomProvider; }
- }
-
- protected IDesignerGenerator Generator {
- get { return this.generator; }
- }
-
- protected AbstractCodeDomDesignerLoader(IDesignerGenerator generator)
- {
- if (generator == null) {
- throw new ArgumentNullException("generator", "Generator cannot be null");
- }
- this.generator = generator;
- }
-
public override void Dispose()
{
try {
@@ -173,5 +155,4 @@ namespace ICSharpCode.FormsDesigner
MessageService.ShowError(sb.ToString());
}
}
- */
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/CodeDOMVerboseOutputGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/CodeDOMVerboseOutputGenerator.cs
new file mode 100644
index 0000000000..c93baffc12
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/CodeDOMVerboseOutputGenerator.cs
@@ -0,0 +1,356 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using System.IO;
+using System.Security.Permissions;
+
+namespace ICSharpCode.FormsDesigner
+{
+ [PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
+ [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
+ public class CodeDomVerboseOutputGenerator : System.CodeDom.Compiler.CodeGenerator
+ {
+ #region System.CodeDom.Compiler.CodeGenerator abstract class implementation
+ protected override string NullToken {
+ get {
+ return "[NULL]";
+ }
+ }
+
+ protected override void OutputType(CodeTypeReference typeRef)
+ {
+ Output.Write("[CodeTypeReference: {0}", typeRef.BaseType);
+ if (typeRef.ArrayRank > 0) {
+ Output.Write(" Rank:" + typeRef.ArrayRank);
+ }
+ Output.Write("]");
+ }
+
+ protected override void GenerateArrayCreateExpression(CodeArrayCreateExpression e)
+ {
+ Output.Write("[CodeArrayCreateExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateBaseReferenceExpression(CodeBaseReferenceExpression e)
+ {
+ Output.Write("[CodeBaseReferenceExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateCastExpression(CodeCastExpression e)
+ {
+ Output.Write("[CodeCastExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateDelegateCreateExpression(CodeDelegateCreateExpression e)
+ {
+ Output.Write("[CodeDelegateCreateExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateFieldReferenceExpression(CodeFieldReferenceExpression e)
+ {
+ Output.Write("[CodeFieldReferenceExpression: Name={0}, Target=", e.FieldName);
+ this.GenerateExpression(e.TargetObject);
+ Output.Write("]");
+ }
+
+ protected override void GenerateMethodReferenceExpression(CodeMethodReferenceExpression e)
+ {
+ Output.Write("[CodeMethodReferenceExpression: Name={0}, Target=", e.MethodName);
+ this.GenerateExpression(e.TargetObject);
+ Output.Write("]");
+ }
+
+ protected override void GenerateEventReferenceExpression(CodeEventReferenceExpression e)
+ {
+ Output.Write("[CodeEventReferenceExpression: Name={0}, Target=", e.EventName);
+ this.GenerateExpression(e.TargetObject);
+ Output.Write("]");
+ }
+
+ protected override void GenerateArgumentReferenceExpression(CodeArgumentReferenceExpression e)
+ {
+ Output.Write("[CodeArgumentReferenceExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateVariableReferenceExpression(CodeVariableReferenceExpression e)
+ {
+ Output.Write("[CodeVariableReferenceExpression: Name={0}]", e.VariableName);
+ }
+
+ protected override void GenerateIndexerExpression(CodeIndexerExpression e)
+ {
+ Output.Write("[CodeIndexerExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateArrayIndexerExpression(CodeArrayIndexerExpression e)
+ {
+ Output.Write("[CodeArrayIndexerExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateSnippetExpression(CodeSnippetExpression e)
+ {
+ Output.Write("[CodeSnippetExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression e)
+ {
+ Output.Write("[CodeMethodInvokeExpression: Method=");
+ GenerateMethodReferenceExpression(e.Method);
+ Output.Write(", Parameters=");
+ bool first = true;
+ foreach (CodeExpression expr in e.Parameters) {
+ if (first) first = false; else Output.Write(", ");
+ this.GenerateExpression(expr);
+ }
+ Output.Write("]");
+ }
+
+ protected override void GenerateDelegateInvokeExpression(CodeDelegateInvokeExpression e)
+ {
+ Output.Write("[CodeDelegateInvokeExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateObjectCreateExpression(CodeObjectCreateExpression e)
+ {
+ Output.Write("[CodeObjectCreateExpression: Type={0}, Parameters=", e.CreateType.BaseType);
+ bool first = true;
+ foreach (CodeExpression expr in e.Parameters) {
+ if (first) first = false; else Output.Write(", ");
+ this.GenerateExpression(expr);
+ }
+ Output.Write("]");
+ }
+
+ protected override void GeneratePropertyReferenceExpression(CodePropertyReferenceExpression e)
+ {
+ Output.Write("[CodePropertyReferenceExpression: Name={0}, Target=", e.PropertyName);
+ this.GenerateExpression(e.TargetObject);
+ Output.Write("]");
+ }
+
+ protected override void GeneratePropertySetValueReferenceExpression(CodePropertySetValueReferenceExpression e)
+ {
+ Output.Write("[CodePropertySetValueReferenceExpression: {0}]", e.ToString());
+ }
+
+ protected override void GenerateThisReferenceExpression(CodeThisReferenceExpression e)
+ {
+ Output.Write("[CodeThisReferenceExpression]");
+ }
+
+ protected override void GenerateExpressionStatement(CodeExpressionStatement e)
+ {
+ Output.Write("[CodeExpressionStatement:");
+ base.GenerateExpression(e.Expression);
+ Output.WriteLine("]");
+ }
+
+ protected override void GenerateIterationStatement(CodeIterationStatement e)
+ {
+ Output.WriteLine("[CodeIterationStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateThrowExceptionStatement(CodeThrowExceptionStatement e)
+ {
+ Output.WriteLine("[CodeThrowExceptionStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateComment(CodeComment e)
+ {
+ Output.WriteLine("[CodeComment: {0}]", e.ToString());
+ }
+
+ protected override void GenerateMethodReturnStatement(CodeMethodReturnStatement e)
+ {
+ Output.WriteLine("[CodeMethodReturnStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateConditionStatement(CodeConditionStatement e)
+ {
+ Output.WriteLine("[GenerateConditionStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateTryCatchFinallyStatement(CodeTryCatchFinallyStatement e)
+ {
+ Output.WriteLine("[CodeTryCatchFinallyStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateAssignStatement(CodeAssignStatement e)
+ {
+ Output.Write("[CodeAssignStatement: Left=");
+ base.GenerateExpression(e.Left);
+ Output.Write(", Right=");
+ base.GenerateExpression(e.Right);
+ Output.WriteLine("]");
+ }
+
+ protected override void GenerateAttachEventStatement(CodeAttachEventStatement e)
+ {
+ Output.WriteLine("[CodeAttachEventStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateRemoveEventStatement(CodeRemoveEventStatement e)
+ {
+ Output.WriteLine("[CodeRemoveEventStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateGotoStatement(CodeGotoStatement e)
+ {
+ Output.WriteLine("[CodeGotoStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateLabeledStatement(CodeLabeledStatement e)
+ {
+ Output.WriteLine("[CodeLabeledStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateVariableDeclarationStatement(CodeVariableDeclarationStatement e)
+ {
+ Output.WriteLine("[CodeVariableDeclarationStatement: {0}]", e.ToString());
+ }
+
+ protected override void GenerateLinePragmaStart(CodeLinePragma e)
+ {
+ Output.WriteLine("[CodeLinePragma: {0}]", e.ToString());
+ }
+
+ protected override void GenerateLinePragmaEnd(CodeLinePragma e)
+ {
+ Output.WriteLine("[CodeLinePragma: {0}]", e.ToString());
+ }
+
+ protected override void GenerateEvent(CodeMemberEvent e, CodeTypeDeclaration c)
+ {
+ Output.WriteLine("[CodeMemberEvent: {0}]", e.ToString());
+ }
+
+ protected override void GenerateField(CodeMemberField e)
+ {
+ Output.Write("[CodeMemberField: Name={0}, Type=", e.Name);
+ Output.Write(e.Type.BaseType);
+ Output.WriteLine("]");
+ }
+
+ protected override void GenerateSnippetMember(CodeSnippetTypeMember e)
+ {
+ Output.WriteLine("[CodeSnippetTypeMember: {0}]", e.ToString());
+ }
+
+ protected override void GenerateEntryPointMethod(CodeEntryPointMethod e, CodeTypeDeclaration c)
+ {
+ Output.WriteLine("[CodeEntryPointMethod: {0}]", e.ToString());
+ }
+
+ public void PublicGenerateCodeFromStatement(CodeStatement e, TextWriter w, CodeGeneratorOptions o)
+ {
+ ((ICodeGenerator)this).GenerateCodeFromStatement(e, w, o);
+ }
+
+ protected override void GenerateMethod(CodeMemberMethod e, CodeTypeDeclaration c)
+ {
+ Output.WriteLine("[CodeMemberMethod: Name={0}, Parameterns={1}]", e.Name, e.Parameters.Count);
+ ++Indent;
+ GenerateStatements(e.Statements);
+ --Indent;
+ }
+
+ protected override void GenerateProperty(CodeMemberProperty e, CodeTypeDeclaration c)
+ {
+ Output.WriteLine("[CodeMemberProperty : {0}]", e.ToString());
+ }
+
+ protected override void GenerateConstructor(CodeConstructor e, CodeTypeDeclaration c)
+ {
+ Output.WriteLine("[CodeConstructor : {0}]", e.ToString());
+ ++Indent;
+ GenerateStatements(e.Statements);
+ --Indent;
+ }
+
+ protected override void GenerateTypeConstructor(CodeTypeConstructor e)
+ {
+ Output.WriteLine("[CodeTypeConstructor : {0}]", e.ToString());
+ }
+
+ protected override void GenerateTypeStart(CodeTypeDeclaration e)
+ {
+ Output.WriteLine("[CodeTypeDeclaration : {0}]", e.ToString());
+ }
+
+ protected override void GenerateTypeEnd(CodeTypeDeclaration e)
+ {
+ Output.WriteLine("[CodeTypeDeclaration: {0}]", e.ToString());
+ }
+
+ protected override void GenerateNamespaceStart(CodeNamespace e)
+ {
+ Output.WriteLine("[CodeNamespaceStart: {0}]", e.ToString());
+ }
+
+ protected override void GenerateNamespaceEnd(CodeNamespace e)
+ {
+ Output.WriteLine("[CodeNamespaceEnd: {0}]", e.ToString());
+ }
+
+ protected override void GenerateNamespaceImport(CodeNamespaceImport e)
+ {
+ Output.WriteLine("[CodeNamespaceImport: {0}]", e.ToString());
+ }
+
+ protected override void GenerateAttributeDeclarationsStart(CodeAttributeDeclarationCollection attributes)
+ {
+ Output.WriteLine("[CodeAttributeDeclarationCollection: {0}]", attributes.ToString());
+ }
+
+ protected override void GenerateAttributeDeclarationsEnd(CodeAttributeDeclarationCollection attributes)
+ {
+ Output.WriteLine("[CodeAttributeDeclarationCollection: {0}]", attributes.ToString());
+ }
+
+ protected override void GeneratePrimitiveExpression(CodePrimitiveExpression e)
+ {
+ if (e.Value == null) {
+ Output.WriteLine("[CodePrimitiveExpression: null]");
+ } else {
+ Output.Write("[CodePrimitiveExpression: ");
+ base.GeneratePrimitiveExpression(e);
+ Output.WriteLine(" (" + e.Value.GetType().Name + ")]");
+ }
+ }
+
+ protected override bool Supports(GeneratorSupport support)
+ {
+ return true;
+ }
+
+ protected override bool IsValidIdentifier(string value)
+ {
+ return true;
+ }
+
+ protected override string CreateEscapedIdentifier(string value)
+ {
+ return value;
+ }
+
+ protected override string CreateValidIdentifier(string value)
+ {
+ return value;
+ }
+
+ protected override string GetTypeOutput(CodeTypeReference value)
+ {
+ return value.ToString();
+ }
+
+ protected override string QuoteSnippetString(string value)
+ {
+ return "\"" + value + "\"";
+ }
+
+ #endregion
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs
index 153c8dcf2a..2b6b30ae83 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs
@@ -15,23 +15,9 @@ namespace ICSharpCode.FormsDesigner
///
/// Gets the source files involved when designing.
- /// The first file in the resulting list is the main code file.
///
- IReadOnlyList GetSourceFiles(FormsDesignerViewContent viewContent);
+ ///
+ /// The file that contains the InitializeComponents() implementation
+ IReadOnlyList GetSourceFiles(FormsDesignerViewContent viewContent, out OpenedFile designerCodeFile);
}
- /*
- public class NRefactoryDesignerLoaderProvider : IDesignerLoaderProvider
- {
- readonly SupportedLanguage language;
-
- public NRefactoryDesignerLoaderProvider(SupportedLanguage language)
- {
- this.language = language;
- }
-
- public DesignerLoader CreateLoader(IDesignerGenerator generator)
- {
- return new NRefactoryDesignerLoader(language, generator);
- }
- }*/
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
index 4b3959fbf4..6e0959b695 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
@@ -189,9 +189,9 @@ namespace ICSharpCode.FormsDesigner
this.sourceCodeStorage.LoadFile(file, stream);
LoggingService.Debug("Forms designer: Determining designer source files for " + file.FileName);
- IReadOnlyList sourceFiles = loaderProvider.GetSourceFiles(this);
- OpenedFile newDesignerCodeFile = sourceFiles.FirstOrDefault();
- if (newDesignerCodeFile == null) {
+ OpenedFile newDesignerCodeFile;
+ IReadOnlyList sourceFiles = loaderProvider.GetSourceFiles(this, out newDesignerCodeFile);
+ if (sourceFiles == null || newDesignerCodeFile == null) {
throw new FormsDesignerLoadException("The designer source files could not be determined.");
}
diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin
index 9c0ed41d86..60b527d591 100644
--- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin
+++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin
@@ -211,6 +211,6 @@
-
+
diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Services/TypeResolutionService.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Services/TypeResolutionService.cs
index b2b5a898bb..6fe7cec9ec 100644
--- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Services/TypeResolutionService.cs
+++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Services/TypeResolutionService.cs
@@ -4,15 +4,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
-using System.Diagnostics;
-using System.IO;
using System.Reflection;
using ICSharpCode.Core;
-using ICSharpCode.SharpDevelop;
-using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.SharpDevelop.Project;
-using Microsoft.Win32;
namespace ICSharpCode.Reports.Addin
{
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
index c4b72e8967..096a2679b7 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
@@ -144,7 +144,7 @@ namespace ICSharpCode.NRefactory.CSharp
return result.ToArray();
}
- CodeTypeReference Convert(IType type)
+ public CodeTypeReference Convert(IType type)
{
if (type.Kind == TypeKind.Array) {
ArrayType a = (ArrayType)type;
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs
index 12efe662ba..2c615bf028 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs
@@ -656,6 +656,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
yield return attr;
}
}
+ yield break;
}
IMember member = entity as IMember;
if (member != null) {
@@ -671,6 +672,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
yield return attr;
}
} while (member.IsOverride && (member = InheritanceHelper.GetBaseMember(member)) != null);
+ yield break;
}
throw new NotSupportedException("Unknown entity type");
}
diff --git a/src/Main/Base/Project/Designer/TypeResolutionService.cs b/src/Main/Base/Project/Designer/TypeResolutionService.cs
index 72c07477fb..dbc74d6a32 100644
--- a/src/Main/Base/Project/Designer/TypeResolutionService.cs
+++ b/src/Main/Base/Project/Designer/TypeResolutionService.cs
@@ -3,17 +3,14 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.Design;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Windows.Documents;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Gui.XmlForms;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Win32;