Browse Source

Fix loading of ViewContent on project opening.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2370 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Russell Wilkins 19 years ago
parent
commit
9b55eb70da
  1. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
  2. 50
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs
  3. 10
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs
  4. 28
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs
  5. 3
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs
  6. 5
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/CSharpWorkflowDesignerEventBindingService.cs
  7. 92
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
  8. 5
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj

2
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs

@ -43,6 +43,8 @@ namespace WorkflowDesigner @@ -43,6 +43,8 @@ namespace WorkflowDesigner
InitializeComponent();
this.viewContent = viewContent;
WorkflowSideTabService.AddViewContent(this.viewContent);
}

50
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs

@ -13,8 +13,8 @@ using ICSharpCode.NRefactory.Visitors; @@ -13,8 +13,8 @@ using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor;
using ICSharpCode.FormsDesigner;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using System;
using System.CodeDom;
@ -52,7 +52,7 @@ namespace WorkflowDesigner @@ -52,7 +52,7 @@ namespace WorkflowDesigner
{
TextEditorControl textEditorControl;
ITypeResolutionService typeResolutionService;
IDesignerGenerator generator = new CSharpDesignerGenerator();
//IDesignerGenerator generator = new CSharpDesignerGenerator();
IViewContent viewContent;
#region Constructors
@ -63,15 +63,16 @@ namespace WorkflowDesigner @@ -63,15 +63,16 @@ namespace WorkflowDesigner
}
#endregion
CodeDomProvider codeDomProvider = Microsoft.CSharp.CSharpCodeProvider.CreateProvider("CSharp");
protected override CodeDomProvider CodeDomProvider {
get {
return generator.CodeDomProvider;
return codeDomProvider;
}
}
protected override ITypeResolutionService TypeResolutionService {
get {
return this.typeResolutionService;
return typeResolutionService;
}
}
@ -82,37 +83,24 @@ namespace WorkflowDesigner @@ -82,37 +83,24 @@ namespace WorkflowDesigner
throw new NotImplementedException();
}
public override void BeginLoad(IDesignerLoaderHost host)
protected override void Initialize()
{
if (host == null)
throw new ArgumentNullException("host");
LoggingService.Debug("NRefactoryDesignerLoader.BeginLoad()");
host.AddService(typeof(ITypeResolutionService), new ICSharpCode.FormsDesigner.Services.TypeResolutionService(viewContent.PrimaryFileName));
host.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService());
host.AddService(typeof(IMemberCreationService), new MemberCreationService());
//host.AddService(typeof(IEventBindingService), new EventBindingService(host));
host.AddService(typeof(IToolboxService), new WorkflowToolboxService(host));
host.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
host.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(host));
TypeProvider tp = new TypeProvider(host);
host.AddService(typeof(ITypeProvider), tp);
// HACK: Load all assemblies in the #D - should only be references for the current project!
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
tp.AddAssembly(assembly);
}
typeResolutionService = (ITypeResolutionService)host.GetService(typeof(ITypeResolutionService));
base.BeginLoad(host);
LoaderHost.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService());
LoaderHost.AddService(typeof(IMemberCreationService), new MemberCreationService());
LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost, viewContent.PrimaryFileName));
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService(LoaderHost));
LoaderHost.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost));
LoaderHost.AddService(typeof(ITypeProvider), TypeProviderService.GetTypeProvider(ProjectService.CurrentProject));
typeResolutionService = new TypeResolutionService(LoaderHost);
LoaderHost.AddService(typeof(ITypeResolutionService), typeResolutionService);
base.Initialize();
}
#region Taken from FormDesigner.NRefactoryDesignerLoad to get a CodeCompileUnit for the activity.
string lastTextContent;
protected override CodeCompileUnit Parse()
@ -254,7 +242,7 @@ namespace WorkflowDesigner @@ -254,7 +242,7 @@ namespace WorkflowDesigner
/// <summary>
/// Fix type names and remove unused methods.
/// </summary>
void FixTypeNames(object o, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu, ref bool foundInitMethod)
public static void FixTypeNames(object o, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu, ref bool foundInitMethod)
{
if (domCu == null)
return;
@ -312,7 +300,7 @@ namespace WorkflowDesigner @@ -312,7 +300,7 @@ namespace WorkflowDesigner
}
}
void FixTypeReference(TypeReference type, Location location, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu)
public static void FixTypeReference(TypeReference type, Location location, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu)
{
if (type == null)
return;

10
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs

@ -64,6 +64,12 @@ namespace WorkflowDesigner @@ -64,6 +64,12 @@ namespace WorkflowDesigner
}
}
public IProject Project {
get {
return ProjectService.OpenSolution.FindProjectContainingFile(fileName);
}
}
public override TextReader GetFileReader(string filePath)
{
return new StringReader(rules.ToString());
@ -81,7 +87,7 @@ namespace WorkflowDesigner @@ -81,7 +87,7 @@ namespace WorkflowDesigner
private void CreateRulesProjectItem()
{
IProject project = ProjectService.CurrentProject;
IProject project = ProjectService.OpenSolution.FindProjectContainingFile(this.fileName);
if (project != null){
if (!project.IsFileInProject(rulesFileName)) {
FileProjectItem fpi = project.FindFile(fileName);
@ -125,7 +131,7 @@ namespace WorkflowDesigner @@ -125,7 +131,7 @@ namespace WorkflowDesigner
base.Initialize();
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService(LoaderHost));
LoaderHost.AddService(typeof(ITypeProvider), TypeProviderService.GetTypeProvider(ProjectService.CurrentProject));
LoaderHost.AddService(typeof(ITypeProvider), TypeProviderService.GetTypeProvider(Project));
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost));
LoaderHost.AddService(typeof(ITypeResolutionService), new TypeResolutionService(LoaderHost));

28
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs

@ -30,7 +30,6 @@ namespace WorkflowDesigner @@ -30,7 +30,6 @@ namespace WorkflowDesigner
primaryFile.ForceInitializeView(this); // call Load()
WorkflowSideTabService.AddViewContent(this);
}
public override System.Windows.Forms.Control Control {
@ -46,23 +45,14 @@ namespace WorkflowDesigner @@ -46,23 +45,14 @@ namespace WorkflowDesigner
XomlDesignerLoader loader = null;
// First look for a code separation file.
// FIXME: The loader does nont know the project this belongs
// to as ProjectService.CurrentProject is not set at this point
// so look for all possible language files.
LoggingService.DebugFormatted("Looking for code separation file");
StringBuilder sb = new StringBuilder(file.FileName);
bool found = false;
if (File.Exists(file.FileName + ".cs")) {
sb.Append(".cs");
found = true;
} else if (File.Exists(file.FileName + ".vb")) {
sb.Append(".vb");
found = true;
}
if (found) {
string codeFileName = sb.ToString();
LoggingService.DebugFormatted("Found code file {0}", codeFileName);
loader = new XomlCodeSeparationDesignerLoader(this, file.FileName, stream, codeFileName);
IProject project = ProjectService.OpenSolution.FindProjectContainingFile(file.FileName);
if (project != null) {
FileProjectItem fpi = project.FindFile(file.FileName);
string codeFileName = file.FileName + "." + project.LanguageProperties.CodeDomProvider.FileExtension;
FileProjectItem dfpi = project.FindFile(codeFileName);
if (dfpi.DependentUpon == Path.GetFileName(fpi.VirtualName)) {
loader = new XomlCodeSeparationDesignerLoader(this, file.FileName, stream, dfpi.FileName);
}
}
// No separation file so the nocode loader will be used.
@ -85,7 +75,7 @@ namespace WorkflowDesigner @@ -85,7 +75,7 @@ namespace WorkflowDesigner
xomlDesignerLoader.Xoml = content;
control.LoadWorkflow(xomlDesignerLoader);
}
#region IHasPropertyContainer
public PropertyContainer PropertyContainer {
get {

3
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs

@ -31,9 +31,6 @@ namespace WorkflowDesigner @@ -31,9 +31,6 @@ namespace WorkflowDesigner
this.viewContent = primaryViewContent;
control = new ViewContentControl(primaryViewContent);
// HACK to ensure SideBarPad exists! - Normally handled by FormsDesigner
//PadDescriptor pad = WorkbenchSingleton.Workbench.GetPad(typeof(SideBarView));
//.pad.CreatePad();
}
#endregion

5
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/CSharpWorkflowDesignerEventBindingService.cs

@ -55,11 +55,6 @@ namespace WorkflowDesigner @@ -55,11 +55,6 @@ namespace WorkflowDesigner
b.AppendLine(indentation);
b.AppendLine(indentation + "void " + eventMethodName + "(" + param + ")");
b.AppendLine(indentation + "{");
if (string.IsNullOrEmpty(body)) {
if (ICSharpCode.FormsDesigner.Gui.OptionPanels.GeneralOptionsPanel.InsertTodoComment) {
body = "// TODO: Implement " + eventMethodName;
}
}
b.AppendLine(indentation + "\t" + body);
b.AppendLine(indentation + "}");
return b.ToString();

92
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
@ -40,7 +41,7 @@ namespace WorkflowDesigner @@ -40,7 +41,7 @@ namespace WorkflowDesigner
public abstract class WorkflowDesignerEventBindingService : IWorkflowDesignerEventBindingService, IServiceProvider
{
string codeFileName;
CodeCompileUnit ccu;
CodeCompileUnit ccu;
public WorkflowDesignerEventBindingService(IServiceProvider provider, string codeSeparationFileName)
{
@ -56,16 +57,13 @@ namespace WorkflowDesigner @@ -56,16 +57,13 @@ namespace WorkflowDesigner
TypeProvider typeProvider = (TypeProvider)this.GetService(typeof(ITypeProvider));
if (ccu != null)
if (ccu != null)
typeProvider.RemoveCodeCompileUnit(ccu);
ccu = Parse();
if (ccu != null)
if (ccu != null)
typeProvider.AddCodeCompileUnit(ccu);
}
public string CodeFileName {
@ -81,21 +79,84 @@ namespace WorkflowDesigner @@ -81,21 +79,84 @@ namespace WorkflowDesigner
CodeCompileUnit Parse()
{
ParseInformation parseInfo = ParserService.GetParseInformation(codeFileName);
IClass formClass = null;
bool isFirstClassInFile;
IList<IClass> parts = FindFormClassParts(parseInfo, out formClass, out isFirstClassInFile);
// Get all the related compilation units.
List<KeyValuePair<string, CompilationUnit>> compilationUnits = new List<KeyValuePair<string, CompilationUnit>>();
foreach (IClass part in parts) {
string fileName = part.CompilationUnit.FileName;
if (fileName == null) continue;
bool found = false;
foreach (KeyValuePair<string, CompilationUnit> entry in compilationUnits) {
if (FileUtility.IsEqualFileName(fileName, entry.Key)) {
found = true;
break;
}
}
if (found) continue;
string fileContent = ParserService.GetParseableFileContent(fileName);
ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(fileContent));
parser.Parse();
if (parser.Errors.Count > 0) {
throw new WorkflowDesignerLoadException("Syntax errors in " + fileName + ":\r\n" + parser.Errors.ErrorOutput);
}
compilationUnits.Add(new KeyValuePair<string, CompilationUnit>(fileName, parser.CompilationUnit));
}
string fileContent = ParserService.GetParseableFileContent(codeFileName);
ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(fileContent));
parser.Parse();
if (parser.Errors.Count > 0) {
throw new Exception("Syntax errors in " + codeFileName + ":\r\n" + parser.Errors.ErrorOutput);
if (compilationUnits.Count == 1)
{
CodeDomVisitor visitor1 = new CodeDomVisitor();
visitor1.VisitCompilationUnit(compilationUnits[0].Value, null);
return visitor1.codeCompileUnit;
}
return null;
//string fileContent = ParserService.GetParseableFileContent(codeFileName);
// ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(fileContent));
// parser.Parse();
// if (parser.Errors.Count > 0) {
// throw new Exception("Syntax errors in " + codeFileName + ":\r\n" + parser.Errors.ErrorOutput);
// }
//
// CodeDomVisitor visitor = new CodeDomVisitor();
// visitor.VisitCompilationUnit(parser.CompilationUnit, null);
// return visitor.codeCompileUnit;
}
public static IList<IClass> FindFormClassParts(ParseInformation parseInfo, out IClass formClass, out bool isFirstClassInFile)
{
CodeDomVisitor visitor = new CodeDomVisitor();
visitor.VisitCompilationUnit(parser.CompilationUnit, null);
formClass = null;
isFirstClassInFile = true;
foreach (IClass c in parseInfo.BestCompilationUnit.Classes) {
if (WorkflowDesignerSecondaryDisplayBinding.BaseClassIsWorkflow(c)) {
formClass = c;
break;
}
isFirstClassInFile = false;
}
if (formClass == null)
throw new WorkflowDesignerLoadException("No class derived from Form or UserControl was found.");
return visitor.codeCompileUnit;
// Initialize designer for formClass
formClass = formClass.GetCompoundClass();
if (formClass is CompoundClass) {
return (formClass as CompoundClass).GetParts();
} else {
return new IClass[] { formClass };
}
}
#region IServiceProvider implementation
IServiceProvider provider;
public object GetService(Type serviceType)
@ -104,7 +165,6 @@ namespace WorkflowDesigner @@ -104,7 +165,6 @@ namespace WorkflowDesigner
}
#endregion
#region IEventBindingService implemention
public string CreateUniqueMethodName(IComponent component, EventDescriptor e)
{

5
src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj

@ -146,11 +146,6 @@ @@ -146,11 +146,6 @@
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Src\Gui" />
<Folder Include="Src\Loaders" />
<Folder Include="Src\Commands" />

Loading…
Cancel
Save