[corlib] Avoid unnecessary ephemeron array resizes
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / System.Activities.Presentation / System / Activities / Presentation / VisualBasicExpressionMorphHelper.cs
1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4
5 namespace System.Activities.Presentation
6 {
7     using System;
8     using System.Activities.ExpressionParser;
9     using System.Activities.Presentation.Expressions;
10     using System.Activities.Presentation.View;
11     using System.Runtime;
12     using Microsoft.VisualBasic.Activities;
13
14     class VisualBasicExpressionMorphHelper : ExpressionMorphHelper
15     {
16         public override bool TryInferReturnType(ActivityWithResult expression, EditingContext context, out Type returnType)
17         {
18             bool succeeded = false;
19             Fx.Assert(expression.GetType().GetGenericTypeDefinition() == typeof(VisualBasicValue<>) ||
20                 expression.GetType().GetGenericTypeDefinition() == typeof(VisualBasicReference<>), "VisualBasicExpressionMorphHelper should only apply to VB expression.");
21                             
22             SourceExpressionException compileError;
23             VisualBasicSettings settings;
24             if (ExpressionHelper.IsGenericLocationExpressionType(expression))
25             {
26                 VisualBasicDesignerHelper.RecompileVisualBasicReference(
27                         expression,
28                         out returnType,
29                         out compileError,
30                         out settings);
31             }
32             else
33             {
34                 VisualBasicDesignerHelper.RecompileVisualBasicValue(
35                      expression,
36                      out returnType,
37                      out compileError,
38                      out settings);
39             }
40             if (compileError == null)
41             {
42                 succeeded = true;                    
43                 if (settings != null)
44                 {
45                     //merge with import designer
46                     foreach (VisualBasicImportReference reference in settings.ImportReferences)
47                     {
48                         ImportDesigner.AddImport(reference.Import, context);
49                     }
50                 }
51             }
52             return succeeded;
53         }
54         
55         public override bool TryMorphExpression(ActivityWithResult expression, bool isLocationExpression, Type newType, 
56             EditingContext context, out ActivityWithResult newExpression)
57         {
58             string expressionText = ExpressionHelper.GetExpressionString(expression);            
59             newExpression = VisualBasicEditor.CreateExpressionFromString(newType, expressionText, isLocationExpression, new ParserContext());
60             return true;
61         }
62     }
63 }