Browse Source

The boo CodeDomVisitor now supports local variables (needed for resource manager).

Fixed SD2-523: Opening a new solution should close previously opened files

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@730 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
6181a779b1
  1. 15
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs
  2. 58
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs
  3. 1
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
  4. 2
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  5. 1
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  6. 11
      src/Main/Core/Project/Src/Services/MenuService/MenuService.cs

15
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs

@ -97,12 +97,22 @@ namespace Grunwald.BooBinding.Designer @@ -97,12 +97,22 @@ namespace Grunwald.BooBinding.Designer
protected override CodeCompileUnit Parse()
{
LoggingService.Debug("BooDesignerLoader.Parse()");
try {
CodeCompileUnit ccu = ParseForm();
LoggingService.Debug("BooDesignerLoader.Parse() finished");
return ccu;
} catch (Boo.Lang.Compiler.CompilerError ex) {
throw new FormDesignerLoadException(ex.ToString(true));
}
}
CodeCompileUnit ParseForm()
{
lastTextContent = TextContent;
BooParsingStep step = new BooParsingStep();
StringBuilder errors = new StringBuilder();
Module module = BooParser.ParseModule(4, new CompileUnit(), "BooDesignerLoaderModule",
Module module = BooParser.ParseModule(4, new CompileUnit(), textEditorControl.FileName,
new StringReader(lastTextContent),
delegate(antlr.RecognitionException e) {
errors.AppendLine(e.ToString());
@ -130,7 +140,6 @@ namespace Grunwald.BooBinding.Designer @@ -130,7 +140,6 @@ namespace Grunwald.BooBinding.Designer
outputGenerator.GenerateCodeFromMember(visitor.OutputCompileUnit.Namespaces[0].Types[0], Console.Out, null);
provider.GenerateCodeFromCompileUnit(visitor.OutputCompileUnit, Console.Out, null);
LoggingService.Debug("BooDesignerLoader.Parse() finished");
return visitor.OutputCompileUnit;
}

58
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs

@ -15,6 +15,7 @@ using Boo.Lang.Compiler.Ast.Visitors; @@ -15,6 +15,7 @@ using Boo.Lang.Compiler.Ast.Visitors;
using Boo.Lang.Parser;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using Grunwald.BooBinding.CodeCompletion;
namespace Grunwald.BooBinding.Designer
{
@ -297,14 +298,41 @@ namespace Grunwald.BooBinding.Designer @@ -297,14 +298,41 @@ namespace Grunwald.BooBinding.Designer
}
}
public override void OnDeclarationStatement(DeclarationStatement node)
{
CodeVariableDeclarationStatement var = new CodeVariableDeclarationStatement(ConvTypeRef(node.Declaration.Type),
node.Declaration.Name);
if (node.Initializer != null) {
_expression = null;
node.Initializer.Accept(this);
var.InitExpression = _expression;
}
_statements.Add(var);
}
CodeVariableDeclarationStatement GetLocalVariable(string name)
{
foreach (CodeStatement stmt in _statements) {
CodeVariableDeclarationStatement var = stmt as CodeVariableDeclarationStatement;
if (var != null && var.Name == name) {
return var;
}
}
return null;
}
public override void OnReferenceExpression(ReferenceExpression node)
{
if (pc.GetClass(node.Name) != null)
if (pc.GetClass(node.Name) != null) {
_expression = new CodeTypeReferenceExpression(node.Name);
else if (pc.NamespaceExists(node.Name))
} else if (pc.NamespaceExists(node.Name)) {
_expression = new CodeTypeReferenceExpression(node.Name);
else
} else if (GetLocalVariable(node.Name) != null) {
_expression = new CodeVariableReferenceExpression(node.Name);
} else {
_expression = CreateMemberExpression(new CodeThisReferenceExpression(), node.Name);
}
}
CodeExpression CreateMemberExpression(CodeExpression expr, string name)
@ -319,6 +347,10 @@ namespace Grunwald.BooBinding.Designer @@ -319,6 +347,10 @@ namespace Grunwald.BooBinding.Designer
if (_fieldReferenceType == null)
return new CodePropertyReferenceExpression(expr, name);
return CreateMemberExpression(expr, _fieldReferenceType.FullyQualifiedName, name, false);
} else if (expr is CodeVariableReferenceExpression) {
string varName = ((CodeVariableReferenceExpression)expr).VariableName;
CodeVariableDeclarationStatement varDecl = GetLocalVariable(varName);
return CreateMemberExpression(expr, varDecl.Type.BaseType, name, false);
} else {
_fieldReferenceType = null;
return new CodePropertyReferenceExpression(expr, name);
@ -429,5 +461,25 @@ namespace Grunwald.BooBinding.Designer @@ -429,5 +461,25 @@ namespace Grunwald.BooBinding.Designer
{
_expression = new CodeBaseReferenceExpression();
}
public override void OnTypeofExpression(TypeofExpression node)
{
_expression = new CodeTypeOfExpression(ConvTypeRef(node.Type));
}
public override void OnArrayLiteralExpression(ArrayLiteralExpression node)
{
BooResolver resolver = new BooResolver();
IReturnType createType = resolver.GetTypeOfExpression(node, null);
if (createType == null)
createType = ReflectionReturnType.Object;
CodeExpression[] initializers = new CodeExpression[node.Items.Count];
for (int i = 0; i < initializers.Length; i++) {
_expression = null;
node.Items[i].Accept(this);
initializers[i] = _expression;
}
_expression = new CodeArrayCreateExpression(createType.FullyQualifiedName, initializers);
}
}
}

1
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs

@ -187,6 +187,7 @@ namespace ICSharpCode.FormDesigner @@ -187,6 +187,7 @@ namespace ICSharpCode.FormDesigner
public void Reload()
{
try {
failedDesignerInitialize = false;
LoadDesigner();
if (designSurface != null && p.Controls.Count == 0) {

2
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -221,7 +221,7 @@ namespace ICSharpCode.Core @@ -221,7 +221,7 @@ namespace ICSharpCode.Core
abortParserUpdateThread = true;
}
static bool abortParserUpdateThread = false;
static volatile bool abortParserUpdateThread = false;
static Dictionary<string, int> lastUpdateHash = new Dictionary<string, int>();

1
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -195,6 +195,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -195,6 +195,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
if (openSolution != null) {
SaveSolutionPreferences();
WorkbenchSingleton.Workbench.CloseAllViews();
CloseSolution();
}
}

11
src/Main/Core/Project/Src/Services/MenuService/MenuService.cs

@ -20,7 +20,16 @@ namespace ICSharpCode.Core @@ -20,7 +20,16 @@ namespace ICSharpCode.Core
{
public static class MenuService
{
public static ToolStripRenderer Renderer;
static ToolStripRenderer renderer;
public static ToolStripRenderer Renderer {
get {
return renderer;
}
set {
renderer = value;
}
}
public static void AddItemsToMenu(ToolStripItemCollection collection, object owner, string addInTreePath)
{

Loading…
Cancel
Save